Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
19e4d33b
Commit
19e4d33b
authored
Mar 20, 1999
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove yacc/lex output files from CVS repository.
parent
bb7c0da1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
0 additions
and
4775 deletions
+0
-4775
src/pl/plpgsql/src/gram.c
src/pl/plpgsql/src/gram.c
+0
-2469
src/pl/plpgsql/src/scan.c
src/pl/plpgsql/src/scan.c
+0
-2218
src/pl/plpgsql/src/y.tab.h
src/pl/plpgsql/src/y.tab.h
+0
-88
No files found.
src/pl/plpgsql/src/gram.c
deleted
100644 → 0
View file @
bb7c0da1
/* A Bison parser, made from gram.y
by GNU Bison version 1.25
*/
#define YYBISON 1
/* Identify Bison output. */
#define K_ALIAS 258
#define K_ASSIGN 259
#define K_BEGIN 260
#define K_CONSTANT 261
#define K_DEBUG 262
#define K_DECLARE 263
#define K_DEFAULT 264
#define K_DOTDOT 265
#define K_ELSE 266
#define K_END 267
#define K_EXCEPTION 268
#define K_EXIT 269
#define K_FOR 270
#define K_FROM 271
#define K_IF 272
#define K_IN 273
#define K_INTO 274
#define K_LOOP 275
#define K_NOT 276
#define K_NOTICE 277
#define K_NULL 278
#define K_PERFORM 279
#define K_RAISE 280
#define K_RECORD 281
#define K_RENAME 282
#define K_RETURN 283
#define K_REVERSE 284
#define K_SELECT 285
#define K_THEN 286
#define K_TO 287
#define K_TYPE 288
#define K_WHEN 289
#define K_WHILE 290
#define T_FUNCTION 291
#define T_TRIGGER 292
#define T_CHAR 293
#define T_BPCHAR 294
#define T_VARCHAR 295
#define T_LABEL 296
#define T_STRING 297
#define T_VARIABLE 298
#define T_ROW 299
#define T_ROWTYPE 300
#define T_RECORD 301
#define T_RECFIELD 302
#define T_TGARGV 303
#define T_DTYPE 304
#define T_WORD 305
#define T_NUMBER 306
#define T_ERROR 307
#define O_OPTION 308
#define O_DUMP 309
#line 1 "gram.y"
/**********************************************************************
* gram.y - Parser for the PL/pgSQL
* procedural language
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/gram.c,v 1.4 1999/01/29 11:56:01 vadim Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
* The author hereby grants permission to use, copy, modify,
* distribute, and license this software and its documentation
* for any purpose, provided that existing copyright notices are
* retained in all copies and that this notice is included
* verbatim in any distributions. No written agreement, license,
* or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their
* author and need not follow the licensing terms described
* here, provided that the new terms are clearly indicated on
* the first page of each file where they apply.
*
* IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY
* PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN
* IF THE AUTHOR HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE AUTHOR AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON
* AN "AS IS" BASIS, AND THE AUTHOR AND DISTRIBUTORS HAVE NO
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*
**********************************************************************/
#include "stdio.h"
#include "string.h"
#include "plpgsql.h"
extern
int
yylineno
;
extern
char
yytext
[];
static
PLpgSQL_expr
*
read_sqlstmt
(
int
until
,
char
*
s
,
char
*
sqlstart
);
static
PLpgSQL_stmt
*
make_select_stmt
(
void
);
static
PLpgSQL_expr
*
make_tupret_expr
(
PLpgSQL_row
*
row
);
#line 52 "gram.y"
typedef
union
{
int32
ival
;
char
*
str
;
struct
{
char
*
name
;
int
lineno
;
}
varname
;
struct
{
int
nalloc
;
int
nused
;
int
*
dtnums
;
}
dtlist
;
struct
{
int
reverse
;
PLpgSQL_expr
*
expr
;
}
forilow
;
struct
{
char
*
label
;
int
n_initvars
;
int
*
initvarnos
;
}
declhdr
;
PLpgSQL_type
*
dtype
;
PLpgSQL_var
*
var
;
PLpgSQL_row
*
row
;
PLpgSQL_rec
*
rec
;
PLpgSQL_recfield
*
recfield
;
PLpgSQL_trigarg
*
trigarg
;
PLpgSQL_expr
*
expr
;
PLpgSQL_stmt
*
stmt
;
PLpgSQL_stmts
*
stmts
;
PLpgSQL_stmt_block
*
program
;
PLpgSQL_nsitem
*
nsitem
;
}
YYSTYPE
;
#include <stdio.h>
#ifndef __cplusplus
#ifndef __STDC__
#define const
#endif
#endif
#define YYFINAL 179
#define YYFLAG -32768
#define YYNTBASE 61
#define YYTRANSLATE(x) ((unsigned)(x) <= 309 ? yytranslate[x] : 118)
static
const
char
yytranslate
[]
=
{
0
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
58
,
59
,
2
,
2
,
60
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
55
,
56
,
2
,
57
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
28
,
29
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
53
,
54
};
#if YYDEBUG != 0
static
const
short
yyprhs
[]
=
{
0
,
0
,
4
,
8
,
9
,
11
,
14
,
16
,
19
,
26
,
28
,
31
,
35
,
37
,
40
,
42
,
48
,
50
,
52
,
58
,
62
,
66
,
72
,
78
,
80
,
82
,
84
,
86
,
87
,
89
,
91
,
93
,
96
,
99
,
104
,
105
,
109
,
111
,
112
,
115
,
117
,
119
,
121
,
123
,
124
,
126
,
129
,
131
,
133
,
135
,
137
,
139
,
141
,
143
,
145
,
147
,
149
,
151
,
153
,
155
,
157
,
161
,
166
,
168
,
170
,
179
,
180
,
183
,
188
,
194
,
203
,
205
,
207
,
209
,
210
,
219
,
221
,
223
,
226
,
231
,
234
,
241
,
247
,
249
,
251
,
253
,
255
,
258
,
260
,
263
,
266
,
269
,
274
,
277
,
279
,
281
,
282
,
283
,
284
,
285
,
291
,
292
,
294
,
296
,
299
,
301
};
static
const
short
yyrhs
[]
=
{
36
,
62
,
65
,
0
,
37
,
62
,
65
,
0
,
0
,
63
,
0
,
63
,
64
,
0
,
64
,
0
,
53
,
54
,
0
,
66
,
5
,
117
,
83
,
12
,
55
,
0
,
113
,
0
,
113
,
67
,
0
,
113
,
67
,
68
,
0
,
8
,
0
,
68
,
69
,
0
,
69
,
0
,
56
,
56
,
116
,
57
,
57
,
0
,
8
,
0
,
70
,
0
,
73
,
75
,
76
,
80
,
81
,
0
,
73
,
26
,
55
,
0
,
73
,
72
,
55
,
0
,
73
,
3
,
15
,
71
,
55
,
0
,
27
,
74
,
32
,
74
,
55
,
0
,
50
,
0
,
44
,
0
,
50
,
0
,
50
,
0
,
0
,
6
,
0
,
77
,
0
,
49
,
0
,
38
,
78
,
0
,
40
,
78
,
0
,
39
,
58
,
79
,
59
,
0
,
0
,
58
,
79
,
59
,
0
,
51
,
0
,
0
,
21
,
23
,
0
,
55
,
0
,
82
,
0
,
4
,
0
,
9
,
0
,
0
,
84
,
0
,
84
,
85
,
0
,
85
,
0
,
65
,
0
,
87
,
0
,
89
,
0
,
91
,
0
,
92
,
0
,
93
,
0
,
97
,
0
,
99
,
0
,
100
,
0
,
101
,
0
,
102
,
0
,
108
,
0
,
86
,
0
,
24
,
117
,
110
,
0
,
88
,
117
,
4
,
110
,
0
,
43
,
0
,
47
,
0
,
17
,
117
,
111
,
83
,
90
,
12
,
17
,
55
,
0
,
0
,
11
,
83
,
0
,
113
,
20
,
117
,
107
,
0
,
113
,
35
,
117
,
112
,
107
,
0
,
113
,
15
,
117
,
94
,
18
,
96
,
112
,
107
,
0
,
95
,
0
,
43
,
0
,
50
,
0
,
0
,
113
,
15
,
117
,
98
,
18
,
30
,
112
,
107
,
0
,
46
,
0
,
44
,
0
,
30
,
117
,
0
,
14
,
117
,
114
,
115
,
0
,
28
,
117
,
0
,
25
,
117
,
104
,
103
,
105
,
55
,
0
,
25
,
117
,
104
,
103
,
55
,
0
,
42
,
0
,
13
,
0
,
22
,
0
,
7
,
0
,
105
,
106
,
0
,
106
,
0
,
60
,
43
,
0
,
60
,
47
,
0
,
60
,
48
,
0
,
83
,
12
,
20
,
55
,
0
,
109
,
117
,
0
,
50
,
0
,
52
,
0
,
0
,
0
,
0
,
0
,
56
,
56
,
116
,
57
,
57
,
0
,
0
,
41
,
0
,
55
,
0
,
34
,
110
,
0
,
50
,
0
,
0
};
#endif
#if YYDEBUG != 0
static
const
short
yyrline
[]
=
{
0
,
184
,
188
,
194
,
195
,
198
,
199
,
202
,
208
,
229
,
237
,
245
,
257
,
263
,
267
,
273
,
277
,
281
,
287
,
306
,
320
,
330
,
335
,
341
,
362
,
368
,
375
,
381
,
383
,
387
,
393
,
397
,
408
,
414
,
422
,
426
,
432
,
438
,
440
,
444
,
446
,
502
,
503
,
505
,
513
,
519
,
529
,
545
,
547
,
549
,
551
,
553
,
555
,
557
,
559
,
561
,
563
,
565
,
567
,
569
,
573
,
589
,
605
,
613
,
619
,
636
,
644
,
648
,
666
,
685
,
707
,
734
,
739
,
746
,
816
,
845
,
849
,
855
,
862
,
878
,
924
,
940
,
957
,
963
,
967
,
971
,
977
,
989
,
998
,
1002
,
1006
,
1012
,
1016
,
1029
,
1031
,
1035
,
1039
,
1043
,
1047
,
1052
,
1059
,
1061
,
1065
,
1067
,
1071
,
1075
};
#endif
#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
static
const
char
*
const
yytname
[]
=
{
"$"
,
"error"
,
"$undefined."
,
"K_ALIAS"
,
"K_ASSIGN"
,
"K_BEGIN"
,
"K_CONSTANT"
,
"K_DEBUG"
,
"K_DECLARE"
,
"K_DEFAULT"
,
"K_DOTDOT"
,
"K_ELSE"
,
"K_END"
,
"K_EXCEPTION"
,
"K_EXIT"
,
"K_FOR"
,
"K_FROM"
,
"K_IF"
,
"K_IN"
,
"K_INTO"
,
"K_LOOP"
,
"K_NOT"
,
"K_NOTICE"
,
"K_NULL"
,
"K_PERFORM"
,
"K_RAISE"
,
"K_RECORD"
,
"K_RENAME"
,
"K_RETURN"
,
"K_REVERSE"
,
"K_SELECT"
,
"K_THEN"
,
"K_TO"
,
"K_TYPE"
,
"K_WHEN"
,
"K_WHILE"
,
"T_FUNCTION"
,
"T_TRIGGER"
,
"T_CHAR"
,
"T_BPCHAR"
,
"T_VARCHAR"
,
"T_LABEL"
,
"T_STRING"
,
"T_VARIABLE"
,
"T_ROW"
,
"T_ROWTYPE"
,
"T_RECORD"
,
"T_RECFIELD"
,
"T_TGARGV"
,
"T_DTYPE"
,
"T_WORD"
,
"T_NUMBER"
,
"T_ERROR"
,
"O_OPTION"
,
"O_DUMP"
,
"';'"
,
"'<'"
,
"'>'"
,
"'('"
,
"')'"
,
"','"
,
"pl_function"
,
"comp_optsect"
,
"comp_options"
,
"comp_option"
,
"pl_block"
,
"decl_sect"
,
"decl_start"
,
"decl_stmts"
,
"decl_stmt"
,
"decl_statement"
,
"decl_aliasitem"
,
"decl_rowtype"
,
"decl_varname"
,
"decl_renname"
,
"decl_const"
,
"decl_datatype"
,
"decl_dtypename"
,
"decl_atttypmod"
,
"decl_atttypmodval"
,
"decl_notnull"
,
"decl_defval"
,
"decl_defkey"
,
"proc_sect"
,
"proc_stmts"
,
"proc_stmt"
,
"stmt_perform"
,
"stmt_assign"
,
"assign_var"
,
"stmt_if"
,
"stmt_else"
,
"stmt_loop"
,
"stmt_while"
,
"stmt_fori"
,
"fori_var"
,
"fori_varname"
,
"fori_lower"
,
"stmt_fors"
,
"fors_target"
,
"stmt_select"
,
"stmt_exit"
,
"stmt_return"
,
"stmt_raise"
,
"raise_msg"
,
"raise_level"
,
"raise_params"
,
"raise_param"
,
"loop_body"
,
"stmt_execsql"
,
"execsql_start"
,
"expr_until_semi"
,
"expr_until_then"
,
"expr_until_loop"
,
"opt_label"
,
"opt_exitlabel"
,
"opt_exitcond"
,
"opt_lblname"
,
"lno"
,
NULL
};
#endif
static
const
short
yyr1
[]
=
{
0
,
61
,
61
,
62
,
62
,
63
,
63
,
64
,
65
,
66
,
66
,
66
,
67
,
68
,
68
,
69
,
69
,
69
,
70
,
70
,
70
,
70
,
70
,
71
,
72
,
73
,
74
,
75
,
75
,
76
,
77
,
77
,
77
,
77
,
78
,
78
,
79
,
80
,
80
,
81
,
81
,
82
,
82
,
83
,
83
,
84
,
84
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
85
,
86
,
87
,
88
,
88
,
89
,
90
,
90
,
91
,
92
,
93
,
94
,
95
,
95
,
96
,
97
,
98
,
98
,
99
,
100
,
101
,
102
,
102
,
103
,
104
,
104
,
104
,
105
,
105
,
106
,
106
,
106
,
107
,
108
,
109
,
109
,
110
,
111
,
112
,
113
,
113
,
114
,
114
,
115
,
115
,
116
,
117
};
static
const
short
yyr2
[]
=
{
0
,
3
,
3
,
0
,
1
,
2
,
1
,
2
,
6
,
1
,
2
,
3
,
1
,
2
,
1
,
5
,
1
,
1
,
5
,
3
,
3
,
5
,
5
,
1
,
1
,
1
,
1
,
0
,
1
,
1
,
1
,
2
,
2
,
4
,
0
,
3
,
1
,
0
,
2
,
1
,
1
,
1
,
1
,
0
,
1
,
2
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
3
,
4
,
1
,
1
,
8
,
0
,
2
,
4
,
5
,
8
,
1
,
1
,
1
,
0
,
8
,
1
,
1
,
2
,
4
,
2
,
6
,
5
,
1
,
1
,
1
,
1
,
2
,
1
,
2
,
2
,
2
,
4
,
2
,
1
,
1
,
0
,
0
,
0
,
0
,
5
,
0
,
1
,
1
,
2
,
1
,
0
};
static
const
short
yydefact
[]
=
{
0
,
3
,
3
,
0
,
98
,
4
,
6
,
98
,
7
,
0
,
1
,
0
,
9
,
5
,
2
,
0
,
105
,
12
,
10
,
104
,
0
,
98
,
16
,
0
,
25
,
0
,
11
,
14
,
17
,
27
,
0
,
105
,
105
,
105
,
105
,
105
,
105
,
62
,
63
,
93
,
94
,
47
,
0
,
98
,
46
,
59
,
48
,
105
,
49
,
50
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
58
,
105
,
9
,
26
,
0
,
0
,
13
,
0
,
28
,
0
,
24
,
0
,
0
,
99
,
100
,
96
,
95
,
0
,
79
,
77
,
0
,
45
,
0
,
92
,
105
,
105
,
105
,
0
,
0
,
0
,
19
,
20
,
34
,
0
,
34
,
30
,
37
,
29
,
101
,
0
,
98
,
60
,
85
,
83
,
84
,
0
,
8
,
95
,
0
,
98
,
97
,
0
,
0
,
23
,
0
,
0
,
31
,
0
,
32
,
0
,
0
,
95
,
102
,
78
,
65
,
82
,
0
,
61
,
71
,
76
,
75
,
72
,
0
,
70
,
0
,
0
,
67
,
98
,
22
,
15
,
21
,
36
,
0
,
0
,
38
,
41
,
42
,
39
,
18
,
40
,
103
,
98
,
0
,
81
,
0
,
0
,
87
,
73
,
0
,
0
,
68
,
35
,
33
,
66
,
0
,
88
,
89
,
90
,
80
,
86
,
97
,
97
,
0
,
0
,
98
,
98
,
91
,
64
,
69
,
74
,
0
,
0
,
0
};
static
const
short
yydefgoto
[]
=
{
177
,
4
,
5
,
6
,
41
,
11
,
18
,
26
,
27
,
28
,
111
,
68
,
29
,
61
,
69
,
93
,
94
,
113
,
139
,
117
,
145
,
146
,
132
,
43
,
44
,
45
,
46
,
47
,
48
,
149
,
49
,
50
,
51
,
129
,
130
,
167
,
52
,
131
,
53
,
54
,
55
,
56
,
123
,
102
,
152
,
153
,
133
,
57
,
58
,
98
,
97
,
134
,
59
,
96
,
120
,
20
,
21
};
static
const
short
yypact
[]
=
{
-
15
,
-
40
,
-
40
,
-
39
,
-
13
,
-
40
,
-
32768
,
-
13
,
-
32768
,
-
2
,
-
32768
,
36
,
59
,
-
32768
,
-
32768
,
19
,
-
32768
,
-
32768
,
0
,
-
32768
,
21
,
70
,
-
32768
,
22
,
-
32768
,
25
,
0
,
-
32768
,
-
32768
,
13
,
26
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
76
,
12
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
10
,
-
32768
,
57
,
19
,
-
32768
,
87
,
-
32768
,
48
,
-
32768
,
51
,
69
,
-
32768
,
63
,
-
32768
,
-
32768
,
58
,
-
32768
,
-
32768
,
55
,
-
32768
,
107
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
22
,
62
,
64
,
-
32768
,
-
32768
,
54
,
65
,
54
,
-
32768
,
94
,
-
32768
,
-
32768
,
-
24
,
49
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
74
,
-
32768
,
-
32768
,
47
,
70
,
-
32768
,
66
,
67
,
-
32768
,
73
,
78
,
-
32768
,
78
,
-
32768
,
102
,
3
,
-
32768
,
-
32768
,
-
32768
,
119
,
-
32768
,
-
22
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
113
,
-
32768
,
114
,
121
,
-
32768
,
70
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
75
,
77
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
70
,
123
,
-
32768
,
1
,
15
,
-
32768
,
-
32768
,
108
,
117
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
122
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
85
,
86
,
70
,
70
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
142
,
143
,
-
32768
};
static
const
short
yypgoto
[]
=
{
-
32768
,
144
,
-
32768
,
139
,
7
,
-
32768
,
-
32768
,
-
32768
,
124
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
61
,
-
32768
,
-
32768
,
-
32768
,
56
,
34
,
-
32768
,
-
32768
,
-
32768
,
-
21
,
-
32768
,
106
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
32768
,
-
1
,
-
125
,
-
32768
,
-
32768
,
-
84
,
-
32768
,
-
82
,
28
,
-
32768
,
-
32768
,
90
,
-
30
};
#define YYLAST 152
static
const
short
yytable
[]
=
{
42
,
71
,
72
,
73
,
74
,
75
,
76
,
142
,
22
,
157
,
118
,
10
,
143
,
3
,
14
,
8
,
64
,
79
,
17
,
65
,
124
,
1
,
2
,
-
44
,
-
44
,
81
,
31
,
23
,
80
,
32
,
82
,
119
,
12
,
150
,
147
,
12
,
33
,
34
,
151
,
66
,
35
,
16
,
36
,
9
,
162
,
83
,
175
,
176
,
163
,
164
,
24
,
105
,
106
,
107
,
15
,
37
,
25
,
67
,
144
,
38
,
-
43
,
-
43
,
39
,
31
,
40
,
99
,
32
,
17
,
9
,
19
,
165
,
100
,
60
,
33
,
34
,
151
,
121
,
35
,
30
,
36
,
101
,
62
,
-
43
,
70
,
31
,
171
,
172
,
32
,
77
,
84
,
125
,
126
,
37
,
127
,
33
,
34
,
38
,
128
,
35
,
39
,
36
,
40
,
86
,
87
,
95
,
9
,
88
,
89
,
90
,
91
,
103
,
104
,
112
,
37
,
110
,
116
,
122
,
38
,
92
,
109
,
39
,
135
,
40
,
114
,
136
,
141
,
9
,
160
,
137
,
138
,
148
,
154
,
155
,
156
,
158
,
161
,
159
,
169
,
168
,
170
,
173
,
174
,
178
,
179
,
13
,
108
,
7
,
115
,
140
,
78
,
63
,
166
,
85
};
static
const
short
yycheck
[]
=
{
21
,
31
,
32
,
33
,
34
,
35
,
36
,
4
,
8
,
134
,
34
,
4
,
9
,
53
,
7
,
54
,
3
,
47
,
8
,
6
,
104
,
36
,
37
,
11
,
12
,
15
,
14
,
27
,
58
,
17
,
20
,
55
,
4
,
55
,
118
,
7
,
24
,
25
,
60
,
26
,
28
,
5
,
30
,
56
,
43
,
35
,
171
,
172
,
47
,
48
,
50
,
81
,
82
,
83
,
56
,
43
,
56
,
44
,
55
,
47
,
11
,
12
,
50
,
14
,
52
,
7
,
17
,
8
,
56
,
50
,
55
,
13
,
50
,
24
,
25
,
60
,
97
,
28
,
57
,
30
,
22
,
56
,
12
,
57
,
14
,
167
,
168
,
17
,
12
,
32
,
43
,
44
,
43
,
46
,
24
,
25
,
47
,
50
,
28
,
50
,
30
,
52
,
15
,
55
,
41
,
56
,
55
,
38
,
39
,
40
,
55
,
4
,
58
,
43
,
50
,
21
,
42
,
47
,
49
,
57
,
50
,
55
,
52
,
58
,
57
,
23
,
56
,
148
,
55
,
51
,
11
,
18
,
18
,
12
,
59
,
12
,
59
,
20
,
30
,
17
,
55
,
55
,
0
,
0
,
5
,
84
,
2
,
91
,
114
,
43
,
26
,
152
,
62
};
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/share/misc/bison.simple"
/* Skeleton output parser for bison,
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
#ifndef alloca
#ifdef __GNUC__
#define alloca __builtin_alloca
#else
/* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
#include <alloca.h>
#else
/* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
#include <malloc.h>
#else
/* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
#include <malloc.h>
#pragma alloca
#else
/* not MSDOS, __TURBOC__, or _AIX */
#ifdef __hpux
#ifdef __cplusplus
extern
"C"
{
void
*
alloca
(
unsigned
int
);
};
#else
/* not __cplusplus */
void
*
alloca
();
#endif
/* not __cplusplus */
#endif
/* __hpux */
#endif
/* not _AIX */
#endif
/* not MSDOS, or __TURBOC__ */
#endif
/* not sparc. */
#endif
/* not GNU C. */
#endif
/* alloca not defined. */
/* This is the parser code that is written into each bison parser
when the %semantic_parser declaration is not specified in the grammar.
It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */
/* Note: there must be only one dollar sign in this file.
It is replaced by the list of actions, each action
as one case of the switch. */
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
#define YYACCEPT return(0)
#define YYABORT return(1)
#define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror.
This remains here temporarily to ease the
transition to the new meaning of YYERROR, for GCC.
Once GCC version 2 has supplanted version 1, this can go. */
#define YYFAIL goto yyerrlab
#define YYRECOVERING() (!!yyerrstatus)
#define YYBACKUP(token, value) \
do \
if (yychar == YYEMPTY && yylen == 1) \
{ yychar = (token), yylval = (value); \
yychar1 = YYTRANSLATE (yychar); \
YYPOPSTACK; \
goto yybackup; \
} \
else \
{ yyerror ("syntax error: cannot back up"); YYERROR; } \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
#ifndef YYPURE
#define YYLEX yylex()
#endif
#ifdef YYPURE
#ifdef YYLSP_NEEDED
#ifdef YYLEX_PARAM
#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
#else
#define YYLEX yylex(&yylval, &yylloc)
#endif
#else
/* not YYLSP_NEEDED */
#ifdef YYLEX_PARAM
#define YYLEX yylex(&yylval, YYLEX_PARAM)
#else
#define YYLEX yylex(&yylval)
#endif
#endif
/* not YYLSP_NEEDED */
#endif
/* If nonreentrant, generate the variables here */
#ifndef YYPURE
int
yychar
;
/* the lookahead symbol */
YYSTYPE
yylval
;
/* the semantic value of the */
/* lookahead symbol */
#ifdef YYLSP_NEEDED
YYLTYPE
yylloc
;
/* location data for the lookahead */
/* symbol */
#endif
int
yynerrs
;
/* number of parse errors so far */
#endif
/* not YYPURE */
#if YYDEBUG != 0
int
yydebug
;
/* nonzero means print parse trace */
/* Since this is uninitialized, it does not stop multiple parsers
from coexisting. */
#endif
/* YYINITDEPTH indicates the initial size of the parser's stacks */
#ifndef YYINITDEPTH
#define YYINITDEPTH 200
#endif
/* YYMAXDEPTH is the maximum size the stacks can grow to
(effective only if the built-in stack extension method is used). */
#if YYMAXDEPTH == 0
#undef YYMAXDEPTH
#endif
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 10000
#endif
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
int
yyparse
(
void
);
#endif
#if __GNUC__ > 1
/* GNU C and GNU C++ define this. */
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
#else
/* not GNU C or C++ */
#ifndef __cplusplus
/* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */
static
void
__yy_memcpy
(
to
,
from
,
count
)
char
*
to
;
char
*
from
;
int
count
;
{
register
char
*
f
=
from
;
register
char
*
t
=
to
;
register
int
i
=
count
;
while
(
i
--
>
0
)
*
t
++
=
*
f
++
;
}
#else
/* __cplusplus */
/* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */
static
void
__yy_memcpy
(
char
*
to
,
char
*
from
,
int
count
)
{
register
char
*
f
=
from
;
register
char
*
t
=
to
;
register
int
i
=
count
;
while
(
i
--
>
0
)
*
t
++
=
*
f
++
;
}
#endif
#endif
#line 196 "/usr/share/misc/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
It should actually point to an object.
Grammar actions can access the variable by casting it
to the proper pointer type. */
#ifdef YYPARSE_PARAM
#ifdef __cplusplus
#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
#define YYPARSE_PARAM_DECL
#else
/* not __cplusplus */
#define YYPARSE_PARAM_ARG YYPARSE_PARAM
#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
#endif
/* not __cplusplus */
#else
/* not YYPARSE_PARAM */
#define YYPARSE_PARAM_ARG
#define YYPARSE_PARAM_DECL
#endif
/* not YYPARSE_PARAM */
int
yyparse
(
YYPARSE_PARAM_ARG
)
YYPARSE_PARAM_DECL
{
register
int
yystate
;
register
int
yyn
;
register
short
*
yyssp
;
register
YYSTYPE
*
yyvsp
;
int
yyerrstatus
;
/* number of tokens to shift before error messages enabled */
int
yychar1
=
0
;
/* lookahead token as an internal (translated) token number */
short
yyssa
[
YYINITDEPTH
];
/* the state stack */
YYSTYPE
yyvsa
[
YYINITDEPTH
];
/* the semantic value stack */
short
*
yyss
=
yyssa
;
/* refer to the stacks thru separate pointers */
YYSTYPE
*
yyvs
=
yyvsa
;
/* to allow yyoverflow to reallocate them elsewhere */
#ifdef YYLSP_NEEDED
YYLTYPE
yylsa
[
YYINITDEPTH
];
/* the location stack */
YYLTYPE
*
yyls
=
yylsa
;
YYLTYPE
*
yylsp
;
#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
#else
#define YYPOPSTACK (yyvsp--, yyssp--)
#endif
int
yystacksize
=
YYINITDEPTH
;
#ifdef YYPURE
int
yychar
;
YYSTYPE
yylval
;
int
yynerrs
;
#ifdef YYLSP_NEEDED
YYLTYPE
yylloc
;
#endif
#endif
YYSTYPE
yyval
;
/* the variable used to return */
/* semantic values from the action */
/* routines */
int
yylen
;
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Starting parse
\n
"
);
#endif
yystate
=
0
;
yyerrstatus
=
0
;
yynerrs
=
0
;
yychar
=
YYEMPTY
;
/* Cause a token to be read. */
/* Initialize stack pointers.
Waste one element of value and location stack
so that they stay on the same level as the state stack.
The wasted elements are never initialized. */
yyssp
=
yyss
-
1
;
yyvsp
=
yyvs
;
#ifdef YYLSP_NEEDED
yylsp
=
yyls
;
#endif
/* Push a new state, which is found in yystate . */
/* In all cases, when you get here, the value and location stacks
have just been pushed. so pushing a state here evens the stacks. */
yynewstate:
*++
yyssp
=
yystate
;
if
(
yyssp
>=
yyss
+
yystacksize
-
1
)
{
/* Give user a chance to reallocate the stack */
/* Use copies of these so that the &'s don't force the real ones into memory. */
YYSTYPE
*
yyvs1
=
yyvs
;
short
*
yyss1
=
yyss
;
#ifdef YYLSP_NEEDED
YYLTYPE
*
yyls1
=
yyls
;
#endif
/* Get the current used size of the three stacks, in elements. */
int
size
=
yyssp
-
yyss
+
1
;
#ifdef yyoverflow
/* Each stack pointer address is followed by the size of
the data in use in that stack, in bytes. */
#ifdef YYLSP_NEEDED
/* This used to be a conditional around just the two extra args,
but that might be undefined if yyoverflow is a macro. */
yyoverflow
(
"parser stack overflow"
,
&
yyss1
,
size
*
sizeof
(
*
yyssp
),
&
yyvs1
,
size
*
sizeof
(
*
yyvsp
),
&
yyls1
,
size
*
sizeof
(
*
yylsp
),
&
yystacksize
);
#else
yyoverflow
(
"parser stack overflow"
,
&
yyss1
,
size
*
sizeof
(
*
yyssp
),
&
yyvs1
,
size
*
sizeof
(
*
yyvsp
),
&
yystacksize
);
#endif
yyss
=
yyss1
;
yyvs
=
yyvs1
;
#ifdef YYLSP_NEEDED
yyls
=
yyls1
;
#endif
#else
/* no yyoverflow */
/* Extend the stack our own way. */
if
(
yystacksize
>=
YYMAXDEPTH
)
{
yyerror
(
"parser stack overflow"
);
return
2
;
}
yystacksize
*=
2
;
if
(
yystacksize
>
YYMAXDEPTH
)
yystacksize
=
YYMAXDEPTH
;
yyss
=
(
short
*
)
alloca
(
yystacksize
*
sizeof
(
*
yyssp
));
__yy_memcpy
((
char
*
)
yyss
,
(
char
*
)
yyss1
,
size
*
sizeof
(
*
yyssp
));
yyvs
=
(
YYSTYPE
*
)
alloca
(
yystacksize
*
sizeof
(
*
yyvsp
));
__yy_memcpy
((
char
*
)
yyvs
,
(
char
*
)
yyvs1
,
size
*
sizeof
(
*
yyvsp
));
#ifdef YYLSP_NEEDED
yyls
=
(
YYLTYPE
*
)
alloca
(
yystacksize
*
sizeof
(
*
yylsp
));
__yy_memcpy
((
char
*
)
yyls
,
(
char
*
)
yyls1
,
size
*
sizeof
(
*
yylsp
));
#endif
#endif
/* no yyoverflow */
yyssp
=
yyss
+
size
-
1
;
yyvsp
=
yyvs
+
size
-
1
;
#ifdef YYLSP_NEEDED
yylsp
=
yyls
+
size
-
1
;
#endif
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Stack size increased to %d
\n
"
,
yystacksize
);
#endif
if
(
yyssp
>=
yyss
+
yystacksize
-
1
)
YYABORT
;
}
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Entering state %d
\n
"
,
yystate
);
#endif
goto
yybackup
;
yybackup:
/* Do appropriate processing given the current state. */
/* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
/* First try to decide what to do without reference to lookahead token. */
yyn
=
yypact
[
yystate
];
if
(
yyn
==
YYFLAG
)
goto
yydefault
;
/* Not known => get a lookahead token if don't already have one. */
/* yychar is either YYEMPTY or YYEOF
or a valid token in external form. */
if
(
yychar
==
YYEMPTY
)
{
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Reading a token: "
);
#endif
yychar
=
YYLEX
;
}
/* Convert token to internal form (in yychar1) for indexing tables with */
if
(
yychar
<=
0
)
/* This means end of input. */
{
yychar1
=
0
;
yychar
=
YYEOF
;
/* Don't call YYLEX any more */
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Now at end of input.
\n
"
);
#endif
}
else
{
yychar1
=
YYTRANSLATE
(
yychar
);
#if YYDEBUG != 0
if
(
yydebug
)
{
fprintf
(
stderr
,
"Next token is %d (%s"
,
yychar
,
yytname
[
yychar1
]);
/* Give the individual parser a way to print the precise meaning
of a token, for further debugging info. */
#ifdef YYPRINT
YYPRINT
(
stderr
,
yychar
,
yylval
);
#endif
fprintf
(
stderr
,
")
\n
"
);
}
#endif
}
yyn
+=
yychar1
;
if
(
yyn
<
0
||
yyn
>
YYLAST
||
yycheck
[
yyn
]
!=
yychar1
)
goto
yydefault
;
yyn
=
yytable
[
yyn
];
/* yyn is what to do for this token type in this state.
Negative => reduce, -yyn is rule number.
Positive => shift, yyn is new state.
New state is final state => don't bother to shift,
just return success.
0, or most negative number => error. */
if
(
yyn
<
0
)
{
if
(
yyn
==
YYFLAG
)
goto
yyerrlab
;
yyn
=
-
yyn
;
goto
yyreduce
;
}
else
if
(
yyn
==
0
)
goto
yyerrlab
;
if
(
yyn
==
YYFINAL
)
YYACCEPT
;
/* Shift the lookahead token. */
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Shifting token %d (%s), "
,
yychar
,
yytname
[
yychar1
]);
#endif
/* Discard the token being shifted unless it is eof. */
if
(
yychar
!=
YYEOF
)
yychar
=
YYEMPTY
;
*++
yyvsp
=
yylval
;
#ifdef YYLSP_NEEDED
*++
yylsp
=
yylloc
;
#endif
/* count tokens shifted since error; after three, turn off error status. */
if
(
yyerrstatus
)
yyerrstatus
--
;
yystate
=
yyn
;
goto
yynewstate
;
/* Do the default action for the current state. */
yydefault:
yyn
=
yydefact
[
yystate
];
if
(
yyn
==
0
)
goto
yyerrlab
;
/* Do a reduction. yyn is the number of a rule to reduce with. */
yyreduce:
yylen
=
yyr2
[
yyn
];
if
(
yylen
>
0
)
yyval
=
yyvsp
[
1
-
yylen
];
/* implement default value of the action */
#if YYDEBUG != 0
if
(
yydebug
)
{
int
i
;
fprintf
(
stderr
,
"Reducing via rule %d (line %d), "
,
yyn
,
yyrline
[
yyn
]);
/* Print the symbols being reduced, and their result. */
for
(
i
=
yyprhs
[
yyn
];
yyrhs
[
i
]
>
0
;
i
++
)
fprintf
(
stderr
,
"%s "
,
yytname
[
yyrhs
[
i
]]);
fprintf
(
stderr
,
" -> %s
\n
"
,
yytname
[
yyr1
[
yyn
]]);
}
#endif
switch
(
yyn
)
{
case
1
:
#line 185 "gram.y"
{
yylval
.
program
=
(
PLpgSQL_stmt_block
*
)
yyvsp
[
0
].
stmt
;
;
break
;}
case
2
:
#line 189 "gram.y"
{
yylval
.
program
=
(
PLpgSQL_stmt_block
*
)
yyvsp
[
0
].
stmt
;
;
break
;}
case
7
:
#line 203 "gram.y"
{
plpgsql_DumpExecTree
=
1
;
;
break
;}
case
8
:
#line 209 "gram.y"
{
PLpgSQL_stmt_block
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_block
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_block
));
new
->
cmd_type
=
PLPGSQL_STMT_BLOCK
;
new
->
lineno
=
yyvsp
[
-
3
].
ival
;
new
->
label
=
yyvsp
[
-
5
].
declhdr
.
label
;
new
->
n_initvars
=
yyvsp
[
-
5
].
declhdr
.
n_initvars
;
new
->
initvarnos
=
yyvsp
[
-
5
].
declhdr
.
initvarnos
;
new
->
body
=
yyvsp
[
-
2
].
stmts
;
plpgsql_ns_pop
();
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
9
:
#line 230 "gram.y"
{
plpgsql_ns_setlocal
(
false
);
yyval
.
declhdr
.
label
=
yyvsp
[
0
].
str
;
yyval
.
declhdr
.
n_initvars
=
0
;
yyval
.
declhdr
.
initvarnos
=
NULL
;
plpgsql_add_initdatums
(
NULL
);
;
break
;}
case
10
:
#line 238 "gram.y"
{
plpgsql_ns_setlocal
(
false
);
yyval
.
declhdr
.
label
=
yyvsp
[
-
1
].
str
;
yyval
.
declhdr
.
n_initvars
=
0
;
yyval
.
declhdr
.
initvarnos
=
NULL
;
plpgsql_add_initdatums
(
NULL
);
;
break
;}
case
11
:
#line 246 "gram.y"
{
plpgsql_ns_setlocal
(
false
);
if
(
yyvsp
[
0
].
str
!=
NULL
)
{
yyval
.
declhdr
.
label
=
yyvsp
[
0
].
str
;
}
else
{
yyval
.
declhdr
.
label
=
yyvsp
[
-
2
].
str
;
}
yyval
.
declhdr
.
n_initvars
=
plpgsql_add_initdatums
(
&
(
yyval
.
declhdr
.
initvarnos
));
;
break
;}
case
12
:
#line 258 "gram.y"
{
plpgsql_ns_setlocal
(
true
);
;
break
;}
case
13
:
#line 264 "gram.y"
{
yyval
.
str
=
yyvsp
[
0
].
str
;
;
break
;}
case
14
:
#line 268 "gram.y"
{
yyval
.
str
=
yyvsp
[
0
].
str
;
;
break
;}
case
15
:
#line 274 "gram.y"
{
yyval
.
str
=
yyvsp
[
-
2
].
str
;
;
break
;}
case
16
:
#line 278 "gram.y"
{
yyval
.
str
=
NULL
;
;
break
;}
case
17
:
#line 282 "gram.y"
{
yyval
.
str
=
NULL
;
;
break
;}
case
18
:
#line 288 "gram.y"
{
PLpgSQL_var
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_var
));
new
->
dtype
=
PLPGSQL_DTYPE_VAR
;
new
->
refname
=
yyvsp
[
-
4
].
varname
.
name
;
new
->
lineno
=
yyvsp
[
-
4
].
varname
.
lineno
;
new
->
datatype
=
yyvsp
[
-
2
].
dtype
;
new
->
isconst
=
yyvsp
[
-
3
].
ival
;
new
->
notnull
=
yyvsp
[
-
1
].
ival
;
new
->
default_val
=
yyvsp
[
0
].
expr
;
plpgsql_adddatum
((
PLpgSQL_datum
*
)
new
);
plpgsql_ns_additem
(
PLPGSQL_NSTYPE_VAR
,
new
->
varno
,
yyvsp
[
-
4
].
varname
.
name
);
;
break
;}
case
19
:
#line 307 "gram.y"
{
PLpgSQL_rec
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_var
));
new
->
dtype
=
PLPGSQL_DTYPE_REC
;
new
->
refname
=
yyvsp
[
-
2
].
varname
.
name
;
new
->
lineno
=
yyvsp
[
-
2
].
varname
.
lineno
;
plpgsql_adddatum
((
PLpgSQL_datum
*
)
new
);
plpgsql_ns_additem
(
PLPGSQL_NSTYPE_REC
,
new
->
recno
,
yyvsp
[
-
2
].
varname
.
name
);
;
break
;}
case
20
:
#line 321 "gram.y"
{
yyvsp
[
-
1
].
row
->
dtype
=
PLPGSQL_DTYPE_ROW
;
yyvsp
[
-
1
].
row
->
refname
=
yyvsp
[
-
2
].
varname
.
name
;
yyvsp
[
-
1
].
row
->
lineno
=
yyvsp
[
-
2
].
varname
.
lineno
;
plpgsql_adddatum
((
PLpgSQL_datum
*
)
yyvsp
[
-
1
].
row
);
plpgsql_ns_additem
(
PLPGSQL_NSTYPE_ROW
,
yyvsp
[
-
1
].
row
->
rowno
,
yyvsp
[
-
2
].
varname
.
name
);
;
break
;}
case
21
:
#line 331 "gram.y"
{
plpgsql_ns_additem
(
yyvsp
[
-
1
].
nsitem
->
itemtype
,
yyvsp
[
-
1
].
nsitem
->
itemno
,
yyvsp
[
-
4
].
varname
.
name
);
;
break
;}
case
22
:
#line 336 "gram.y"
{
plpgsql_ns_rename
(
yyvsp
[
-
3
].
str
,
yyvsp
[
-
1
].
str
);
;
break
;}
case
23
:
#line 342 "gram.y"
{
PLpgSQL_nsitem
*
nsi
;
char
*
name
;
plpgsql_ns_setlocal
(
false
);
name
=
plpgsql_tolower
(
yytext
);
if
(
name
[
0
]
!=
'$'
)
{
elog
(
ERROR
,
"can only alias positional parameters"
);
}
nsi
=
plpgsql_ns_lookup
(
name
,
NULL
);
if
(
nsi
==
NULL
)
{
elog
(
ERROR
,
"function has no parameter %s"
,
name
);
}
plpgsql_ns_setlocal
(
true
);
yyval
.
nsitem
=
nsi
;
;
break
;}
case
24
:
#line 363 "gram.y"
{
yyval
.
row
=
yylval
.
row
;
;
break
;}
case
25
:
#line 369 "gram.y"
{
yyval
.
varname
.
name
=
strdup
(
yytext
);
yyval
.
varname
.
lineno
=
yylineno
;
;
break
;}
case
26
:
#line 376 "gram.y"
{
yyval
.
str
=
plpgsql_tolower
(
yytext
);
;
break
;}
case
27
:
#line 382 "gram.y"
{
yyval
.
ival
=
0
;
;
break
;}
case
28
:
#line 384 "gram.y"
{
yyval
.
ival
=
1
;
;
break
;}
case
29
:
#line 388 "gram.y"
{
yyval
.
dtype
=
yyvsp
[
0
].
dtype
;
;
break
;}
case
30
:
#line 394 "gram.y"
{
yyval
.
dtype
=
yylval
.
dtype
;
;
break
;}
case
31
:
#line 398 "gram.y"
{
if
(
yyvsp
[
0
].
ival
<
0
)
{
plpgsql_parse_word
(
"char"
);
yyval
.
dtype
=
yylval
.
dtype
;
}
else
{
plpgsql_parse_word
(
"bpchar"
);
yyval
.
dtype
=
yylval
.
dtype
;
yyval
.
dtype
->
atttypmod
=
yyvsp
[
0
].
ival
;
}
;
break
;}
case
32
:
#line 409 "gram.y"
{
plpgsql_parse_word
(
"varchar"
);
yyval
.
dtype
=
yylval
.
dtype
;
yyval
.
dtype
->
atttypmod
=
yyvsp
[
0
].
ival
;
;
break
;}
case
33
:
#line 415 "gram.y"
{
plpgsql_parse_word
(
"bpchar"
);
yyval
.
dtype
=
yylval
.
dtype
;
yyval
.
dtype
->
atttypmod
=
yyvsp
[
-
1
].
ival
;
;
break
;}
case
34
:
#line 423 "gram.y"
{
yyval
.
ival
=
-
1
;
;
break
;}
case
35
:
#line 427 "gram.y"
{
yyval
.
ival
=
yyvsp
[
-
1
].
ival
;
;
break
;}
case
36
:
#line 433 "gram.y"
{
yyval
.
ival
=
int2in
(
yytext
)
+
VARHDRSZ
;
;
break
;}
case
37
:
#line 439 "gram.y"
{
yyval
.
ival
=
0
;
;
break
;}
case
38
:
#line 441 "gram.y"
{
yyval
.
ival
=
1
;
;
break
;}
case
39
:
#line 445 "gram.y"
{
yyval
.
expr
=
NULL
;
;
break
;}
case
40
:
#line 447 "gram.y"
{
int
tok
;
int
lno
;
PLpgSQL_dstring
ds
;
PLpgSQL_expr
*
expr
;
lno
=
yylineno
;
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
));
plpgsql_dstring_init
(
&
ds
);
plpgsql_dstring_append
(
&
ds
,
"SELECT "
);
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
plan
=
NULL
;
expr
->
nparams
=
0
;
tok
=
yylex
();
switch
(
tok
)
{
case
0
:
plpgsql_error_lineno
=
lno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unexpected end of file"
);
case
K_NULL
:
if
(
yylex
()
!=
';'
)
{
plpgsql_error_lineno
=
lno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"expectec ; after NULL"
);
}
free
(
expr
);
plpgsql_dstring_free
(
&
ds
);
yyval
.
expr
=
NULL
;
break
;
default:
plpgsql_dstring_append
(
&
ds
,
yytext
);
while
((
tok
=
yylex
())
!=
';'
)
{
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
lno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unterminated default value"
);
}
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
}
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
plpgsql_dstring_free
(
&
ds
);
yyval
.
expr
=
expr
;
break
;
}
;
break
;}
case
43
:
#line 506 "gram.y"
{
PLpgSQL_stmts
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmts
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmts
));
yyval
.
stmts
=
new
;
;
break
;}
case
44
:
#line 514 "gram.y"
{
yyval
.
stmts
=
yyvsp
[
0
].
stmts
;
;
break
;}
case
45
:
#line 520 "gram.y"
{
if
(
yyvsp
[
-
1
].
stmts
->
stmts_used
==
yyvsp
[
-
1
].
stmts
->
stmts_alloc
)
{
yyvsp
[
-
1
].
stmts
->
stmts_alloc
*=
2
;
yyvsp
[
-
1
].
stmts
->
stmts
=
realloc
(
yyvsp
[
-
1
].
stmts
->
stmts
,
sizeof
(
PLpgSQL_stmt
*
)
*
yyvsp
[
-
1
].
stmts
->
stmts_alloc
);
}
yyvsp
[
-
1
].
stmts
->
stmts
[
yyvsp
[
-
1
].
stmts
->
stmts_used
++
]
=
(
struct
PLpgSQL_stmt
*
)
yyvsp
[
0
].
stmt
;
yyval
.
stmts
=
yyvsp
[
-
1
].
stmts
;
;
break
;}
case
46
:
#line 530 "gram.y"
{
PLpgSQL_stmts
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmts
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmts
));
new
->
stmts_alloc
=
64
;
new
->
stmts_used
=
1
;
new
->
stmts
=
malloc
(
sizeof
(
PLpgSQL_stmt
*
)
*
new
->
stmts_alloc
);
new
->
stmts
[
0
]
=
(
struct
PLpgSQL_stmt
*
)
yyvsp
[
0
].
stmt
;
yyval
.
stmts
=
new
;
;
break
;}
case
47
:
#line 546 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
48
:
#line 548 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
49
:
#line 550 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
50
:
#line 552 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
51
:
#line 554 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
52
:
#line 556 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
53
:
#line 558 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
54
:
#line 560 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
55
:
#line 562 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
56
:
#line 564 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
57
:
#line 566 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
58
:
#line 568 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
59
:
#line 570 "gram.y"
{
yyval
.
stmt
=
yyvsp
[
0
].
stmt
;
;
break
;}
case
60
:
#line 574 "gram.y"
{
PLpgSQL_stmt_assign
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_assign
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_assign
));
new
->
cmd_type
=
PLPGSQL_STMT_ASSIGN
;
new
->
lineno
=
yyvsp
[
-
1
].
ival
;
new
->
varno
=
-
1
;
new
->
expr
=
yyvsp
[
0
].
expr
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
61
:
#line 590 "gram.y"
{
PLpgSQL_stmt_assign
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_assign
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_assign
));
new
->
cmd_type
=
PLPGSQL_STMT_ASSIGN
;
new
->
lineno
=
yyvsp
[
-
2
].
ival
;
new
->
varno
=
yyvsp
[
-
3
].
ival
;
new
->
expr
=
yyvsp
[
0
].
expr
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
62
:
#line 606 "gram.y"
{
if
(
yylval
.
var
->
isconst
)
{
plpgsql_comperrinfo
();
elog
(
ERROR
,
"%s is declared CONSTANT"
,
yylval
.
var
->
refname
);
}
yyval
.
ival
=
yylval
.
var
->
varno
;
;
break
;}
case
63
:
#line 614 "gram.y"
{
yyval
.
ival
=
yylval
.
recfield
->
rfno
;
;
break
;}
case
64
:
#line 620 "gram.y"
{
PLpgSQL_stmt_if
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_if
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_if
));
new
->
cmd_type
=
PLPGSQL_STMT_IF
;
new
->
lineno
=
yyvsp
[
-
6
].
ival
;
new
->
cond
=
yyvsp
[
-
5
].
expr
;
new
->
true_body
=
yyvsp
[
-
4
].
stmts
;
new
->
false_body
=
yyvsp
[
-
3
].
stmts
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
65
:
#line 637 "gram.y"
{
PLpgSQL_stmts
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmts
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmts
));
yyval
.
stmts
=
new
;
;
break
;}
case
66
:
#line 645 "gram.y"
{
yyval
.
stmts
=
yyvsp
[
0
].
stmts
;
;
break
;}
case
67
:
#line 649 "gram.y"
{
PLpgSQL_stmt_loop
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_loop
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_loop
));
new
->
cmd_type
=
PLPGSQL_STMT_LOOP
;
new
->
lineno
=
yyvsp
[
-
1
].
ival
;
new
->
label
=
yyvsp
[
-
3
].
str
;
new
->
body
=
yyvsp
[
0
].
stmts
;
plpgsql_ns_pop
();
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
68
:
#line 667 "gram.y"
{
PLpgSQL_stmt_while
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_while
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_while
));
new
->
cmd_type
=
PLPGSQL_STMT_WHILE
;
new
->
lineno
=
yyvsp
[
-
2
].
ival
;
new
->
label
=
yyvsp
[
-
4
].
str
;
new
->
cond
=
yyvsp
[
-
1
].
expr
;
new
->
body
=
yyvsp
[
0
].
stmts
;
plpgsql_ns_pop
();
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
69
:
#line 686 "gram.y"
{
PLpgSQL_stmt_fori
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_fori
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_fori
));
new
->
cmd_type
=
PLPGSQL_STMT_FORI
;
new
->
lineno
=
yyvsp
[
-
5
].
ival
;
new
->
label
=
yyvsp
[
-
7
].
str
;
new
->
var
=
yyvsp
[
-
4
].
var
;
new
->
reverse
=
yyvsp
[
-
2
].
forilow
.
reverse
;
new
->
lower
=
yyvsp
[
-
2
].
forilow
.
expr
;
new
->
upper
=
yyvsp
[
-
1
].
expr
;
new
->
body
=
yyvsp
[
0
].
stmts
;
plpgsql_ns_pop
();
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
70
:
#line 708 "gram.y"
{
PLpgSQL_var
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_var
));
new
->
dtype
=
PLPGSQL_DTYPE_VAR
;
new
->
refname
=
yyvsp
[
0
].
varname
.
name
;
new
->
lineno
=
yyvsp
[
0
].
varname
.
lineno
;
plpgsql_parse_word
(
"integer"
);
new
->
datatype
=
yylval
.
dtype
;
new
->
isconst
=
false
;
new
->
notnull
=
false
;
new
->
default_val
=
NULL
;
plpgsql_adddatum
((
PLpgSQL_datum
*
)
new
);
plpgsql_ns_additem
(
PLPGSQL_NSTYPE_VAR
,
new
->
varno
,
yyvsp
[
0
].
varname
.
name
);
plpgsql_add_initdatums
(
NULL
);
yyval
.
var
=
new
;
;
break
;}
case
71
:
#line 735 "gram.y"
{
yyval
.
varname
.
name
=
strdup
(
yytext
);
yyval
.
varname
.
lineno
=
yylineno
;
;
break
;}
case
72
:
#line 740 "gram.y"
{
yyval
.
varname
.
name
=
strdup
(
yytext
);
yyval
.
varname
.
lineno
=
yylineno
;
;
break
;}
case
73
:
#line 747 "gram.y"
{
int
tok
;
int
lno
;
PLpgSQL_dstring
ds
;
int
nparams
=
0
;
int
params
[
1024
];
char
buf
[
32
];
PLpgSQL_expr
*
expr
;
int
firsttok
=
1
;
lno
=
yylineno
;
plpgsql_dstring_init
(
&
ds
);
plpgsql_dstring_append
(
&
ds
,
"SELECT "
);
yyval
.
forilow
.
reverse
=
0
;
while
((
tok
=
yylex
())
!=
K_DOTDOT
)
{
if
(
firsttok
)
{
firsttok
=
0
;
if
(
tok
==
K_REVERSE
)
{
yyval
.
forilow
.
reverse
=
1
;
continue
;
}
}
if
(
tok
==
';'
)
break
;
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
switch
(
tok
)
{
case
T_VARIABLE
:
params
[
nparams
]
=
yylval
.
var
->
varno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_RECFIELD
:
params
[
nparams
]
=
yylval
.
recfield
->
rfno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_TGARGV
:
params
[
nparams
]
=
yylval
.
trigarg
->
dno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
default:
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
lno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"missing .. to terminate lower bound of for loop"
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
break
;
}
}
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
nparams
-
1
);
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
nparams
=
nparams
;
while
(
nparams
--
>
0
)
{
expr
->
params
[
nparams
]
=
params
[
nparams
];
}
plpgsql_dstring_free
(
&
ds
);
yyval
.
forilow
.
expr
=
expr
;
;
break
;}
case
74
:
#line 817 "gram.y"
{
PLpgSQL_stmt_fors
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_fors
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_fors
));
new
->
cmd_type
=
PLPGSQL_STMT_FORS
;
new
->
lineno
=
yyvsp
[
-
5
].
ival
;
new
->
label
=
yyvsp
[
-
7
].
str
;
switch
(
yyvsp
[
-
4
].
rec
->
dtype
)
{
case
PLPGSQL_DTYPE_REC
:
new
->
rec
=
yyvsp
[
-
4
].
rec
;
break
;
case
PLPGSQL_DTYPE_ROW
:
new
->
row
=
(
PLpgSQL_row
*
)
yyvsp
[
-
4
].
rec
;
break
;
default:
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unknown dtype %d in stmt_fors"
,
yyvsp
[
-
4
].
rec
->
dtype
);
}
new
->
query
=
yyvsp
[
-
1
].
expr
;
new
->
body
=
yyvsp
[
0
].
stmts
;
plpgsql_ns_pop
();
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
75
:
#line 846 "gram.y"
{
yyval
.
rec
=
yylval
.
rec
;
;
break
;}
case
76
:
#line 850 "gram.y"
{
yyval
.
rec
=
(
PLpgSQL_rec
*
)(
yylval
.
row
);
;
break
;}
case
77
:
#line 856 "gram.y"
{
yyval
.
stmt
=
make_select_stmt
();
yyval
.
stmt
->
lineno
=
yyvsp
[
0
].
ival
;
;
break
;}
case
78
:
#line 863 "gram.y"
{
PLpgSQL_stmt_exit
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_exit
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_exit
));
new
->
cmd_type
=
PLPGSQL_STMT_EXIT
;
new
->
lineno
=
yyvsp
[
-
2
].
ival
;
new
->
label
=
yyvsp
[
-
1
].
str
;
new
->
cond
=
yyvsp
[
0
].
expr
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
79
:
#line 879 "gram.y"
{
PLpgSQL_stmt_return
*
new
;
PLpgSQL_expr
*
expr
=
NULL
;
int
tok
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_return
));
memset
(
new
,
0
,
sizeof
(
PLpgSQL_stmt_return
));
if
(
plpgsql_curr_compile
->
fn_retistuple
)
{
new
->
retistuple
=
true
;
new
->
retrecno
=
-
1
;
switch
(
tok
=
yylex
())
{
case
K_NULL
:
expr
=
NULL
;
break
;
case
T_ROW
:
expr
=
make_tupret_expr
(
yylval
.
row
);
break
;
case
T_RECORD
:
new
->
retrecno
=
yylval
.
rec
->
recno
;
expr
=
NULL
;
break
;
default:
yyerror
(
"return type mismatch in function returning table row"
);
break
;
}
if
(
yylex
()
!=
';'
)
{
yyerror
(
"expected ';'"
);
}
}
else
{
new
->
retistuple
=
false
;
expr
=
plpgsql_read_expression
(
';'
,
";"
);
}
new
->
cmd_type
=
PLPGSQL_STMT_RETURN
;
new
->
lineno
=
yyvsp
[
0
].
ival
;
new
->
expr
=
expr
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
80
:
#line 925 "gram.y"
{
PLpgSQL_stmt_raise
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_raise
));
new
->
cmd_type
=
PLPGSQL_STMT_RAISE
;
new
->
lineno
=
yyvsp
[
-
4
].
ival
;
new
->
elog_level
=
yyvsp
[
-
3
].
ival
;
new
->
message
=
yyvsp
[
-
2
].
str
;
new
->
nparams
=
yyvsp
[
-
1
].
dtlist
.
nused
;
new
->
params
=
malloc
(
sizeof
(
int
)
*
yyvsp
[
-
1
].
dtlist
.
nused
);
memcpy
(
new
->
params
,
yyvsp
[
-
1
].
dtlist
.
dtnums
,
sizeof
(
int
)
*
yyvsp
[
-
1
].
dtlist
.
nused
);
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
81
:
#line 941 "gram.y"
{
PLpgSQL_stmt_raise
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_raise
));
new
->
cmd_type
=
PLPGSQL_STMT_RAISE
;
new
->
lineno
=
yyvsp
[
-
3
].
ival
;
new
->
elog_level
=
yyvsp
[
-
2
].
ival
;
new
->
message
=
yyvsp
[
-
1
].
str
;
new
->
nparams
=
0
;
new
->
params
=
NULL
;
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
82
:
#line 958 "gram.y"
{
yyval
.
str
=
strdup
(
yytext
);
;
break
;}
case
83
:
#line 964 "gram.y"
{
yyval
.
ival
=
ERROR
;
;
break
;}
case
84
:
#line 968 "gram.y"
{
yyval
.
ival
=
NOTICE
;
;
break
;}
case
85
:
#line 972 "gram.y"
{
yyval
.
ival
=
DEBUG
;
;
break
;}
case
86
:
#line 978 "gram.y"
{
if
(
yyvsp
[
-
1
].
dtlist
.
nused
==
yyvsp
[
-
1
].
dtlist
.
nalloc
)
{
yyvsp
[
-
1
].
dtlist
.
nalloc
*=
2
;
yyvsp
[
-
1
].
dtlist
.
dtnums
=
repalloc
(
yyvsp
[
-
1
].
dtlist
.
dtnums
,
sizeof
(
int
)
*
yyvsp
[
-
1
].
dtlist
.
nalloc
);
}
yyvsp
[
-
1
].
dtlist
.
dtnums
[
yyvsp
[
-
1
].
dtlist
.
nused
++
]
=
yyvsp
[
0
].
ival
;
yyval
.
dtlist
.
nalloc
=
yyvsp
[
-
1
].
dtlist
.
nalloc
;
yyval
.
dtlist
.
nused
=
yyvsp
[
-
1
].
dtlist
.
nused
;
yyval
.
dtlist
.
dtnums
=
yyvsp
[
-
1
].
dtlist
.
dtnums
;
;
break
;}
case
87
:
#line 990 "gram.y"
{
yyval
.
dtlist
.
nalloc
=
1
;
yyval
.
dtlist
.
nused
=
1
;
yyval
.
dtlist
.
dtnums
=
palloc
(
sizeof
(
int
)
*
yyval
.
dtlist
.
nalloc
);
yyval
.
dtlist
.
dtnums
[
0
]
=
yyvsp
[
0
].
ival
;
;
break
;}
case
88
:
#line 999 "gram.y"
{
yyval
.
ival
=
yylval
.
var
->
varno
;
;
break
;}
case
89
:
#line 1003 "gram.y"
{
yyval
.
ival
=
yylval
.
recfield
->
rfno
;
;
break
;}
case
90
:
#line 1007 "gram.y"
{
yyval
.
ival
=
yylval
.
trigarg
->
dno
;
;
break
;}
case
91
:
#line 1013 "gram.y"
{
yyval
.
stmts
=
yyvsp
[
-
3
].
stmts
;
;
break
;}
case
92
:
#line 1017 "gram.y"
{
PLpgSQL_stmt_execsql
*
new
;
new
=
malloc
(
sizeof
(
PLpgSQL_stmt_execsql
));
new
->
cmd_type
=
PLPGSQL_STMT_EXECSQL
;
new
->
lineno
=
yyvsp
[
0
].
ival
;
new
->
sqlstmt
=
read_sqlstmt
(
';'
,
";"
,
yyvsp
[
-
1
].
str
);
yyval
.
stmt
=
(
PLpgSQL_stmt
*
)
new
;
;
break
;}
case
93
:
#line 1030 "gram.y"
{
yyval
.
str
=
strdup
(
yytext
);
;
break
;}
case
94
:
#line 1032 "gram.y"
{
yyval
.
str
=
strdup
(
yytext
);
;
break
;}
case
95
:
#line 1036 "gram.y"
{
yyval
.
expr
=
plpgsql_read_expression
(
';'
,
";"
);
;
break
;}
case
96
:
#line 1040 "gram.y"
{
yyval
.
expr
=
plpgsql_read_expression
(
K_THEN
,
"THEN"
);
;
break
;}
case
97
:
#line 1044 "gram.y"
{
yyval
.
expr
=
plpgsql_read_expression
(
K_LOOP
,
"LOOP"
);
;
break
;}
case
98
:
#line 1048 "gram.y"
{
plpgsql_ns_push
(
NULL
);
yyval
.
str
=
NULL
;
;
break
;}
case
99
:
#line 1053 "gram.y"
{
plpgsql_ns_push
(
yyvsp
[
-
2
].
str
);
yyval
.
str
=
yyvsp
[
-
2
].
str
;
;
break
;}
case
100
:
#line 1060 "gram.y"
{
yyval
.
str
=
NULL
;
;
break
;}
case
101
:
#line 1062 "gram.y"
{
yyval
.
str
=
strdup
(
yytext
);
;
break
;}
case
102
:
#line 1066 "gram.y"
{
yyval
.
expr
=
NULL
;
;
break
;}
case
103
:
#line 1068 "gram.y"
{
yyval
.
expr
=
yyvsp
[
0
].
expr
;
;
break
;}
case
104
:
#line 1072 "gram.y"
{
yyval
.
str
=
strdup
(
yytext
);
;
break
;}
case
105
:
#line 1076 "gram.y"
{
plpgsql_error_lineno
=
yylineno
;
yyval
.
ival
=
yylineno
;
;
break
;}
}
/* the action file gets copied in in place of this dollarsign */
#line 498 "/usr/share/misc/bison.simple"
yyvsp
-=
yylen
;
yyssp
-=
yylen
;
#ifdef YYLSP_NEEDED
yylsp
-=
yylen
;
#endif
#if YYDEBUG != 0
if
(
yydebug
)
{
short
*
ssp1
=
yyss
-
1
;
fprintf
(
stderr
,
"state stack now"
);
while
(
ssp1
!=
yyssp
)
fprintf
(
stderr
,
" %d"
,
*++
ssp1
);
fprintf
(
stderr
,
"
\n
"
);
}
#endif
*++
yyvsp
=
yyval
;
#ifdef YYLSP_NEEDED
yylsp
++
;
if
(
yylen
==
0
)
{
yylsp
->
first_line
=
yylloc
.
first_line
;
yylsp
->
first_column
=
yylloc
.
first_column
;
yylsp
->
last_line
=
(
yylsp
-
1
)
->
last_line
;
yylsp
->
last_column
=
(
yylsp
-
1
)
->
last_column
;
yylsp
->
text
=
0
;
}
else
{
yylsp
->
last_line
=
(
yylsp
+
yylen
-
1
)
->
last_line
;
yylsp
->
last_column
=
(
yylsp
+
yylen
-
1
)
->
last_column
;
}
#endif
/* Now "shift" the result of the reduction.
Determine what state that goes to,
based on the state we popped back to
and the rule number reduced by. */
yyn
=
yyr1
[
yyn
];
yystate
=
yypgoto
[
yyn
-
YYNTBASE
]
+
*
yyssp
;
if
(
yystate
>=
0
&&
yystate
<=
YYLAST
&&
yycheck
[
yystate
]
==
*
yyssp
)
yystate
=
yytable
[
yystate
];
else
yystate
=
yydefgoto
[
yyn
-
YYNTBASE
];
goto
yynewstate
;
yyerrlab:
/* here on detecting error */
if
(
!
yyerrstatus
)
/* If not already recovering from an error, report this error. */
{
++
yynerrs
;
#ifdef YYERROR_VERBOSE
yyn
=
yypact
[
yystate
];
if
(
yyn
>
YYFLAG
&&
yyn
<
YYLAST
)
{
int
size
=
0
;
char
*
msg
;
int
x
,
count
;
count
=
0
;
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */
for
(
x
=
(
yyn
<
0
?
-
yyn
:
0
);
x
<
(
sizeof
(
yytname
)
/
sizeof
(
char
*
));
x
++
)
if
(
yycheck
[
x
+
yyn
]
==
x
)
size
+=
strlen
(
yytname
[
x
])
+
15
,
count
++
;
msg
=
(
char
*
)
malloc
(
size
+
15
);
if
(
msg
!=
0
)
{
strcpy
(
msg
,
"parse error"
);
if
(
count
<
5
)
{
count
=
0
;
for
(
x
=
(
yyn
<
0
?
-
yyn
:
0
);
x
<
(
sizeof
(
yytname
)
/
sizeof
(
char
*
));
x
++
)
if
(
yycheck
[
x
+
yyn
]
==
x
)
{
strcat
(
msg
,
count
==
0
?
", expecting `"
:
" or `"
);
strcat
(
msg
,
yytname
[
x
]);
strcat
(
msg
,
"'"
);
count
++
;
}
}
yyerror
(
msg
);
free
(
msg
);
}
else
yyerror
(
"parse error; also virtual memory exceeded"
);
}
else
#endif
/* YYERROR_VERBOSE */
yyerror
(
"parse error"
);
}
goto
yyerrlab1
;
yyerrlab1:
/* here on error raised explicitly by an action */
if
(
yyerrstatus
==
3
)
{
/* if just tried and failed to reuse lookahead token after an error, discard it. */
/* return failure if at end of input */
if
(
yychar
==
YYEOF
)
YYABORT
;
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Discarding token %d (%s).
\n
"
,
yychar
,
yytname
[
yychar1
]);
#endif
yychar
=
YYEMPTY
;
}
/* Else will try to reuse lookahead token
after shifting the error token. */
yyerrstatus
=
3
;
/* Each real token shifted decrements this */
goto
yyerrhandle
;
yyerrdefault:
/* current state does not do anything special for the error token. */
#if 0
/* This is wrong; only states that explicitly want error tokens
should shift them. */
yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
if (yyn) goto yydefault;
#endif
yyerrpop:
/* pop the current state because it cannot handle the error token */
if
(
yyssp
==
yyss
)
YYABORT
;
yyvsp
--
;
yystate
=
*--
yyssp
;
#ifdef YYLSP_NEEDED
yylsp
--
;
#endif
#if YYDEBUG != 0
if
(
yydebug
)
{
short
*
ssp1
=
yyss
-
1
;
fprintf
(
stderr
,
"Error: state stack now"
);
while
(
ssp1
!=
yyssp
)
fprintf
(
stderr
,
" %d"
,
*++
ssp1
);
fprintf
(
stderr
,
"
\n
"
);
}
#endif
yyerrhandle:
yyn
=
yypact
[
yystate
];
if
(
yyn
==
YYFLAG
)
goto
yyerrdefault
;
yyn
+=
YYTERROR
;
if
(
yyn
<
0
||
yyn
>
YYLAST
||
yycheck
[
yyn
]
!=
YYTERROR
)
goto
yyerrdefault
;
yyn
=
yytable
[
yyn
];
if
(
yyn
<
0
)
{
if
(
yyn
==
YYFLAG
)
goto
yyerrpop
;
yyn
=
-
yyn
;
goto
yyreduce
;
}
else
if
(
yyn
==
0
)
goto
yyerrpop
;
if
(
yyn
==
YYFINAL
)
YYACCEPT
;
#if YYDEBUG != 0
if
(
yydebug
)
fprintf
(
stderr
,
"Shifting error token, "
);
#endif
*++
yyvsp
=
yylval
;
#ifdef YYLSP_NEEDED
*++
yylsp
=
yylloc
;
#endif
yystate
=
yyn
;
goto
yynewstate
;
}
#line 1082 "gram.y"
PLpgSQL_expr
*
plpgsql_read_expression
(
int
until
,
char
*
s
)
{
return
read_sqlstmt
(
until
,
s
,
"SELECT "
);
}
static
PLpgSQL_expr
*
read_sqlstmt
(
int
until
,
char
*
s
,
char
*
sqlstart
)
{
int
tok
;
int
lno
;
PLpgSQL_dstring
ds
;
int
nparams
=
0
;
int
params
[
1024
];
char
buf
[
32
];
PLpgSQL_expr
*
expr
;
lno
=
yylineno
;
plpgsql_dstring_init
(
&
ds
);
plpgsql_dstring_append
(
&
ds
,
sqlstart
);
while
((
tok
=
yylex
())
!=
until
)
{
if
(
tok
==
';'
)
break
;
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
switch
(
tok
)
{
case
T_VARIABLE
:
params
[
nparams
]
=
yylval
.
var
->
varno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_RECFIELD
:
params
[
nparams
]
=
yylval
.
recfield
->
rfno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_TGARGV
:
params
[
nparams
]
=
yylval
.
trigarg
->
dno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
default:
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
lno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"missing %s at end of SQL statement"
,
s
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
break
;
}
}
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
nparams
-
1
);
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
nparams
=
nparams
;
while
(
nparams
--
>
0
)
{
expr
->
params
[
nparams
]
=
params
[
nparams
];
}
plpgsql_dstring_free
(
&
ds
);
return
expr
;
}
static
PLpgSQL_stmt
*
make_select_stmt
()
{
int
tok
;
int
lno
;
PLpgSQL_dstring
ds
;
int
nparams
=
0
;
int
params
[
1024
];
char
buf
[
32
];
PLpgSQL_expr
*
expr
;
PLpgSQL_row
*
row
=
NULL
;
PLpgSQL_rec
*
rec
=
NULL
;
PLpgSQL_stmt_select
*
select
;
int
have_nexttok
=
0
;
lno
=
yylineno
;
plpgsql_dstring_init
(
&
ds
);
plpgsql_dstring_append
(
&
ds
,
"SELECT "
);
while
((
tok
=
yylex
())
!=
K_INTO
)
{
if
(
tok
==
';'
)
{
PLpgSQL_stmt_execsql
*
execsql
;
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
nparams
-
1
);
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
nparams
=
nparams
;
while
(
nparams
--
>
0
)
{
expr
->
params
[
nparams
]
=
params
[
nparams
];
}
plpgsql_dstring_free
(
&
ds
);
execsql
=
malloc
(
sizeof
(
PLpgSQL_stmt_execsql
));
execsql
->
cmd_type
=
PLPGSQL_STMT_EXECSQL
;
execsql
->
sqlstmt
=
expr
;
return
(
PLpgSQL_stmt
*
)
execsql
;
}
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
switch
(
tok
)
{
case
T_VARIABLE
:
params
[
nparams
]
=
yylval
.
var
->
varno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_RECFIELD
:
params
[
nparams
]
=
yylval
.
recfield
->
rfno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_TGARGV
:
params
[
nparams
]
=
yylval
.
trigarg
->
dno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
default:
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
yylineno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unexpected end of file"
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
break
;
}
}
tok
=
yylex
();
switch
(
tok
)
{
case
T_ROW
:
row
=
yylval
.
row
;
break
;
case
T_RECORD
:
rec
=
yylval
.
rec
;
break
;
case
T_VARIABLE
:
case
T_RECFIELD
:
{
PLpgSQL_var
*
var
;
PLpgSQL_recfield
*
recfield
;
int
nfields
=
1
;
char
*
fieldnames
[
1024
];
int
varnos
[
1024
];
switch
(
tok
)
{
case
T_VARIABLE
:
var
=
yylval
.
var
;
fieldnames
[
0
]
=
strdup
(
yytext
);
varnos
[
0
]
=
var
->
varno
;
break
;
case
T_RECFIELD
:
recfield
=
yylval
.
recfield
;
fieldnames
[
0
]
=
strdup
(
yytext
);
varnos
[
0
]
=
recfield
->
rfno
;
break
;
}
while
((
tok
=
yylex
())
==
','
)
{
tok
=
yylex
();
switch
(
tok
)
{
case
T_VARIABLE
:
var
=
yylval
.
var
;
fieldnames
[
nfields
]
=
strdup
(
yytext
);
varnos
[
nfields
++
]
=
var
->
varno
;
break
;
case
T_RECFIELD
:
recfield
=
yylval
.
recfield
;
fieldnames
[
0
]
=
strdup
(
yytext
);
varnos
[
0
]
=
recfield
->
rfno
;
break
;
default:
elog
(
ERROR
,
"plpgsql: %s is not a variable or record field"
,
yytext
);
}
}
row
=
malloc
(
sizeof
(
PLpgSQL_row
));
row
->
dtype
=
PLPGSQL_DTYPE_ROW
;
row
->
refname
=
strdup
(
"*internal*"
);
row
->
lineno
=
yylineno
;
row
->
rowtypeclass
=
InvalidOid
;
row
->
nfields
=
nfields
;
row
->
fieldnames
=
malloc
(
sizeof
(
char
*
)
*
nfields
);
row
->
varnos
=
malloc
(
sizeof
(
int
)
*
nfields
);
while
(
--
nfields
>=
0
)
{
row
->
fieldnames
[
nfields
]
=
fieldnames
[
nfields
];
row
->
varnos
[
nfields
]
=
varnos
[
nfields
];
}
plpgsql_adddatum
((
PLpgSQL_datum
*
)
row
);
have_nexttok
=
1
;
}
break
;
default:
{
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
while
(
1
)
{
tok
=
yylex
();
if
(
tok
==
';'
)
{
PLpgSQL_stmt_execsql
*
execsql
;
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
nparams
-
1
);
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
nparams
=
nparams
;
while
(
nparams
--
>
0
)
{
expr
->
params
[
nparams
]
=
params
[
nparams
];
}
plpgsql_dstring_free
(
&
ds
);
execsql
=
malloc
(
sizeof
(
PLpgSQL_stmt_execsql
));
execsql
->
cmd_type
=
PLPGSQL_STMT_EXECSQL
;
execsql
->
sqlstmt
=
expr
;
return
(
PLpgSQL_stmt
*
)
execsql
;
}
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
switch
(
tok
)
{
case
T_VARIABLE
:
params
[
nparams
]
=
yylval
.
var
->
varno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_RECFIELD
:
params
[
nparams
]
=
yylval
.
recfield
->
rfno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_TGARGV
:
params
[
nparams
]
=
yylval
.
trigarg
->
dno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
default:
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
yylineno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unexpected end of file"
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
break
;
}
}
}
}
/************************************************************
* Eat up the rest of the statement after the target fields
************************************************************/
while
(
1
)
{
if
(
!
have_nexttok
)
{
tok
=
yylex
();
}
have_nexttok
=
0
;
if
(
tok
==
';'
)
{
break
;
}
if
(
plpgsql_SpaceScanned
)
{
plpgsql_dstring_append
(
&
ds
,
" "
);
}
switch
(
tok
)
{
case
T_VARIABLE
:
params
[
nparams
]
=
yylval
.
var
->
varno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_RECFIELD
:
params
[
nparams
]
=
yylval
.
recfield
->
rfno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
case
T_TGARGV
:
params
[
nparams
]
=
yylval
.
trigarg
->
dno
;
sprintf
(
buf
,
"$%d"
,
++
nparams
);
plpgsql_dstring_append
(
&
ds
,
buf
);
break
;
default:
if
(
tok
==
0
)
{
plpgsql_error_lineno
=
yylineno
;
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unexpected end of file"
);
}
plpgsql_dstring_append
(
&
ds
,
yytext
);
break
;
}
}
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
(
nparams
-
1
));
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
nparams
=
nparams
;
while
(
nparams
--
>
0
)
{
expr
->
params
[
nparams
]
=
params
[
nparams
];
}
plpgsql_dstring_free
(
&
ds
);
select
=
malloc
(
sizeof
(
PLpgSQL_stmt_select
));
memset
(
select
,
0
,
sizeof
(
PLpgSQL_stmt_select
));
select
->
cmd_type
=
PLPGSQL_STMT_SELECT
;
select
->
rec
=
rec
;
select
->
row
=
row
;
select
->
query
=
expr
;
return
(
PLpgSQL_stmt
*
)
select
;
}
static
PLpgSQL_expr
*
make_tupret_expr
(
PLpgSQL_row
*
row
)
{
PLpgSQL_dstring
ds
;
PLpgSQL_expr
*
expr
;
int
i
;
char
buf
[
16
];
expr
=
malloc
(
sizeof
(
PLpgSQL_expr
)
+
sizeof
(
int
)
*
(
row
->
nfields
-
1
));
expr
->
dtype
=
PLPGSQL_DTYPE_EXPR
;
plpgsql_dstring_init
(
&
ds
);
plpgsql_dstring_append
(
&
ds
,
"SELECT "
);
for
(
i
=
0
;
i
<
row
->
nfields
;
i
++
)
{
sprintf
(
buf
,
"%s$%d"
,
(
i
>
0
)
?
","
:
""
,
i
+
1
);
plpgsql_dstring_append
(
&
ds
,
buf
);
expr
->
params
[
i
]
=
row
->
varnos
[
i
];
}
expr
->
query
=
strdup
(
plpgsql_dstring_get
(
&
ds
));
expr
->
plan
=
NULL
;
expr
->
plan_argtypes
=
NULL
;
expr
->
nparams
=
row
->
nfields
;
plpgsql_dstring_free
(
&
ds
);
return
expr
;
}
#include "pl_scan.c"
src/pl/plpgsql/src/scan.c
deleted
100644 → 0
View file @
bb7c0da1
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
* /master/usr.bin/lex/skel.c,v 1.3 1997/09/25 00:10:23 jch Exp
*/
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#include <stdio.h>
/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif
#ifdef __cplusplus
#include <stdlib.h>
#include <unistd.h>
/* Use prototypes in function declarations. */
#define YY_USE_PROTOS
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else
/* ! __cplusplus */
#if __STDC__
#define YY_USE_PROTOS
#define YY_USE_CONST
#endif
/* __STDC__ */
#endif
/* ! __cplusplus */
#ifdef __TURBOC__
#pragma warn -rch
#pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#endif
/* Returned upon end-of-file. */
#define YY_NULL 0
/* Promotes a possibly negative, possibly signed char to an unsigned
* integer for use as an array index. If the signed char is negative,
* we want to instead treat it as an 8-bit unsigned char, hence the
* double cast.
*/
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
/* Enter a start condition. This macro really ought to take a parameter,
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
#define BEGIN yy_start = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
#define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
#define YY_BUF_SIZE 16384
typedef
struct
yy_buffer_state
*
YY_BUFFER_STATE
;
extern
int
yyleng
;
extern
FILE
*
yyin
,
*
yyout
;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
/* The funky do-while in the following #define is used to turn the definition
* int a single C statement (which needs a semi-colon terminator). This
* avoids problems with code like:
*
* if ( condition_holds )
* yyless( 5 );
* else
* do_something_else();
*
* Prior to using the do-while the compiler would get upset at the
* "else" because it interpreted the "if" statement as being all
* done when it reached the ';' after the yyless() call.
*/
/* Return all but the first 'n' matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */
\
*yy_cp = yy_hold_char; \
YY_RESTORE_YY_MORE_OFFSET \
yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION;
/* set up yytext again */
\
} \
while ( 0 )
#define unput(c) yyunput( c, yytext_ptr )
/* The following is because we cannot portably get our hands on size_t
* (without autoconf's help, which isn't available because we want
* flex-generated scanners to compile on their own).
*/
typedef
unsigned
int
yy_size_t
;
struct
yy_buffer_state
{
FILE
*
yy_input_file
;
char
*
yy_ch_buf
;
/* input buffer */
char
*
yy_buf_pos
;
/* current position in input buffer */
/* Size of input buffer in bytes, not including room for EOB
* characters.
*/
yy_size_t
yy_buf_size
;
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
int
yy_n_chars
;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
* delete it.
*/
int
yy_is_our_buffer
;
/* Whether this is an "interactive" input source; if so, and
* if we're using stdio for input, then we want to use getc()
* instead of fread(), to make sure we stop fetching input after
* each newline.
*/
int
yy_is_interactive
;
/* Whether we're considered to be at the beginning of a line.
* If so, '^' rules will be active on the next match, otherwise
* not.
*/
int
yy_at_bol
;
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int
yy_fill_buffer
;
int
yy_buffer_status
;
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
* then we mark the buffer as YY_EOF_PENDING, to indicate that we
* shouldn't try reading from the input source any more. We might
* still have a bunch of tokens to match, though, because of
* possible backing-up.
*
* When we actually see the EOF, we change the status to "new"
* (via yyrestart()), so that the user can continue scanning by
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
};
static
YY_BUFFER_STATE
yy_current_buffer
=
0
;
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
*/
#define YY_CURRENT_BUFFER yy_current_buffer
/* yy_hold_char holds the character lost when yytext is formed. */
static
char
yy_hold_char
;
static
int
yy_n_chars
;
/* number of characters read into yy_ch_buf */
int
yyleng
;
/* Points to current character in buffer. */
static
char
*
yy_c_buf_p
=
(
char
*
)
0
;
static
int
yy_init
=
1
;
/* whether we need to initialize */
static
int
yy_start
=
0
;
/* start state number */
/* Flag which is used to allow yywrap()'s to do buffer switches
* instead of setting up a fresh yyin. A bit of a hack ...
*/
static
int
yy_did_buffer_switch_on_eof
;
void
yyrestart
YY_PROTO
((
FILE
*
input_file
));
void
yy_switch_to_buffer
YY_PROTO
((
YY_BUFFER_STATE
new_buffer
));
void
yy_load_buffer_state
YY_PROTO
((
void
));
YY_BUFFER_STATE
yy_create_buffer
YY_PROTO
((
FILE
*
file
,
int
size
));
void
yy_delete_buffer
YY_PROTO
((
YY_BUFFER_STATE
b
));
void
yy_init_buffer
YY_PROTO
((
YY_BUFFER_STATE
b
,
FILE
*
file
));
void
yy_flush_buffer
YY_PROTO
((
YY_BUFFER_STATE
b
));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
YY_BUFFER_STATE
yy_scan_buffer
YY_PROTO
((
char
*
base
,
yy_size_t
size
));
YY_BUFFER_STATE
yy_scan_string
YY_PROTO
((
yyconst
char
*
yy_str
));
YY_BUFFER_STATE
yy_scan_bytes
YY_PROTO
((
yyconst
char
*
bytes
,
int
len
));
static
void
*
yy_flex_alloc
YY_PROTO
((
yy_size_t
));
static
void
*
yy_flex_realloc
YY_PROTO
((
void
*
,
yy_size_t
));
static
void
yy_flex_free
YY_PROTO
((
void
*
));
#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
if ( ! yy_current_buffer ) \
yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
yy_current_buffer->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
if ( ! yy_current_buffer ) \
yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
yy_current_buffer->yy_at_bol = at_bol; \
}
#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
#define YY_USES_REJECT
typedef
unsigned
char
YY_CHAR
;
FILE
*
yyin
=
(
FILE
*
)
0
,
*
yyout
=
(
FILE
*
)
0
;
typedef
int
yy_state_type
;
#define YY_FLEX_LEX_COMPAT
extern
int
yylineno
;
int
yylineno
=
1
;
extern
char
yytext
[];
static
yy_state_type
yy_get_previous_state
YY_PROTO
((
void
));
static
yy_state_type
yy_try_NUL_trans
YY_PROTO
((
yy_state_type
current_state
));
static
int
yy_get_next_buffer
YY_PROTO
((
void
));
static
void
yy_fatal_error
YY_PROTO
((
yyconst
char
msg
[]
));
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
yytext_ptr = yy_bp; \
yyleng = (int) (yy_cp - yy_bp); \
yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
if ( yyleng + yy_more_offset >= YYLMAX ) \
YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
yy_flex_strncpy( &yytext[yy_more_offset], yytext_ptr, yyleng + 1 ); \
yyleng += yy_more_offset; \
yy_prev_more_offset = yy_more_offset; \
yy_more_offset = 0; \
yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 60
#define YY_END_OF_BUFFER 61
static
yyconst
short
int
yy_acclist
[
274
]
=
{
0
,
58
,
58
,
61
,
59
,
60
,
48
,
59
,
60
,
48
,
60
,
40
,
59
,
60
,
59
,
60
,
54
,
59
,
60
,
59
,
60
,
59
,
60
,
59
,
60
,
47
,
59
,
60
,
59
,
60
,
2
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
40
,
59
,
60
,
59
,
60
,
58
,
60
,
57
,
60
,
60
,
53
,
60
,
52
,
60
,
53
,
60
,
48
,
40
,
46
,
49
,
3
,
50
,
47
,
1
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
18
,
40
,
19
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
33
,
40
,
40
,
40
,
40
,
58
,
56
,
55
,
51
,
41
,
49
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
13
,
40
,
40
,
40
,
16
,
40
,
40
,
40
,
40
,
22
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
41
,
40
,
40
,
40
,
7
,
40
,
40
,
40
,
40
,
40
,
39
,
40
,
12
,
40
,
40
,
15
,
40
,
17
,
40
,
20
,
40
,
21
,
40
,
40
,
24
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
32
,
40
,
34
,
40
,
40
,
36
,
40
,
40
,
42
,
4
,
40
,
5
,
40
,
40
,
40
,
9
,
40
,
40
,
40
,
40
,
40
,
40
,
26
,
40
,
40
,
40
,
40
,
40
,
40
,
40
,
37
,
40
,
43
,
42
,
6
,
40
,
40
,
40
,
40
,
40
,
23
,
40
,
40
,
27
,
40
,
28
,
40
,
29
,
40
,
40
,
31
,
40
,
40
,
40
,
10
,
40
,
11
,
40
,
40
,
25
,
40
,
30
,
40
,
35
,
40
,
38
,
44
,
8
,
40
,
40
,
45
,
14
,
40
}
;
static
yyconst
short
int
yy_accept
[
213
]
=
{
0
,
1
,
1
,
1
,
2
,
3
,
3
,
3
,
4
,
6
,
9
,
11
,
14
,
16
,
19
,
21
,
23
,
25
,
28
,
30
,
33
,
36
,
39
,
42
,
45
,
48
,
51
,
54
,
57
,
60
,
63
,
66
,
69
,
72
,
75
,
78
,
80
,
82
,
84
,
85
,
87
,
89
,
91
,
92
,
93
,
93
,
93
,
94
,
95
,
96
,
97
,
98
,
99
,
100
,
101
,
102
,
103
,
104
,
105
,
106
,
107
,
108
,
109
,
110
,
111
,
113
,
115
,
116
,
117
,
118
,
119
,
120
,
121
,
122
,
123
,
125
,
126
,
127
,
128
,
128
,
129
,
130
,
131
,
132
,
132
,
132
,
133
,
134
,
135
,
136
,
137
,
138
,
139
,
140
,
141
,
142
,
143
,
144
,
146
,
147
,
148
,
150
,
151
,
152
,
153
,
155
,
156
,
157
,
158
,
159
,
160
,
161
,
162
,
163
,
164
,
165
,
166
,
167
,
168
,
168
,
168
,
168
,
169
,
169
,
169
,
170
,
171
,
172
,
174
,
175
,
176
,
177
,
178
,
180
,
182
,
183
,
185
,
187
,
189
,
191
,
192
,
194
,
195
,
196
,
197
,
198
,
199
,
200
,
201
,
203
,
205
,
206
,
208
,
209
,
209
,
209
,
209
,
209
,
210
,
212
,
214
,
215
,
216
,
218
,
219
,
220
,
221
,
222
,
223
,
225
,
226
,
227
,
228
,
229
,
230
,
231
,
233
,
233
,
233
,
234
,
234
,
235
,
237
,
238
,
239
,
240
,
241
,
243
,
244
,
246
,
248
,
250
,
251
,
253
,
254
,
254
,
254
,
254
,
255
,
257
,
259
,
260
,
262
,
264
,
266
,
267
,
267
,
268
,
270
,
271
,
272
,
274
,
274
}
;
static
yyconst
int
yy_ec
[
256
]
=
{
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
2
,
3
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
2
,
1
,
4
,
5
,
6
,
7
,
1
,
8
,
1
,
1
,
9
,
1
,
1
,
10
,
11
,
12
,
13
,
13
,
13
,
13
,
13
,
13
,
13
,
13
,
13
,
13
,
14
,
1
,
1
,
15
,
1
,
1
,
1
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
4
,
4
,
26
,
27
,
28
,
29
,
30
,
4
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
4
,
1
,
16
,
1
,
1
,
4
,
1
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
4
,
4
,
26
,
27
,
28
,
29
,
30
,
4
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
4
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
}
;
static
yyconst
int
yy_meta
[
39
]
=
{
0
,
1
,
1
,
2
,
3
,
1
,
1
,
4
,
5
,
1
,
1
,
4
,
1
,
6
,
1
,
1
,
5
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
}
;
static
yyconst
short
int
yy_base
[
222
]
=
{
0
,
0
,
364
,
31
,
32
,
40
,
41
,
360
,
575
,
39
,
43
,
44
,
327
,
575
,
305
,
301
,
300
,
288
,
278
,
575
,
45
,
46
,
51
,
52
,
53
,
54
,
67
,
59
,
80
,
61
,
85
,
86
,
87
,
93
,
94
,
251
,
0
,
269
,
0
,
575
,
575
,
244
,
110
,
92
,
84
,
0
,
238
,
0
,
575
,
575
,
236
,
575
,
112
,
113
,
115
,
121
,
120
,
122
,
128
,
135
,
136
,
138
,
143
,
151
,
153
,
154
,
159
,
161
,
164
,
162
,
170
,
189
,
171
,
178
,
172
,
191
,
194
,
202
,
190
,
0
,
575
,
575
,
575
,
190
,
174
,
196
,
0
,
199
,
204
,
207
,
219
,
221
,
226
,
228
,
227
,
229
,
234
,
235
,
236
,
241
,
251
,
254
,
256
,
257
,
259
,
262
,
264
,
265
,
271
,
272
,
283
,
284
,
285
,
291
,
292
,
297
,
300
,
303
,
171
,
156
,
161
,
311
,
153
,
0
,
313
,
314
,
316
,
319
,
324
,
325
,
327
,
330
,
332
,
339
,
340
,
342
,
345
,
347
,
348
,
354
,
355
,
356
,
361
,
364
,
367
,
369
,
370
,
372
,
377
,
379
,
382
,
385
,
391
,
159
,
143
,
138
,
115
,
0
,
392
,
397
,
398
,
400
,
403
,
408
,
409
,
411
,
416
,
414
,
417
,
423
,
425
,
431
,
440
,
441
,
443
,
442
,
123
,
113
,
575
,
100
,
0
,
450
,
451
,
456
,
457
,
458
,
459
,
464
,
469
,
471
,
474
,
477
,
482
,
485
,
93
,
78
,
63
,
488
,
490
,
493
,
495
,
496
,
498
,
501
,
575
,
56
,
575
,
503
,
504
,
575
,
506
,
575
,
532
,
538
,
542
,
548
,
554
,
66
,
560
,
564
,
51
,
568
}
;
static
yyconst
short
int
yy_def
[
222
]
=
{
0
,
211
,
1
,
212
,
212
,
213
,
213
,
211
,
211
,
211
,
211
,
214
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
215
,
211
,
216
,
211
,
211
,
211
,
211
,
214
,
211
,
217
,
211
,
218
,
211
,
211
,
211
,
211
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
215
,
211
,
211
,
211
,
211
,
211
,
219
,
218
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
211
,
211
,
219
,
211
,
220
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
211
,
211
,
211
,
221
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
211
,
211
,
211
,
221
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
211
,
211
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
211
,
211
,
211
,
214
,
214
,
211
,
214
,
0
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
}
;
static
yyconst
short
int
yy_nxt
[
614
]
=
{
0
,
8
,
9
,
10
,
11
,
8
,
12
,
8
,
13
,
8
,
14
,
15
,
16
,
17
,
18
,
19
,
8
,
20
,
21
,
22
,
23
,
24
,
25
,
11
,
11
,
26
,
27
,
11
,
28
,
11
,
29
,
30
,
31
,
32
,
11
,
33
,
34
,
11
,
11
,
37
,
37
,
42
,
42
,
40
,
40
,
42
,
42
,
38
,
38
,
41
,
41
,
44
,
44
,
44
,
157
,
45
,
45
,
45
,
44
,
44
,
44
,
44
,
45
,
45
,
45
,
45
,
44
,
53
,
44
,
85
,
45
,
52
,
45
,
57
,
44
,
55
,
54
,
209
,
45
,
59
,
56
,
60
,
69
,
62
,
206
,
63
,
58
,
44
,
66
,
64
,
61
,
45
,
44
,
44
,
44
,
65
,
45
,
45
,
45
,
44
,
44
,
44
,
70
,
45
,
45
,
45
,
71
,
72
,
205
,
67
,
76
,
73
,
42
,
42
,
68
,
83
,
74
,
84
,
77
,
44
,
44
,
204
,
44
,
45
,
45
,
75
,
45
,
44
,
44
,
44
,
196
,
45
,
45
,
45
,
89
,
44
,
88
,
87
,
90
,
45
,
92
,
93
,
44
,
44
,
94
,
44
,
45
,
45
,
91
,
45
,
44
,
195
,
194
,
179
,
45
,
95
,
97
,
98
,
44
,
178
,
44
,
44
,
45
,
99
,
45
,
45
,
44
,
96
,
44
,
44
,
45
,
44
,
45
,
45
,
100
,
45
,
177
,
44
,
44
,
44
,
101
,
45
,
45
,
45
,
176
,
44
,
156
,
102
,
103
,
45
,
105
,
155
,
154
,
106
,
104
,
107
,
44
,
112
,
44
,
113
,
45
,
44
,
45
,
122
,
153
,
45
,
44
,
123
,
108
,
44
,
45
,
44
,
120
,
45
,
44
,
45
,
124
,
109
,
45
,
119
,
118
,
114
,
110
,
116
,
111
,
115
,
44
,
117
,
44
,
125
,
45
,
126
,
45
,
44
,
44
,
44
,
44
,
45
,
45
,
45
,
45
,
44
,
44
,
44
,
131
,
45
,
45
,
45
,
44
,
50
,
127
,
46
,
45
,
128
,
130
,
133
,
82
,
134
,
44
,
132
,
129
,
44
,
45
,
44
,
44
,
45
,
44
,
45
,
45
,
44
,
45
,
44
,
44
,
45
,
135
,
45
,
45
,
80
,
44
,
44
,
78
,
136
,
45
,
45
,
139
,
137
,
141
,
138
,
140
,
144
,
44
,
44
,
44
,
51
,
45
,
45
,
45
,
142
,
44
,
44
,
143
,
50
,
45
,
45
,
44
,
146
,
147
,
44
,
45
,
49
,
44
,
45
,
48
,
149
,
45
,
47
,
150
,
145
,
122
,
148
,
44
,
44
,
123
,
44
,
45
,
45
,
44
,
45
,
151
,
152
,
45
,
44
,
44
,
160
,
44
,
45
,
45
,
44
,
45
,
44
,
46
,
45
,
159
,
45
,
163
,
158
,
44
,
44
,
162
,
44
,
45
,
45
,
44
,
45
,
44
,
44
,
45
,
161
,
45
,
45
,
211
,
44
,
44
,
44
,
164
,
45
,
45
,
45
,
44
,
35
,
165
,
44
,
45
,
166
,
44
,
45
,
44
,
44
,
45
,
44
,
45
,
45
,
168
,
45
,
44
,
167
,
44
,
211
,
45
,
44
,
45
,
173
,
44
,
45
,
170
,
169
,
45
,
211
,
44
,
44
,
171
,
172
,
45
,
45
,
44
,
44
,
174
,
44
,
45
,
45
,
44
,
45
,
175
,
211
,
45
,
44
,
44
,
182
,
44
,
45
,
45
,
44
,
45
,
44
,
44
,
45
,
211
,
45
,
45
,
181
,
44
,
211
,
44
,
211
,
45
,
184
,
45
,
186
,
44
,
183
,
211
,
211
,
45
,
188
,
185
,
187
,
189
,
44
,
44
,
44
,
44
,
45
,
45
,
45
,
45
,
211
,
211
,
44
,
44
,
190
,
193
,
45
,
45
,
44
,
44
,
44
,
44
,
45
,
45
,
45
,
45
,
44
,
191
,
211
,
192
,
45
,
44
,
198
,
44
,
197
,
45
,
44
,
45
,
200
,
44
,
45
,
211
,
211
,
45
,
44
,
199
,
201
,
44
,
45
,
211
,
44
,
45
,
44
,
202
,
45
,
44
,
45
,
44
,
44
,
45
,
44
,
45
,
45
,
44
,
45
,
44
,
44
,
45
,
44
,
45
,
45
,
203
,
45
,
211
,
211
,
211
,
207
,
211
,
211
,
208
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
210
,
36
,
36
,
36
,
36
,
36
,
36
,
39
,
39
,
39
,
39
,
39
,
39
,
43
,
43
,
211
,
43
,
79
,
79
,
79
,
79
,
211
,
79
,
81
,
211
,
81
,
81
,
81
,
81
,
86
,
211
,
86
,
86
,
86
,
86
,
121
,
121
,
211
,
121
,
180
,
211
,
211
,
180
,
7
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
}
;
static
yyconst
short
int
yy_chk
[
614
]
=
{
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
3
,
4
,
9
,
9
,
5
,
6
,
10
,
10
,
3
,
4
,
5
,
6
,
11
,
20
,
21
,
220
,
11
,
20
,
21
,
22
,
23
,
24
,
25
,
22
,
23
,
24
,
25
,
27
,
21
,
29
,
217
,
27
,
20
,
29
,
23
,
26
,
22
,
21
,
205
,
26
,
24
,
22
,
24
,
29
,
25
,
196
,
25
,
23
,
28
,
27
,
26
,
24
,
28
,
30
,
31
,
32
,
26
,
30
,
31
,
32
,
43
,
33
,
34
,
30
,
43
,
33
,
34
,
30
,
31
,
195
,
28
,
33
,
32
,
42
,
42
,
28
,
44
,
32
,
44
,
34
,
52
,
53
,
194
,
54
,
52
,
53
,
32
,
54
,
56
,
55
,
57
,
179
,
56
,
55
,
57
,
54
,
58
,
53
,
52
,
55
,
58
,
57
,
57
,
59
,
60
,
57
,
61
,
59
,
60
,
56
,
61
,
62
,
177
,
176
,
156
,
62
,
58
,
60
,
61
,
63
,
155
,
64
,
65
,
63
,
61
,
64
,
65
,
66
,
59
,
67
,
69
,
66
,
68
,
67
,
69
,
62
,
68
,
154
,
70
,
72
,
74
,
63
,
70
,
72
,
74
,
153
,
73
,
122
,
65
,
66
,
73
,
68
,
120
,
119
,
69
,
67
,
70
,
71
,
72
,
75
,
73
,
71
,
76
,
75
,
85
,
118
,
76
,
87
,
85
,
71
,
77
,
87
,
88
,
84
,
77
,
89
,
88
,
87
,
71
,
89
,
83
,
78
,
75
,
71
,
77
,
71
,
76
,
90
,
77
,
91
,
88
,
90
,
89
,
91
,
92
,
94
,
93
,
95
,
92
,
94
,
93
,
95
,
96
,
97
,
98
,
94
,
96
,
97
,
98
,
99
,
50
,
90
,
46
,
99
,
91
,
93
,
96
,
41
,
98
,
100
,
95
,
92
,
101
,
100
,
102
,
103
,
101
,
104
,
102
,
103
,
105
,
104
,
106
,
107
,
105
,
99
,
106
,
107
,
37
,
108
,
109
,
35
,
101
,
108
,
109
,
104
,
102
,
106
,
103
,
105
,
109
,
110
,
111
,
112
,
18
,
110
,
111
,
112
,
107
,
113
,
114
,
108
,
17
,
113
,
114
,
115
,
111
,
112
,
116
,
115
,
16
,
117
,
116
,
15
,
114
,
117
,
14
,
115
,
110
,
121
,
113
,
124
,
125
,
121
,
126
,
124
,
125
,
127
,
126
,
116
,
117
,
127
,
128
,
129
,
126
,
130
,
128
,
129
,
131
,
130
,
132
,
12
,
131
,
125
,
132
,
130
,
124
,
133
,
134
,
129
,
135
,
133
,
134
,
136
,
135
,
137
,
138
,
136
,
128
,
137
,
138
,
7
,
139
,
140
,
141
,
131
,
139
,
140
,
141
,
142
,
2
,
134
,
143
,
142
,
139
,
144
,
143
,
145
,
146
,
144
,
147
,
145
,
146
,
142
,
147
,
148
,
141
,
149
,
0
,
148
,
150
,
149
,
147
,
151
,
150
,
144
,
143
,
151
,
0
,
152
,
158
,
145
,
146
,
152
,
158
,
159
,
160
,
150
,
161
,
159
,
160
,
162
,
161
,
152
,
0
,
162
,
163
,
164
,
161
,
165
,
163
,
164
,
167
,
165
,
166
,
168
,
167
,
0
,
166
,
168
,
160
,
169
,
0
,
170
,
0
,
169
,
164
,
170
,
166
,
171
,
163
,
0
,
0
,
171
,
169
,
165
,
167
,
170
,
172
,
173
,
175
,
174
,
172
,
173
,
175
,
174
,
0
,
0
,
181
,
182
,
171
,
174
,
181
,
182
,
183
,
184
,
185
,
186
,
183
,
184
,
185
,
186
,
187
,
172
,
0
,
173
,
187
,
188
,
183
,
189
,
182
,
188
,
190
,
189
,
185
,
191
,
190
,
0
,
0
,
191
,
192
,
184
,
187
,
193
,
192
,
0
,
197
,
193
,
198
,
191
,
197
,
199
,
198
,
200
,
201
,
199
,
202
,
200
,
201
,
203
,
202
,
207
,
208
,
203
,
210
,
207
,
208
,
193
,
210
,
0
,
0
,
0
,
197
,
0
,
0
,
200
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
208
,
212
,
212
,
212
,
212
,
212
,
212
,
213
,
213
,
213
,
213
,
213
,
213
,
214
,
214
,
0
,
214
,
215
,
215
,
215
,
215
,
0
,
215
,
216
,
0
,
216
,
216
,
216
,
216
,
218
,
0
,
218
,
218
,
218
,
218
,
219
,
219
,
0
,
219
,
221
,
0
,
0
,
221
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
,
211
}
;
static
yy_state_type
yy_state_buf
[
YY_BUF_SIZE
+
2
],
*
yy_state_ptr
;
static
char
*
yy_full_match
;
static
int
yy_lp
;
#define REJECT \
{ \
*yy_cp = yy_hold_char;
/* undo effects of setting up yytext */
\
yy_cp = yy_full_match;
/* restore poss. backed-over text */
\
++yy_lp; \
goto find_rule; \
}
static
int
yy_more_offset
=
0
;
static
int
yy_prev_more_offset
=
0
;
#define yymore() (yy_more_offset = yy_flex_strlen( yytext ))
#define YY_NEED_STRLEN
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET \
{ \
yy_more_offset = yy_prev_more_offset; \
yyleng -= yy_more_offset; \
}
#ifndef YYLMAX
#define YYLMAX 8192
#endif
char
yytext
[
YYLMAX
];
char
*
yytext_ptr
;
#line 1 "scan.l"
#define INITIAL 0
#line 2 "scan.l"
/**********************************************************************
* scan.l - Scanner for the PL/pgSQL
* procedural language
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.c,v 1.4 1999/02/02 03:45:33 momjian Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
* The author hereby grants permission to use, copy, modify,
* distribute, and license this software and its documentation
* for any purpose, provided that existing copyright notices are
* retained in all copies and that this notice is included
* verbatim in any distributions. No written agreement, license,
* or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their
* author and need not follow the licensing terms described
* here, provided that the new terms are clearly indicated on
* the first page of each file where they apply.
*
* IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY
* PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN
* IF THE AUTHOR HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE AUTHOR AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON
* AN "AS IS" BASIS, AND THE AUTHOR AND DISTRIBUTORS HAVE NO
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*
**********************************************************************/
static
char
*
plpgsql_source
;
static
int
plpgsql_bytes_left
;
static
int
scanner_functype
;
static
int
scanner_typereported
;
int
plpgsql_SpaceScanned
=
0
;
static
void
plpgsql_input
(
char
*
buf
,
int
*
result
,
int
max
);
#define YY_INPUT(buf,res,max) plpgsql_input(buf, &res, max)
#define IN_STRING 1
#define IN_COMMENT 2
/* Macros after this point can all be overridden by user definitions in
* section 1.
*/
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern
"C"
int
yywrap
YY_PROTO
((
void
));
#else
extern
int
yywrap
YY_PROTO
((
void
));
#endif
#endif
#ifndef YY_NO_UNPUT
static
void
yyunput
YY_PROTO
((
int
c
,
char
*
buf_ptr
));
#endif
#ifndef yytext_ptr
static
void
yy_flex_strncpy
YY_PROTO
((
char
*
,
yyconst
char
*
,
int
));
#endif
#ifdef YY_NEED_STRLEN
static
int
yy_flex_strlen
YY_PROTO
((
yyconst
char
*
));
#endif
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static
int
yyinput
YY_PROTO
((
void
));
#else
static
int
input
YY_PROTO
((
void
));
#endif
#endif
#if YY_STACK_USED
static
int
yy_start_stack_ptr
=
0
;
static
int
yy_start_stack_depth
=
0
;
static
int
*
yy_start_stack
=
0
;
#ifndef YY_NO_PUSH_STATE
static
void
yy_push_state
YY_PROTO
((
int
new_state
));
#endif
#ifndef YY_NO_POP_STATE
static
void
yy_pop_state
YY_PROTO
((
void
));
#endif
#ifndef YY_NO_TOP_STATE
static
int
yy_top_state
YY_PROTO
((
void
));
#endif
#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif
#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines. This will fail
* miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
* or sizeof(void*) != sizeof(int).
*/
#endif
#endif
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif
/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
* is returned in "result".
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
if ( yy_current_buffer->yy_is_interactive ) \
{ \
int c = '*', n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
if ( c == '\n' ) \
buf[n++] = (char) c; \
if ( c == EOF && ferror( yyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
&& ferror( yyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" );
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
* we don't want an extra ';' after the "return" because that will cause
* some compilers to complain about unreachable statements.
*/
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif
/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif
/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
*/
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif
#define YY_RULE_SETUP \
if ( yyleng > 0 ) \
yy_current_buffer->yy_at_bol = \
(yytext[yyleng - 1] == '\n'); \
YY_USER_ACTION
YY_DECL
{
register
yy_state_type
yy_current_state
;
register
char
*
yy_cp
,
*
yy_bp
;
register
int
yy_act
;
#line 54 "scan.l"
/* ----------
* Local variable in scanner to remember where
* a string or comment started
* ----------
*/
int
start_lineno
=
0
;
/* ----------
* Reset the state when entering the scanner
* ----------
*/
BEGIN
INITIAL
;
plpgsql_SpaceScanned
=
0
;
/* ----------
* On the first call to a new source report the
* functions type (T_FUNCTION or T_TRIGGER)
* ----------
*/
if
(
!
scanner_typereported
)
{
scanner_typereported
=
1
;
return
scanner_functype
;
}
/* ----------
* The keyword rules
* ----------
*/
if
(
yy_init
)
{
yy_init
=
0
;
#ifdef YY_USER_INIT
YY_USER_INIT
;
#endif
if
(
!
yy_start
)
yy_start
=
1
;
/* first start state */
if
(
!
yyin
)
yyin
=
stdin
;
if
(
!
yyout
)
yyout
=
stdout
;
if
(
!
yy_current_buffer
)
yy_current_buffer
=
yy_create_buffer
(
yyin
,
YY_BUF_SIZE
);
yy_load_buffer_state
();
}
while
(
1
)
/* loops until end-of-file is reached */
{
yy_cp
=
yy_c_buf_p
;
/* Support of yytext. */
*
yy_cp
=
yy_hold_char
;
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp
=
yy_cp
;
yy_current_state
=
yy_start
;
yy_current_state
+=
YY_AT_BOL
();
yy_state_ptr
=
yy_state_buf
;
*
yy_state_ptr
++
=
yy_current_state
;
yy_match:
do
{
register
YY_CHAR
yy_c
=
yy_ec
[
YY_SC_TO_UI
(
*
yy_cp
)];
while
(
yy_chk
[
yy_base
[
yy_current_state
]
+
yy_c
]
!=
yy_current_state
)
{
yy_current_state
=
(
int
)
yy_def
[
yy_current_state
];
if
(
yy_current_state
>=
212
)
yy_c
=
yy_meta
[(
unsigned
int
)
yy_c
];
}
yy_current_state
=
yy_nxt
[
yy_base
[
yy_current_state
]
+
(
unsigned
int
)
yy_c
];
*
yy_state_ptr
++
=
yy_current_state
;
++
yy_cp
;
}
while
(
yy_base
[
yy_current_state
]
!=
575
);
yy_find_action:
yy_current_state
=
*--
yy_state_ptr
;
yy_lp
=
yy_accept
[
yy_current_state
];
find_rule:
/* we branch to this label when backing up */
for
(
;
;
)
/* until we find what rule we matched */
{
if
(
yy_lp
&&
yy_lp
<
yy_accept
[
yy_current_state
+
1
]
)
{
yy_act
=
yy_acclist
[
yy_lp
];
{
yy_full_match
=
yy_cp
;
break
;
}
}
--
yy_cp
;
yy_current_state
=
*--
yy_state_ptr
;
yy_lp
=
yy_accept
[
yy_current_state
];
}
YY_DO_BEFORE_ACTION
;
if
(
yy_act
!=
YY_END_OF_BUFFER
)
{
int
yyl
;
for
(
yyl
=
0
;
yyl
<
yyleng
;
++
yyl
)
if
(
yytext
[
yyl
]
==
'\n'
)
++
yylineno
;
}
do_action:
/* This label is used only to access EOF actions. */
switch
(
yy_act
)
{
/* beginning of action switch */
case
1
:
YY_RULE_SETUP
#line 83 "scan.l"
{
return
K_ASSIGN
;
}
YY_BREAK
case
2
:
YY_RULE_SETUP
#line 84 "scan.l"
{
return
K_ASSIGN
;
}
YY_BREAK
case
3
:
YY_RULE_SETUP
#line 85 "scan.l"
{
return
K_DOTDOT
;
}
YY_BREAK
case
4
:
YY_RULE_SETUP
#line 86 "scan.l"
{
return
K_ALIAS
;
}
YY_BREAK
case
5
:
YY_RULE_SETUP
#line 87 "scan.l"
{
return
K_BEGIN
;
}
YY_BREAK
case
6
:
YY_RULE_SETUP
#line 88 "scan.l"
{
return
T_BPCHAR
;
}
YY_BREAK
case
7
:
YY_RULE_SETUP
#line 89 "scan.l"
{
return
T_CHAR
;
}
YY_BREAK
case
8
:
YY_RULE_SETUP
#line 90 "scan.l"
{
return
K_CONSTANT
;
}
YY_BREAK
case
9
:
YY_RULE_SETUP
#line 91 "scan.l"
{
return
K_DEBUG
;
}
YY_BREAK
case
10
:
YY_RULE_SETUP
#line 92 "scan.l"
{
return
K_DECLARE
;
}
YY_BREAK
case
11
:
YY_RULE_SETUP
#line 93 "scan.l"
{
return
K_DEFAULT
;
}
YY_BREAK
case
12
:
YY_RULE_SETUP
#line 94 "scan.l"
{
return
K_ELSE
;
}
YY_BREAK
case
13
:
YY_RULE_SETUP
#line 95 "scan.l"
{
return
K_END
;
}
YY_BREAK
case
14
:
YY_RULE_SETUP
#line 96 "scan.l"
{
return
K_EXCEPTION
;
}
YY_BREAK
case
15
:
YY_RULE_SETUP
#line 97 "scan.l"
{
return
K_EXIT
;
}
YY_BREAK
case
16
:
YY_RULE_SETUP
#line 98 "scan.l"
{
return
K_FOR
;
}
YY_BREAK
case
17
:
YY_RULE_SETUP
#line 99 "scan.l"
{
return
K_FROM
;
}
YY_BREAK
case
18
:
YY_RULE_SETUP
#line 100 "scan.l"
{
return
K_IF
;
}
YY_BREAK
case
19
:
YY_RULE_SETUP
#line 101 "scan.l"
{
return
K_IN
;
}
YY_BREAK
case
20
:
YY_RULE_SETUP
#line 102 "scan.l"
{
return
K_INTO
;
}
YY_BREAK
case
21
:
YY_RULE_SETUP
#line 103 "scan.l"
{
return
K_LOOP
;
}
YY_BREAK
case
22
:
YY_RULE_SETUP
#line 104 "scan.l"
{
return
K_NOT
;
}
YY_BREAK
case
23
:
YY_RULE_SETUP
#line 105 "scan.l"
{
return
K_NOTICE
;
}
YY_BREAK
case
24
:
YY_RULE_SETUP
#line 106 "scan.l"
{
return
K_NULL
;
}
YY_BREAK
case
25
:
YY_RULE_SETUP
#line 107 "scan.l"
{
return
K_PERFORM
;
}
YY_BREAK
case
26
:
YY_RULE_SETUP
#line 108 "scan.l"
{
return
K_RAISE
;
}
YY_BREAK
case
27
:
YY_RULE_SETUP
#line 109 "scan.l"
{
return
K_RECORD
;
}
YY_BREAK
case
28
:
YY_RULE_SETUP
#line 110 "scan.l"
{
return
K_RENAME
;
}
YY_BREAK
case
29
:
YY_RULE_SETUP
#line 111 "scan.l"
{
return
K_RETURN
;
}
YY_BREAK
case
30
:
YY_RULE_SETUP
#line 112 "scan.l"
{
return
K_REVERSE
;
}
YY_BREAK
case
31
:
YY_RULE_SETUP
#line 113 "scan.l"
{
return
K_SELECT
;
}
YY_BREAK
case
32
:
YY_RULE_SETUP
#line 114 "scan.l"
{
return
K_THEN
;
}
YY_BREAK
case
33
:
YY_RULE_SETUP
#line 115 "scan.l"
{
return
K_TO
;
}
YY_BREAK
case
34
:
YY_RULE_SETUP
#line 116 "scan.l"
{
return
K_TYPE
;
}
YY_BREAK
case
35
:
YY_RULE_SETUP
#line 117 "scan.l"
{
return
T_VARCHAR
;
}
YY_BREAK
case
36
:
YY_RULE_SETUP
#line 118 "scan.l"
{
return
K_WHEN
;
}
YY_BREAK
case
37
:
YY_RULE_SETUP
#line 119 "scan.l"
{
return
K_WHILE
;
}
YY_BREAK
case
38
:
YY_RULE_SETUP
#line 121 "scan.l"
{
return
O_OPTION
;
}
YY_BREAK
case
39
:
YY_RULE_SETUP
#line 122 "scan.l"
{
return
O_DUMP
;
}
YY_BREAK
/* ----------
* Special word rules
* ----------
*/
case
40
:
YY_RULE_SETUP
#line 129 "scan.l"
{
return
plpgsql_parse_word
(
yytext
);
}
YY_BREAK
case
41
:
YY_RULE_SETUP
#line 130 "scan.l"
{
return
plpgsql_parse_dblword
(
yytext
);
}
YY_BREAK
case
42
:
YY_RULE_SETUP
#line 131 "scan.l"
{
return
plpgsql_parse_tripword
(
yytext
);
}
YY_BREAK
case
43
:
YY_RULE_SETUP
#line 132 "scan.l"
{
return
plpgsql_parse_wordtype
(
yytext
);
}
YY_BREAK
case
44
:
YY_RULE_SETUP
#line 133 "scan.l"
{
return
plpgsql_parse_dblwordtype
(
yytext
);
}
YY_BREAK
case
45
:
YY_RULE_SETUP
#line 134 "scan.l"
{
return
plpgsql_parse_wordrowtype
(
yytext
);
}
YY_BREAK
case
46
:
YY_RULE_SETUP
#line 136 "scan.l"
{
return
plpgsql_parse_word
(
yytext
);
}
YY_BREAK
case
47
:
YY_RULE_SETUP
#line 137 "scan.l"
{
return
T_NUMBER
;
}
YY_BREAK
/* ----------
* Ignore whitespaces but remember this happened
* ----------
*/
case
48
:
YY_RULE_SETUP
#line 143 "scan.l"
{
plpgsql_SpaceScanned
=
1
;
}
YY_BREAK
/* ----------
* Eat up comments
* ----------
*/
case
49
:
YY_RULE_SETUP
#line 149 "scan.l"
;
YY_BREAK
case
50
:
YY_RULE_SETUP
#line 150 "scan.l"
{
start_lineno
=
yylineno
;
BEGIN
IN_COMMENT
;
}
YY_BREAK
case
51
:
YY_RULE_SETUP
#line 153 "scan.l"
{
BEGIN
INITIAL
;
}
YY_BREAK
case
52
:
YY_RULE_SETUP
#line 154 "scan.l"
;
YY_BREAK
case
53
:
YY_RULE_SETUP
#line 155 "scan.l"
;
YY_BREAK
case
YY_STATE_EOF
(
IN_COMMENT
):
#line 156 "scan.l"
{
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unterminated comment starting on line %d"
,
start_lineno
);
}
YY_BREAK
/* ----------
* Collect anything inside of ''s and return one STRING
* ----------
*/
case
54
:
YY_RULE_SETUP
#line 165 "scan.l"
{
start_lineno
=
yylineno
;
BEGIN
IN_STRING
;
yymore
();
}
YY_BREAK
case
55
:
#line 170 "scan.l"
case
56
:
YY_RULE_SETUP
#line 170 "scan.l"
{
yymore
();
}
YY_BREAK
case
57
:
YY_RULE_SETUP
#line 171 "scan.l"
{
BEGIN
INITIAL
;
return
T_STRING
;
}
YY_BREAK
case
YY_STATE_EOF
(
IN_STRING
):
#line 174 "scan.l"
{
plpgsql_comperrinfo
();
elog
(
ERROR
,
"unterminated string starting on line %d"
,
start_lineno
);
}
YY_BREAK
case
58
:
YY_RULE_SETUP
#line 178 "scan.l"
{
yymore
();
}
YY_BREAK
/* ----------
* Any unmatched character is returned as is
* ----------
*/
case
59
:
YY_RULE_SETUP
#line 184 "scan.l"
{
return
yytext
[
0
];
}
YY_BREAK
case
60
:
YY_RULE_SETUP
#line 186 "scan.l"
ECHO
;
YY_BREAK
case
YY_STATE_EOF
(
INITIAL
):
yyterminate
();
case
YY_END_OF_BUFFER
:
{
/* Amount of text matched not including the EOB char. */
int
yy_amount_of_matched_text
=
(
int
)
(
yy_cp
-
yytext_ptr
)
-
1
;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
*
yy_cp
=
yy_hold_char
;
YY_RESTORE_YY_MORE_OFFSET
if
(
yy_current_buffer
->
yy_buffer_status
==
YY_BUFFER_NEW
)
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
* consistency between yy_current_buffer and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
yy_n_chars
=
yy_current_buffer
->
yy_n_chars
;
yy_current_buffer
->
yy_input_file
=
yyin
;
yy_current_buffer
->
yy_buffer_status
=
YY_BUFFER_NORMAL
;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
* of the first EOB in the buffer, since yy_c_buf_p will
* already have been incremented past the NUL character
* (since all states make transitions on EOB to the
* end-of-buffer state). Contrast this with the test
* in input().
*/
if
(
yy_c_buf_p
<=
&
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
]
)
{
/* This was really a NUL. */
yy_state_type
yy_next_state
;
yy_c_buf_p
=
yytext_ptr
+
yy_amount_of_matched_text
;
yy_current_state
=
yy_get_previous_state
();
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
* yy_get_previous_state() go ahead and do it
* for us because it doesn't know how to deal
* with the possibility of jamming (and we don't
* want to build jamming into it because then it
* will run more slowly).
*/
yy_next_state
=
yy_try_NUL_trans
(
yy_current_state
);
yy_bp
=
yytext_ptr
+
YY_MORE_ADJ
;
if
(
yy_next_state
)
{
/* Consume the NUL. */
yy_cp
=
++
yy_c_buf_p
;
yy_current_state
=
yy_next_state
;
goto
yy_match
;
}
else
{
yy_cp
=
yy_c_buf_p
;
goto
yy_find_action
;
}
}
else
switch
(
yy_get_next_buffer
()
)
{
case
EOB_ACT_END_OF_FILE
:
{
yy_did_buffer_switch_on_eof
=
0
;
if
(
yywrap
()
)
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
* yytext, we can now set up
* yy_c_buf_p so that if some total
* hoser (like flex itself) wants to
* call the scanner after we return the
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
yy_c_buf_p
=
yytext_ptr
+
YY_MORE_ADJ
;
yy_act
=
YY_STATE_EOF
(
YY_START
);
goto
do_action
;
}
else
{
if
(
!
yy_did_buffer_switch_on_eof
)
YY_NEW_FILE
;
}
break
;
}
case
EOB_ACT_CONTINUE_SCAN
:
yy_c_buf_p
=
yytext_ptr
+
yy_amount_of_matched_text
;
yy_current_state
=
yy_get_previous_state
();
yy_cp
=
yy_c_buf_p
;
yy_bp
=
yytext_ptr
+
YY_MORE_ADJ
;
goto
yy_match
;
case
EOB_ACT_LAST_MATCH
:
yy_c_buf_p
=
&
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
];
yy_current_state
=
yy_get_previous_state
();
yy_cp
=
yy_c_buf_p
;
yy_bp
=
yytext_ptr
+
YY_MORE_ADJ
;
goto
yy_find_action
;
}
break
;
}
default:
YY_FATAL_ERROR
(
"fatal flex scanner internal error--no action found"
);
}
/* end of action switch */
}
/* end of scanning one token */
}
/* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
* Returns a code representing an action:
* EOB_ACT_LAST_MATCH -
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
static
int
yy_get_next_buffer
()
{
register
char
*
dest
=
yy_current_buffer
->
yy_ch_buf
;
register
char
*
source
=
yytext_ptr
;
register
int
number_to_move
,
i
;
int
ret_val
;
if
(
yy_c_buf_p
>
&
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
+
1
]
)
YY_FATAL_ERROR
(
"fatal flex scanner internal error--end of buffer missed"
);
if
(
yy_current_buffer
->
yy_fill_buffer
==
0
)
{
/* Don't try to fill the buffer, so this is an EOF. */
if
(
yy_c_buf_p
-
yytext_ptr
-
YY_MORE_ADJ
==
1
)
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
*/
return
EOB_ACT_END_OF_FILE
;
}
else
{
/* We matched some text prior to the EOB, first
* process it.
*/
return
EOB_ACT_LAST_MATCH
;
}
}
/* Try to read more data. */
/* First move last chars to start of buffer. */
number_to_move
=
(
int
)
(
yy_c_buf_p
-
yytext_ptr
)
-
1
;
for
(
i
=
0
;
i
<
number_to_move
;
++
i
)
*
(
dest
++
)
=
*
(
source
++
);
if
(
yy_current_buffer
->
yy_buffer_status
==
YY_BUFFER_EOF_PENDING
)
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
yy_current_buffer
->
yy_n_chars
=
yy_n_chars
=
0
;
else
{
int
num_to_read
=
yy_current_buffer
->
yy_buf_size
-
number_to_move
-
1
;
while
(
num_to_read
<=
0
)
{
/* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
YY_FATAL_ERROR
(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT"
);
#else
/* just a shorter name for the current buffer */
YY_BUFFER_STATE
b
=
yy_current_buffer
;
int
yy_c_buf_p_offset
=
(
int
)
(
yy_c_buf_p
-
b
->
yy_ch_buf
);
if
(
b
->
yy_is_our_buffer
)
{
int
new_size
=
b
->
yy_buf_size
*
2
;
if
(
new_size
<=
0
)
b
->
yy_buf_size
+=
b
->
yy_buf_size
/
8
;
else
b
->
yy_buf_size
*=
2
;
b
->
yy_ch_buf
=
(
char
*
)
/* Include room in for 2 EOB chars. */
yy_flex_realloc
(
(
void
*
)
b
->
yy_ch_buf
,
b
->
yy_buf_size
+
2
);
}
else
/* Can't grow it, we don't own it. */
b
->
yy_ch_buf
=
0
;
if
(
!
b
->
yy_ch_buf
)
YY_FATAL_ERROR
(
"fatal error - scanner input buffer overflow"
);
yy_c_buf_p
=
&
b
->
yy_ch_buf
[
yy_c_buf_p_offset
];
num_to_read
=
yy_current_buffer
->
yy_buf_size
-
number_to_move
-
1
;
#endif
}
if
(
num_to_read
>
YY_READ_BUF_SIZE
)
num_to_read
=
YY_READ_BUF_SIZE
;
/* Read in more data. */
YY_INPUT
(
(
&
yy_current_buffer
->
yy_ch_buf
[
number_to_move
]),
yy_n_chars
,
num_to_read
);
yy_current_buffer
->
yy_n_chars
=
yy_n_chars
;
}
if
(
yy_n_chars
==
0
)
{
if
(
number_to_move
==
YY_MORE_ADJ
)
{
ret_val
=
EOB_ACT_END_OF_FILE
;
yyrestart
(
yyin
);
}
else
{
ret_val
=
EOB_ACT_LAST_MATCH
;
yy_current_buffer
->
yy_buffer_status
=
YY_BUFFER_EOF_PENDING
;
}
}
else
ret_val
=
EOB_ACT_CONTINUE_SCAN
;
yy_n_chars
+=
number_to_move
;
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
]
=
YY_END_OF_BUFFER_CHAR
;
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
+
1
]
=
YY_END_OF_BUFFER_CHAR
;
yytext_ptr
=
&
yy_current_buffer
->
yy_ch_buf
[
0
];
return
ret_val
;
}
/* yy_get_previous_state - get the state just before the EOB char was reached */
static
yy_state_type
yy_get_previous_state
()
{
register
yy_state_type
yy_current_state
;
register
char
*
yy_cp
;
yy_current_state
=
yy_start
;
yy_current_state
+=
YY_AT_BOL
();
yy_state_ptr
=
yy_state_buf
;
*
yy_state_ptr
++
=
yy_current_state
;
for
(
yy_cp
=
yytext_ptr
+
YY_MORE_ADJ
;
yy_cp
<
yy_c_buf_p
;
++
yy_cp
)
{
register
YY_CHAR
yy_c
=
(
*
yy_cp
?
yy_ec
[
YY_SC_TO_UI
(
*
yy_cp
)]
:
1
);
while
(
yy_chk
[
yy_base
[
yy_current_state
]
+
yy_c
]
!=
yy_current_state
)
{
yy_current_state
=
(
int
)
yy_def
[
yy_current_state
];
if
(
yy_current_state
>=
212
)
yy_c
=
yy_meta
[(
unsigned
int
)
yy_c
];
}
yy_current_state
=
yy_nxt
[
yy_base
[
yy_current_state
]
+
(
unsigned
int
)
yy_c
];
*
yy_state_ptr
++
=
yy_current_state
;
}
return
yy_current_state
;
}
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
#ifdef YY_USE_PROTOS
static
yy_state_type
yy_try_NUL_trans
(
yy_state_type
yy_current_state
)
#else
static
yy_state_type
yy_try_NUL_trans
(
yy_current_state
)
yy_state_type
yy_current_state
;
#endif
{
register
int
yy_is_jam
;
register
YY_CHAR
yy_c
=
1
;
while
(
yy_chk
[
yy_base
[
yy_current_state
]
+
yy_c
]
!=
yy_current_state
)
{
yy_current_state
=
(
int
)
yy_def
[
yy_current_state
];
if
(
yy_current_state
>=
212
)
yy_c
=
yy_meta
[(
unsigned
int
)
yy_c
];
}
yy_current_state
=
yy_nxt
[
yy_base
[
yy_current_state
]
+
(
unsigned
int
)
yy_c
];
yy_is_jam
=
(
yy_current_state
==
211
);
if
(
!
yy_is_jam
)
*
yy_state_ptr
++
=
yy_current_state
;
return
yy_is_jam
?
0
:
yy_current_state
;
}
#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static
void
yyunput
(
int
c
,
register
char
*
yy_bp
)
#else
static
void
yyunput
(
c
,
yy_bp
)
int
c
;
register
char
*
yy_bp
;
#endif
{
register
char
*
yy_cp
=
yy_c_buf_p
;
/* undo effects of setting up yytext */
*
yy_cp
=
yy_hold_char
;
if
(
yy_cp
<
yy_current_buffer
->
yy_ch_buf
+
2
)
{
/* need to shift things up to make room */
/* +2 for EOB chars. */
register
int
number_to_move
=
yy_n_chars
+
2
;
register
char
*
dest
=
&
yy_current_buffer
->
yy_ch_buf
[
yy_current_buffer
->
yy_buf_size
+
2
];
register
char
*
source
=
&
yy_current_buffer
->
yy_ch_buf
[
number_to_move
];
while
(
source
>
yy_current_buffer
->
yy_ch_buf
)
*--
dest
=
*--
source
;
yy_cp
+=
(
int
)
(
dest
-
source
);
yy_bp
+=
(
int
)
(
dest
-
source
);
yy_current_buffer
->
yy_n_chars
=
yy_n_chars
=
yy_current_buffer
->
yy_buf_size
;
if
(
yy_cp
<
yy_current_buffer
->
yy_ch_buf
+
2
)
YY_FATAL_ERROR
(
"flex scanner push-back overflow"
);
}
*--
yy_cp
=
(
char
)
c
;
if
(
c
==
'\n'
)
--
yylineno
;
yytext_ptr
=
yy_bp
;
yy_hold_char
=
*
yy_cp
;
yy_c_buf_p
=
yy_cp
;
}
#endif
/* ifndef YY_NO_UNPUT */
#ifdef __cplusplus
static
int
yyinput
()
#else
static
int
input
()
#endif
{
int
c
;
*
yy_c_buf_p
=
yy_hold_char
;
if
(
*
yy_c_buf_p
==
YY_END_OF_BUFFER_CHAR
)
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
if
(
yy_c_buf_p
<
&
yy_current_buffer
->
yy_ch_buf
[
yy_n_chars
]
)
/* This was really a NUL. */
*
yy_c_buf_p
=
'\0'
;
else
{
/* need more input */
int
offset
=
yy_c_buf_p
-
yytext_ptr
;
++
yy_c_buf_p
;
switch
(
yy_get_next_buffer
()
)
{
case
EOB_ACT_LAST_MATCH
:
/* This happens because yy_g_n_b()
* sees that we've accumulated a
* token and flags that we need to
* try matching the token before
* proceeding. But for input(),
* there's no matching to consider.
* So convert the EOB_ACT_LAST_MATCH
* to EOB_ACT_END_OF_FILE.
*/
/* Reset buffer status. */
yyrestart
(
yyin
);
/* fall through */
case
EOB_ACT_END_OF_FILE
:
{
if
(
yywrap
()
)
return
EOF
;
if
(
!
yy_did_buffer_switch_on_eof
)
YY_NEW_FILE
;
#ifdef __cplusplus
return
yyinput
();
#else
return
input
();
#endif
}
case
EOB_ACT_CONTINUE_SCAN
:
yy_c_buf_p
=
yytext_ptr
+
offset
;
break
;
}
}
}
c
=
*
(
unsigned
char
*
)
yy_c_buf_p
;
/* cast for 8-bit char's */
*
yy_c_buf_p
=
'\0'
;
/* preserve yytext */
yy_hold_char
=
*++
yy_c_buf_p
;
yy_current_buffer
->
yy_at_bol
=
(
c
==
'\n'
);
if
(
yy_current_buffer
->
yy_at_bol
)
++
yylineno
;
return
c
;
}
#ifdef YY_USE_PROTOS
void
yyrestart
(
FILE
*
input_file
)
#else
void
yyrestart
(
input_file
)
FILE
*
input_file
;
#endif
{
if
(
!
yy_current_buffer
)
yy_current_buffer
=
yy_create_buffer
(
yyin
,
YY_BUF_SIZE
);
yy_init_buffer
(
yy_current_buffer
,
input_file
);
yy_load_buffer_state
();
}
#ifdef YY_USE_PROTOS
void
yy_switch_to_buffer
(
YY_BUFFER_STATE
new_buffer
)
#else
void
yy_switch_to_buffer
(
new_buffer
)
YY_BUFFER_STATE
new_buffer
;
#endif
{
if
(
yy_current_buffer
==
new_buffer
)
return
;
if
(
yy_current_buffer
)
{
/* Flush out information for old buffer. */
*
yy_c_buf_p
=
yy_hold_char
;
yy_current_buffer
->
yy_buf_pos
=
yy_c_buf_p
;
yy_current_buffer
->
yy_n_chars
=
yy_n_chars
;
}
yy_current_buffer
=
new_buffer
;
yy_load_buffer_state
();
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
yy_did_buffer_switch_on_eof
=
1
;
}
#ifdef YY_USE_PROTOS
void
yy_load_buffer_state
(
void
)
#else
void
yy_load_buffer_state
()
#endif
{
yy_n_chars
=
yy_current_buffer
->
yy_n_chars
;
yytext_ptr
=
yy_c_buf_p
=
yy_current_buffer
->
yy_buf_pos
;
yyin
=
yy_current_buffer
->
yy_input_file
;
yy_hold_char
=
*
yy_c_buf_p
;
}
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE
yy_create_buffer
(
FILE
*
file
,
int
size
)
#else
YY_BUFFER_STATE
yy_create_buffer
(
file
,
size
)
FILE
*
file
;
int
size
;
#endif
{
YY_BUFFER_STATE
b
;
b
=
(
YY_BUFFER_STATE
)
yy_flex_alloc
(
sizeof
(
struct
yy_buffer_state
)
);
if
(
!
b
)
YY_FATAL_ERROR
(
"out of dynamic memory in yy_create_buffer()"
);
b
->
yy_buf_size
=
size
;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
b
->
yy_ch_buf
=
(
char
*
)
yy_flex_alloc
(
b
->
yy_buf_size
+
2
);
if
(
!
b
->
yy_ch_buf
)
YY_FATAL_ERROR
(
"out of dynamic memory in yy_create_buffer()"
);
b
->
yy_is_our_buffer
=
1
;
yy_init_buffer
(
b
,
file
);
return
b
;
}
#ifdef YY_USE_PROTOS
void
yy_delete_buffer
(
YY_BUFFER_STATE
b
)
#else
void
yy_delete_buffer
(
b
)
YY_BUFFER_STATE
b
;
#endif
{
if
(
!
b
)
return
;
if
(
b
==
yy_current_buffer
)
yy_current_buffer
=
(
YY_BUFFER_STATE
)
0
;
if
(
b
->
yy_is_our_buffer
)
yy_flex_free
(
(
void
*
)
b
->
yy_ch_buf
);
yy_flex_free
(
(
void
*
)
b
);
}
#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern
int
isatty
YY_PROTO
((
int
));
#endif
#endif
#ifdef YY_USE_PROTOS
void
yy_init_buffer
(
YY_BUFFER_STATE
b
,
FILE
*
file
)
#else
void
yy_init_buffer
(
b
,
file
)
YY_BUFFER_STATE
b
;
FILE
*
file
;
#endif
{
yy_flush_buffer
(
b
);
b
->
yy_input_file
=
file
;
b
->
yy_fill_buffer
=
1
;
#if YY_ALWAYS_INTERACTIVE
b
->
yy_is_interactive
=
1
;
#else
#if YY_NEVER_INTERACTIVE
b
->
yy_is_interactive
=
0
;
#else
b
->
yy_is_interactive
=
file
?
(
isatty
(
fileno
(
file
)
)
>
0
)
:
0
;
#endif
#endif
}
#ifdef YY_USE_PROTOS
void
yy_flush_buffer
(
YY_BUFFER_STATE
b
)
#else
void
yy_flush_buffer
(
b
)
YY_BUFFER_STATE
b
;
#endif
{
if
(
!
b
)
return
;
b
->
yy_n_chars
=
0
;
/* We always need two end-of-buffer characters. The first causes
* a transition to the end-of-buffer state. The second causes
* a jam in that state.
*/
b
->
yy_ch_buf
[
0
]
=
YY_END_OF_BUFFER_CHAR
;
b
->
yy_ch_buf
[
1
]
=
YY_END_OF_BUFFER_CHAR
;
b
->
yy_buf_pos
=
&
b
->
yy_ch_buf
[
0
];
b
->
yy_at_bol
=
1
;
b
->
yy_buffer_status
=
YY_BUFFER_NEW
;
if
(
b
==
yy_current_buffer
)
yy_load_buffer_state
();
}
#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE
yy_scan_buffer
(
char
*
base
,
yy_size_t
size
)
#else
YY_BUFFER_STATE
yy_scan_buffer
(
base
,
size
)
char
*
base
;
yy_size_t
size
;
#endif
{
YY_BUFFER_STATE
b
;
if
(
size
<
2
||
base
[
size
-
2
]
!=
YY_END_OF_BUFFER_CHAR
||
base
[
size
-
1
]
!=
YY_END_OF_BUFFER_CHAR
)
/* They forgot to leave room for the EOB's. */
return
0
;
b
=
(
YY_BUFFER_STATE
)
yy_flex_alloc
(
sizeof
(
struct
yy_buffer_state
)
);
if
(
!
b
)
YY_FATAL_ERROR
(
"out of dynamic memory in yy_scan_buffer()"
);
b
->
yy_buf_size
=
size
-
2
;
/* "- 2" to take care of EOB's */
b
->
yy_buf_pos
=
b
->
yy_ch_buf
=
base
;
b
->
yy_is_our_buffer
=
0
;
b
->
yy_input_file
=
0
;
b
->
yy_n_chars
=
b
->
yy_buf_size
;
b
->
yy_is_interactive
=
0
;
b
->
yy_at_bol
=
1
;
b
->
yy_fill_buffer
=
0
;
b
->
yy_buffer_status
=
YY_BUFFER_NEW
;
yy_switch_to_buffer
(
b
);
return
b
;
}
#endif
#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE
yy_scan_string
(
yyconst
char
*
yy_str
)
#else
YY_BUFFER_STATE
yy_scan_string
(
yy_str
)
yyconst
char
*
yy_str
;
#endif
{
int
len
;
for
(
len
=
0
;
yy_str
[
len
];
++
len
)
;
return
yy_scan_bytes
(
yy_str
,
len
);
}
#endif
#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE
yy_scan_bytes
(
yyconst
char
*
bytes
,
int
len
)
#else
YY_BUFFER_STATE
yy_scan_bytes
(
bytes
,
len
)
yyconst
char
*
bytes
;
int
len
;
#endif
{
YY_BUFFER_STATE
b
;
char
*
buf
;
yy_size_t
n
;
int
i
;
/* Get memory for full buffer, including space for trailing EOB's. */
n
=
len
+
2
;
buf
=
(
char
*
)
yy_flex_alloc
(
n
);
if
(
!
buf
)
YY_FATAL_ERROR
(
"out of dynamic memory in yy_scan_bytes()"
);
for
(
i
=
0
;
i
<
len
;
++
i
)
buf
[
i
]
=
bytes
[
i
];
buf
[
len
]
=
buf
[
len
+
1
]
=
YY_END_OF_BUFFER_CHAR
;
b
=
yy_scan_buffer
(
buf
,
n
);
if
(
!
b
)
YY_FATAL_ERROR
(
"bad buffer in yy_scan_bytes()"
);
/* It's okay to grow etc. this buffer, and we should throw it
* away when we're done.
*/
b
->
yy_is_our_buffer
=
1
;
return
b
;
}
#endif
#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static
void
yy_push_state
(
int
new_state
)
#else
static
void
yy_push_state
(
new_state
)
int
new_state
;
#endif
{
if
(
yy_start_stack_ptr
>=
yy_start_stack_depth
)
{
yy_size_t
new_size
;
yy_start_stack_depth
+=
YY_START_STACK_INCR
;
new_size
=
yy_start_stack_depth
*
sizeof
(
int
);
if
(
!
yy_start_stack
)
yy_start_stack
=
(
int
*
)
yy_flex_alloc
(
new_size
);
else
yy_start_stack
=
(
int
*
)
yy_flex_realloc
(
(
void
*
)
yy_start_stack
,
new_size
);
if
(
!
yy_start_stack
)
YY_FATAL_ERROR
(
"out of memory expanding start-condition stack"
);
}
yy_start_stack
[
yy_start_stack_ptr
++
]
=
YY_START
;
BEGIN
(
new_state
);
}
#endif
#ifndef YY_NO_POP_STATE
static
void
yy_pop_state
()
{
if
(
--
yy_start_stack_ptr
<
0
)
YY_FATAL_ERROR
(
"start-condition stack underflow"
);
BEGIN
(
yy_start_stack
[
yy_start_stack_ptr
]);
}
#endif
#ifndef YY_NO_TOP_STATE
static
int
yy_top_state
()
{
return
yy_start_stack
[
yy_start_stack_ptr
-
1
];
}
#endif
#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif
#ifdef YY_USE_PROTOS
static
void
yy_fatal_error
(
yyconst
char
msg
[]
)
#else
static
void
yy_fatal_error
(
msg
)
char
msg
[];
#endif
{
(
void
)
fprintf
(
stderr
,
"%s
\n
"
,
msg
);
exit
(
YY_EXIT_FAILURE
);
}
/* Redefine yyless() so it works in section 3 code. */
#undef yyless
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */
\
yytext[yyleng] = yy_hold_char; \
yy_c_buf_p = yytext + n; \
yy_hold_char = *yy_c_buf_p; \
*yy_c_buf_p = '\0'; \
yyleng = n; \
} \
while ( 0 )
/* Internal utility routines. */
#ifndef yytext_ptr
#ifdef YY_USE_PROTOS
static
void
yy_flex_strncpy
(
char
*
s1
,
yyconst
char
*
s2
,
int
n
)
#else
static
void
yy_flex_strncpy
(
s1
,
s2
,
n
)
char
*
s1
;
yyconst
char
*
s2
;
int
n
;
#endif
{
register
int
i
;
for
(
i
=
0
;
i
<
n
;
++
i
)
s1
[
i
]
=
s2
[
i
];
}
#endif
#ifdef YY_NEED_STRLEN
#ifdef YY_USE_PROTOS
static
int
yy_flex_strlen
(
yyconst
char
*
s
)
#else
static
int
yy_flex_strlen
(
s
)
yyconst
char
*
s
;
#endif
{
register
int
n
;
for
(
n
=
0
;
s
[
n
];
++
n
)
;
return
n
;
}
#endif
#ifdef YY_USE_PROTOS
static
void
*
yy_flex_alloc
(
yy_size_t
size
)
#else
static
void
*
yy_flex_alloc
(
size
)
yy_size_t
size
;
#endif
{
return
(
void
*
)
malloc
(
size
);
}
#ifdef YY_USE_PROTOS
static
void
*
yy_flex_realloc
(
void
*
ptr
,
yy_size_t
size
)
#else
static
void
*
yy_flex_realloc
(
ptr
,
size
)
void
*
ptr
;
yy_size_t
size
;
#endif
{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
* because both ANSI C and C++ allow castless assignment from
* any pointer type to void*, and deal with argument conversions
* as though doing an assignment.
*/
return
(
void
*
)
realloc
(
(
char
*
)
ptr
,
size
);
}
#ifdef YY_USE_PROTOS
static
void
yy_flex_free
(
void
*
ptr
)
#else
static
void
yy_flex_free
(
ptr
)
void
*
ptr
;
#endif
{
free
(
ptr
);
}
#if YY_MAIN
int
main
()
{
yylex
();
return
0
;
}
#endif
#line 186 "scan.l"
int
yywrap
()
{
return
1
;
}
static
void
plpgsql_input
(
char
*
buf
,
int
*
result
,
int
max
)
{
int
n
=
max
;
if
(
n
>
plpgsql_bytes_left
)
{
n
=
plpgsql_bytes_left
;
}
if
(
n
==
0
)
{
*
result
=
YY_NULL
;
return
;
}
*
result
=
n
;
memcpy
(
buf
,
plpgsql_source
,
n
);
plpgsql_source
+=
n
;
plpgsql_bytes_left
-=
n
;
}
void
plpgsql_setinput
(
char
*
source
,
int
functype
)
{
yyrestart
(
NULL
);
yylineno
=
1
;
plpgsql_source
=
source
;
if
(
*
plpgsql_source
==
'\n'
)
plpgsql_source
++
;
plpgsql_bytes_left
=
strlen
(
plpgsql_source
);
scanner_functype
=
functype
;
scanner_typereported
=
0
;
}
src/pl/plpgsql/src/y.tab.h
deleted
100644 → 0
View file @
bb7c0da1
typedef
union
{
int32
ival
;
char
*
str
;
struct
{
char
*
name
;
int
lineno
;
}
varname
;
struct
{
int
nalloc
;
int
nused
;
int
*
dtnums
;
}
dtlist
;
struct
{
int
reverse
;
PLpgSQL_expr
*
expr
;
}
forilow
;
struct
{
char
*
label
;
int
n_initvars
;
int
*
initvarnos
;
}
declhdr
;
PLpgSQL_type
*
dtype
;
PLpgSQL_var
*
var
;
PLpgSQL_row
*
row
;
PLpgSQL_rec
*
rec
;
PLpgSQL_recfield
*
recfield
;
PLpgSQL_trigarg
*
trigarg
;
PLpgSQL_expr
*
expr
;
PLpgSQL_stmt
*
stmt
;
PLpgSQL_stmts
*
stmts
;
PLpgSQL_stmt_block
*
program
;
PLpgSQL_nsitem
*
nsitem
;
}
YYSTYPE
;
#define K_ALIAS 258
#define K_ASSIGN 259
#define K_BEGIN 260
#define K_CONSTANT 261
#define K_DEBUG 262
#define K_DECLARE 263
#define K_DEFAULT 264
#define K_DOTDOT 265
#define K_ELSE 266
#define K_END 267
#define K_EXCEPTION 268
#define K_EXIT 269
#define K_FOR 270
#define K_FROM 271
#define K_IF 272
#define K_IN 273
#define K_INTO 274
#define K_LOOP 275
#define K_NOT 276
#define K_NOTICE 277
#define K_NULL 278
#define K_PERFORM 279
#define K_RAISE 280
#define K_RECORD 281
#define K_RENAME 282
#define K_RETURN 283
#define K_REVERSE 284
#define K_SELECT 285
#define K_THEN 286
#define K_TO 287
#define K_TYPE 288
#define K_WHEN 289
#define K_WHILE 290
#define T_FUNCTION 291
#define T_TRIGGER 292
#define T_CHAR 293
#define T_BPCHAR 294
#define T_VARCHAR 295
#define T_LABEL 296
#define T_STRING 297
#define T_VARIABLE 298
#define T_ROW 299
#define T_ROWTYPE 300
#define T_RECORD 301
#define T_RECFIELD 302
#define T_TGARGV 303
#define T_DTYPE 304
#define T_WORD 305
#define T_NUMBER 306
#define T_ERROR 307
#define O_OPTION 308
#define O_DUMP 309
extern
YYSTYPE
yylval
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment