1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.357 2007/12/28 11:25:21 meskes Exp $*/
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.358 2008/01/14 09:43:42 meskes Exp $*/
22
33/* Copyright comment*/
44%{
@@ -1288,7 +1288,10 @@ VariableShowStmt: SHOW var_name ecpg_into
12881288| SHOW SESSION AUTHORIZATION ecpg_into
12891289{$$ = make_str(" show session authorization" ); }
12901290| SHOW ALL
1291- { mmerror(PARSE_ERROR, ET_ERROR," SHOW ALL not implemented" ); }
1291+ {
1292+ mmerror (PARSE_ERROR, ET_ERROR," SHOW ALL not implemented" );
1293+ $$ = EMPTY;
1294+ }
12921295;
12931296
12941297VariableResetStmt :RESET var_name
@@ -2300,22 +2303,22 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
23002303}
23012304| FETCH from_in name ecpg_into
23022305{
2303- add_additional_variables ($3 ,false );
2306+ add_additional_variables ($3 ,false );
23042307$$ = cat_str(3 , make_str(" fetch" ),$2 ,$3 );
23052308}
23062309| FETCH name ecpg_into
23072310{
2308- add_additional_variables ($2 ,false );
2311+ add_additional_variables ($2 ,false );
23092312$$ = cat2_str(make_str(" fetch" ),$2 );
23102313}
23112314| FETCH fetch_direction from_in name
23122315{
2313- add_additional_variables ($4 ,false );
2316+ add_additional_variables ($4 ,false );
23142317$$ = cat_str(4 , make_str(" fetch" ),$2 ,$3 ,$4 );
23152318}
23162319| FETCH fetch_direction name
23172320{
2318- add_additional_variables ($3 ,false );
2321+ add_additional_variables ($3 ,false );
23192322$$ = cat_str(4 , make_str(" fetch" ),$2 , make_str(" from" ),$3 );
23202323}
23212324| FETCH from_in name
@@ -2325,7 +2328,7 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
23252328}
23262329| FETCH name
23272330{
2328- add_additional_variables ($2 ,false );
2331+ add_additional_variables ($2 ,false );
23292332$$ = cat2_str(make_str(" fetch" ),$2 );
23302333}
23312334| MOVE fetch_direction from_in name
@@ -2340,42 +2343,57 @@ fetch_direction: NEXT{ $$ = make_str("next"); }
23402343| LAST_P {$$ = make_str(" last" ); }
23412344| ABSOLUTE_P IntConst {
23422345if ($2 [1 ] ==' $' )
2343- mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable.\n " );
2346+ {
2347+ mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable, ignoring it.\n " );
2348+ $$ = make_str(" absolute" );
2349+ }
23442350else
23452351$$ = cat2_str(make_str(" absolute" ),$2 );
23462352}
23472353| RELATIVE_P IntConst {
23482354if ($2 [1 ] ==' $' )
2349- mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable.\n " );
2355+ {
2356+ mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable, ignoring it.\n " );
2357+ $$ = make_str(" relative" );
2358+ }
23502359else
23512360$$ = cat2_str(make_str(" relative" ),$2 );
23522361}
23532362| IntConst {
23542363if ($1 [1 ] ==' $' )
2355- mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable.\n " );
2364+ {
2365+ mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variablei, ignoring it.\n " );
2366+ $$ = EMPTY;
2367+ }
23562368else
23572369$$ =$1 ;
23582370}
23592371| ALL {$$ = make_str(" all" ); }
23602372| FORWARD {$$ = make_str(" forward" ); }
23612373| FORWARD IntConst {
23622374if ($2 [1 ] ==' $' )
2363- mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable.\n " );
2375+ {
2376+ mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable, ignoring it.\n " );
2377+ $$ = make_str(" forward" );
2378+ }
23642379else
23652380$$ = cat2_str(make_str(" forward" ),$2 );
23662381}
23672382| FORWARD ALL {$$ = make_str(" forward all" ); }
23682383| BACKWARD {$$ = make_str(" backward" ); }
23692384| BACKWARD IntConst {
23702385if ($2 [1 ] ==' $' )
2371- mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable.\n " );
2386+ {
2387+ mmerror (PARSE_ERROR, ET_ERROR," fetch/move count must not be a variable, ignoring it.\n " );
2388+ $$ = make_str(" backward" );
2389+ }
23722390else
23732391$$ = cat2_str(make_str(" backward" ),$2 );
23742392}
23752393| BACKWARD ALL {$$ = make_str(" backward all" ); }
23762394;
23772395
2378- from_in :IN_P {$$ = make_str(" in" ); }
2396+ from_in :IN_P {$$ = make_str(" in" ); }
23792397| FROM {$$ = make_str(" from" ); }
23802398;
23812399
@@ -2744,7 +2762,10 @@ RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')' opt_drop_behavior
27442762;
27452763
27462764oper_argtypes :Typename
2747- { mmerror(PARSE_ERROR, ET_ERROR," parser: argument type missing (use NONE for unary operators)" ); }
2765+ {
2766+ mmerror (PARSE_ERROR, ET_ERROR," parser: argument type missing (use NONE for unary operators)" );
2767+ $$ = make_str(" none" );
2768+ }
27482769| Typename ' ,' Typename
27492770{$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
27502771| NONE ' ,' Typename /* left unary*/
@@ -3665,7 +3686,10 @@ select_limit:LIMIT select_limit_value OFFSET select_offset_value
36653686| OFFSET select_offset_value
36663687 {$$ = cat2_str(make_str(" offset" ),$2 ); }
36673688| LIMIT select_limit_value ' ,' select_offset_value
3668- { mmerror(PARSE_ERROR, ET_WARNING," No longer supported LIMIT #,# syntax passed to backend." ); }
3689+ {
3690+ mmerror (PARSE_ERROR, ET_WARNING," No longer supported LIMIT #,# syntax passed to backend." );
3691+ $$ = cat_str(4 , make_str(" limit" ),$2 , make_str(" ," ),$4 );
3692+ }
36693693;
36703694
36713695opt_select_limit :select_limit {$$ =$1 ; }
@@ -3757,25 +3781,28 @@ from_list:from_list ',' table_ref { $$ = cat_str(3, $1, make_str(","), $3); }
37573781table_ref :relation_expr
37583782{$$ =$1 ; }
37593783| relation_expr alias_clause
3760- {$$ = cat2_str($1 ,$2 ); }
3784+ {$$ = cat2_str($1 ,$2 ); }
37613785| func_table
37623786{$$ =$1 ; }
37633787| func_table alias_clause
3764- {$$ = cat2_str($1 ,$2 ); }
3788+ {$$ = cat2_str($1 ,$2 ); }
37653789| func_table AS ' (' TableFuncElementList ' )'
3766- {$$ = cat_str(4 ,$1 , make_str(" as (" ),$4 , make_str(" )" )); }
3790+ {$$ = cat_str(4 ,$1 , make_str(" as (" ),$4 , make_str(" )" )); }
37673791| func_table AS ColId ' (' TableFuncElementList ' )'
3768- {$$ = cat_str(6 ,$1 , make_str(" as" ),$3 , make_str(" (" ),$5 , make_str(" )" ));}
3792+ {$$ = cat_str(6 ,$1 , make_str(" as" ),$3 , make_str(" (" ),$5 , make_str(" )" ));}
37693793| func_table ColId ' (' TableFuncElementList ' )'
3770- {$$ = cat_str(5 ,$1 ,$2 , make_str(" (" ),$4 , make_str(" )" )); }
3794+ {$$ = cat_str(5 ,$1 ,$2 , make_str(" (" ),$4 , make_str(" )" )); }
37713795| select_with_parens
3772- {mmerror(PARSE_ERROR, ET_ERROR," sub-SELECT in FROM must have an alias" );}
3796+ {
3797+ mmerror (PARSE_ERROR, ET_ERROR," sub-SELECT in FROM must have an alias" );
3798+ $$ =$1 ;
3799+ }
37733800| select_with_parens alias_clause
3774- {$$ = cat2_str($1 ,$2 ); }
3801+ {$$ = cat2_str($1 ,$2 ); }
37753802| joined_table
37763803{$$ =$1 ; }
37773804| ' (' joined_table ' )' alias_clause
3778- {$$ = cat_str(4 , make_str(" (" ),$2 , make_str(" )" ),$4 ); }
3805+ {$$ = cat_str(4 , make_str(" (" ),$2 , make_str(" )" ),$4 ); }
37793806;
37803807
37813808/*
@@ -5159,6 +5186,7 @@ char_variable: cvariable
51595186break ;
51605187default :
51615188mmerror (PARSE_ERROR, ET_ERROR," invalid datatype" );
5189+ $$ =$1 ;
51625190break ;
51635191}
51645192}