1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.278 2004/04/29 14:08:10 meskes Exp $*/
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.279 2004/05/05 15:03:04 meskes Exp $*/
22
33/* Copyright comment*/
44%{
@@ -211,7 +211,7 @@ adjust_informix(struct arguments *list)
211211
212212if (atoi (ptr->variable ->type ->size ) >1 )
213213{
214- ptr->variable =new_variable (cat_str (4 ,make_str (" (" ),mm_strdup (ECPGtype_name (ptr->variable ->type ->type )),make_str (" *)(ECPG_informix_get_var(" ),mm_strdup (temp)),ECPGmake_simple_type (ptr->variable ->type ->type , ptr->variable ->type ->size ),0 );
214+ ptr->variable =new_variable (cat_str (4 ,make_str (" (" ),mm_strdup (ECPGtype_name (ptr->variable ->type ->u . element -> type )),make_str (" *)(ECPG_informix_get_var(" ),mm_strdup (temp)),ECPGmake_array_type ( ECPGmake_simple_type (ptr->variable ->type ->u . element -> type , make_str ( " 1 " )) , ptr->variable ->type ->size ),0 );
215215sprintf (temp," %d, (" , ecpg_informix_var++);
216216}
217217else
@@ -442,7 +442,7 @@ add_additional_variables(char *name, bool insert)
442442%type <str> TableConstraint OptTableElementList Xconst opt_transaction
443443%type <str> ConstraintElem key_actions ColQualList type_name
444444%type <str> target_list target_el update_target_list alias_clause
445- %type <str> update_target_el qualified_name database_name
445+ %type <str> update_target_el qualified_name database_name alter_using
446446%type <str> access_method attr_name index_name name func_name
447447%type <str> file_name AexprConst c_expr ConstTypename var_list
448448%type <str> a_expr b_expr TruncateStmt CommentStmt OnCommitOption opt_by
@@ -464,15 +464,15 @@ add_additional_variables(char *name, bool insert)
464464%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
465465%type <str> FetchStmt from_in CreateOpClassStmt like_including_defaults
466466%type <str> ClosePortalStmt DropStmt VacuumStmt AnalyzeStmt opt_verbose
467- %type <str> opt_full func_arg OptWithOids opt_freeze
467+ %type <str> opt_full func_arg OptWithOids opt_freeze alter_table_cmd
468468%type <str> analyze_keyword opt_name_list ExplainStmt index_params
469- %type <str> index_elem opt_class access_method_clause
469+ %type <str> index_elem opt_class access_method_clause alter_table_cmds
470470%type <str> index_opt_unique IndexStmt func_return ConstInterval
471471%type <str> func_args_list func_args opt_with def_arg overlay_placing
472472%type <str> def_elem def_list definition DefineStmt select_with_parens
473473%type <str> opt_instead event RuleActionList opt_using CreateAssertStmt
474474%type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
475- %type <str> RuleStmt opt_column opt_name oper_argtypes NumConst
475+ %type <str> RuleStmt opt_column oper_argtypes NumConst
476476%type <str> MathOp RemoveFuncStmt aggr_argtype for_update_clause
477477%type <str> RemoveAggrStmt opt_procedural select_no_parens CreateCastStmt
478478%type <str> RemoveOperStmt RenameStmt all_Op opt_Trusted opt_lancompiler
@@ -1140,45 +1140,58 @@ CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); }
11401140 *****************************************************************************/
11411141
11421142AlterTableStmt :
1143+ ALTER TABLE relation_expr alter_table_cmds
1144+ {$$ = cat_str(3 , make_str(" alter table" ),$3 ,$4 ); }
1145+ ;
1146+
1147+ alter_table_cmds :
1148+ alter_table_cmd {$$ =$1 ; }
1149+ | alter_table_cmds ' ,' alter_table_cmd {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
1150+ ;
1151+
1152+ alter_table_cmd :
1153+ ADD opt_column columnDef
11431154/* ALTER TABLE <relation> ADD [COLUMN] <coldef>*/
1144- ALTER TABLE relation_expr ADD opt_column columnDef
1145- {$$ = cat_str(5 , make_str(" alter table" ),$3 , make_str(" add" ),$5 ,$6 ); }
1155+ {$$ = cat_str(3 , make_str(" add" ),$2 ,$3 ); }
11461156/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT}*/
1147- | ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default
1148- {$$ = cat_str(6 , make_str(" alter table " ),$3 , make_str( " alter " ), $5 ,$6 , $7 ); }
1157+ | ALTER opt_column ColId alter_column_default
1158+ {$$ = cat_str(4 , make_str(" alter" ),$2 , $3 ,$4 ); }
11491159/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL*/
1150- | ALTER TABLE relation_expr ALTER opt_column ColId DROP NOT NULL_P
1151- {$$ = cat_str(6 , make_str(" alter table " ),$3 , make_str( " alter " ), $5 , $6 , make_str(" drop not null" )); }
1160+ | ALTER opt_column ColId DROP NOT NULL_P
1161+ {$$ = cat_str(4 , make_str(" alter" ),$2 , $3 , make_str(" drop not null" )); }
11521162/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL*/
1153- | ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
1154- {$$ = cat_str(6 , make_str(" alter table " ),$3 , make_str( " alter " ), $5 , $6 , make_str(" set not null" )); }
1163+ | ALTER opt_column ColId SET NOT NULL_P
1164+ {$$ = cat_str(4 , make_str(" alter" ),$2 , $3 , make_str(" set not null" )); }
11551165/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <IntegerOnly>*/
1156- | ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS PosIntConst
1157- {$$ = cat_str(7 , make_str(" alter table " ),$3 , make_str( " alter " ), $5 , $6 , make_str(" set statistics" ),$9 ); }
1166+ | ALTER opt_column ColId SET STATISTICS PosIntConst
1167+ {$$ = cat_str(5 , make_str(" alter" ),$2 , $3 , make_str(" set statistics" ),$6 ); }
11581168/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode>*/
1159- | ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
1160- {$$ = cat_str(7 , make_str(" alter table " ),$3 , make_str( " alter " ), $5 , $6 , make_str(" set storage" ),$9 ); }
1169+ | ALTER opt_column ColId SET STORAGE ColId
1170+ {$$ = cat_str(5 , make_str(" alter" ),$2 , $3 , make_str(" set storage" ),$6 ); }
11611171/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE}*/
1162- | ALTER TABLE relation_expr DROP opt_column ColId opt_drop_behavior
1163- {$$ = cat_str(6 , make_str(" alter table" ),$3 , make_str(" drop" ),$5 ,$6 ,$7 ); }
1172+ | DROP opt_column ColId opt_drop_behavior
1173+ {$$ = cat_str(4 , make_str(" drop" ),$2 ,$3 ,$4 ); }
1174+ /* ALTER TABLE <relation> ALTER [COLUMN] <colname> TYPE <typename> [ USING <expression> ]*/
1175+ | ALTER opt_column ColId TYPE_P Typename alter_using
1176+ {$$ = cat_str(6 , make_str(" alter" ),$2 ,$3 , make_str(" type" ),$5 ,$6 ); }
11641177/* ALTER TABLE <relation> ADD CONSTRAINT ...*/
1165- | ALTER TABLE relation_expr ADD TableConstraint
1166- {$$ = cat_str(4 , make_str(" alter table " ), $3 , make_str( " add" ),$5 ); }
1178+ | ADD TableConstraint
1179+ {$$ = cat_str(2 , make_str(" add" ),$2 ); }
11671180/* ALTER TABLE <relation> DROP CONSTRAINT ...*/
1168- | ALTER TABLE relation_expr DROP CONSTRAINT name opt_drop_behavior
1169- {$$ = cat_str(5 , make_str( " alter table " ), $ 3 , make_str(" drop constraint" ),$6 ,$7 ); }
1181+ | DROP CONSTRAINT name opt_drop_behavior
1182+ {$$ = cat_str(3 , make_str(" drop constraint" ),$3 ,$4 ); }
11701183/* ALTER TABLE <relation> SET WITHOUT OIDS*/
1171- | ALTER TABLE relation_expr SET WITHOUT OIDS
1172- {$$ =cat_str( 3 , make_str(" alter table " ), $3 , make_str( " set without oids" ) ); }
1184+ | SET WITHOUT OIDS
1185+ {$$ = make_str(" set without oids" ); }
11731186/* ALTER TABLE <name> CREATE TOAST TABLE*/
1174- | ALTER TABLE qualified_name CREATE TOAST TABLE
1175- {$$ =cat_str( 3 , make_str(" alter table " ), $3 , make_str( " create toast table" ) ); }
1187+ | CREATE TOAST TABLE
1188+ {$$ = make_str(" create toast table" ); }
11761189/* ALTER TABLE <name> OWNER TO UserId*/
1177- | ALTER TABLE qualified_name OWNER TO UserId
1178- {$$ = cat_str(4 , make_str(" alter table " ), $3 , make_str( " owner to" ),$6 ); }
1190+ | OWNER TO UserId
1191+ {$$ = cat_str(2 , make_str(" owner to" ),$3 ); }
11791192/* ALTER TABLE <name> CLUSTER ON <indexname>*/
1180- | ALTER TABLE qualified_name CLUSTER ON name
1181- {$$ = cat_str(4 , make_str(" alter table " ), $3 , make_str( " cluster on" ),$6 ); }
1193+ | CLUSTER ON name
1194+ {$$ = cat_str(2 , make_str(" cluster on" ),$3 ); }
11821195;
11831196
11841197alter_column_default :
@@ -1191,6 +1204,10 @@ opt_drop_behavior: CASCADE { $$ = make_str("cascade"); }
11911204| /* EMPTY*/ {$$ = EMPTY; }
11921205;
11931206
1207+ alter_using :USING a_expr {$$ = cat2_str(make_str(" using" ),$2 ); }
1208+ | /* EMPTY*/ {$$ = EMPTY; }
1209+ ;
1210+
11941211/* ****************************************************************************
11951212 *
11961213 *QUERY :
@@ -2310,18 +2327,16 @@ RenameStmt: ALTER AGGREGATE func_name '(' aggr_argtype ')' RENAME TO name
23102327{$$ = cat_str(6 , make_str(" alter operator class" ),$4 , make_str(" using" ),$6 , make_str(" rename to" ),$9 ); }
23112328| ALTER SCHEMA name RENAME TO name
23122329{$$ = cat_str(4 , make_str(" alter schema" ),$3 , make_str(" rename to" ),$6 ); }
2313- | ALTER TABLE relation_expr RENAME opt_column opt_name TO name
2330+ | ALTER TABLE relation_expr RENAME TO name
2331+ {$$ = cat_str(4 , make_str(" alter table" ),$3 , make_str(" rename to" ),$6 ); }
2332+ | ALTER TABLE relation_expr RENAME opt_column name TO name
23142333{$$ = cat_str(7 , make_str(" alter table" ),$3 , make_str(" rename" ),$5 ,$6 , make_str(" to" ),$8 ); }
23152334| ALTER TRIGGER name ON relation_expr RENAME TO name
23162335{$$ = cat_str(6 , make_str(" alter trigger" ),$3 , make_str(" on" ),$5 , make_str(" rename to" ),$8 ); }
23172336| ALTER USER UserId RENAME TO UserId
23182337{$$ = cat_str(4 , make_str(" alter user" ),$3 , make_str(" rename to" ),$6 ); }
23192338;
23202339
2321- opt_name :name {$$ =$1 ; }
2322- | /* EMPTY*/ {$$ = EMPTY; }
2323- ;
2324-
23252340opt_column :COLUMN {$$ = make_str(" column" ); }
23262341| /* EMPTY*/ {$$ = EMPTY; }
23272342;