Changeset: f40a81af1dc5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f40a81af1dc5 Modified Files: clients/mapiclient/mhelp.c monetdb5/modules/mal/wlc.mal sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sqlcatalog.mal sql/backends/monet5/wlr.mal sql/include/sql_relation.h sql/server/rel_schema.c sql/server/sql_parser.y sql/test/pg_regress/Tests/alter_table.stable.err sql/test/pg_regress/Tests/float8.stable.err.int128 sql/test/pg_regress/Tests/insert.stable.err Branch: sqlextra Log Message:
Cleaned IF [NOT] EXISTS clauses handling in the server. Also added IF EXISTS clause for CREATE VIEWS diffs (truncated from 708 to 300 lines): diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -214,7 +214,8 @@ SQLhelp sqlhelp[] = { NULL}, {"CREATE VIEW", "", - "CREATE VIEW qname [ column_list ] AS { query_expression | '(' query_expression ') } [ WITH CHECK OPTION ]", + "CREATE VIEW [ IF NOT EXISTS ] qname [ column_list ] AS { query_expression | '(' query_expression ') }\n" + "[ WITH CHECK OPTION ]", "column_list,query_expression", NULL}, {"CURRENT_DATE", diff --git a/monetdb5/modules/mal/wlc.mal b/monetdb5/modules/mal/wlc.mal --- a/monetdb5/modules/mal/wlc.mal +++ b/monetdb5/modules/mal/wlc.mal @@ -95,15 +95,11 @@ pattern drop_seq( sname:str, nme:str, ac address WLCgeneric comment "Catalog operation drop_seq"; -pattern create_schema(sname:str, auth:str, action:int) +pattern create_schema(sname:str, auth:str, ifnotexists:int, action:int) address WLCgeneric comment "Catalog operation create_schema"; -pattern drop_schema( sname:str, s:str, action:int, ifexists:int) -address WLCgeneric -comment "Catalog operation drop_schema"; - -pattern drop_schema( sname:str, s:str, action:int) +pattern drop_schema( sname:str, s:str, ifexists:int, action:int) address WLCgeneric comment "Catalog operation drop_schema"; @@ -115,11 +111,7 @@ pattern create_view(sname:str, tname:str address WLCgeneric comment "Catalog operation create_view"; -pattern drop_table( sname:str, name:str, action:int , ifexists:int) -address WLCgeneric -comment "Catalog operation drop_table"; - -pattern drop_table( sname:str, name:str, action:int ) +pattern drop_table( sname:str, name:str, action:int, ifexists:int) address WLCgeneric comment "Catalog operation drop_table"; @@ -127,11 +119,7 @@ pattern drop_view( sname:str, name:str, address WLCgeneric comment "Catalog operation drop_view"; -pattern drop_view( sname:str, name:str, action:int) -address WLCgeneric -comment "Catalog operation drop_view"; - -pattern drop_constraint( sname:str, name:str, action:int) +pattern drop_constraint( sname:str, name:str, action:int, ifexists:int) address WLCgeneric comment "Catalog operation drop_constraint"; diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -4726,7 +4726,7 @@ rel2bin_catalog(backend *be, sql_rel *re mvc *sql = be->mvc; node *en = rel->exps->h; stmt *action = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); - stmt *sname = NULL, *name = NULL; + stmt *sname = NULL, *name = NULL, *ifexists = NULL; list *l = sa_list(sql->sa); (void)refs; @@ -4737,8 +4737,14 @@ rel2bin_catalog(backend *be, sql_rel *re } else { name = stmt_atom_string_nil(be); } + if (en->next && en->next->next) { + ifexists = exp_bin(be, en->next->next->data, NULL, NULL, NULL, NULL, NULL, NULL); + } else { + ifexists = stmt_atom_int(be, 0); + } append(l, sname); append(l, name); + append(l, ifexists); append(l, action); return stmt_catalog(be, rel->flag, stmt_list(be, l)); } @@ -4749,7 +4755,7 @@ rel2bin_catalog_table(backend *be, sql_r mvc *sql = be->mvc; node *en = rel->exps->h; stmt *action = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); - stmt *table = NULL, *sname, *tname = NULL; + stmt *table = NULL, *sname, *tname = NULL, *ifexists = NULL; list *l = sa_list(sql->sa); (void)refs; @@ -4760,13 +4766,22 @@ rel2bin_catalog_table(backend *be, sql_r tname = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); en = en->next; } - if (en) - table = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); append(l, sname); assert(tname); append(l, tname); - if (rel->flag != DDL_DROP_TABLE && rel->flag != DDL_DROP_TABLE_IF_EXISTS && rel->flag != DDL_DROP_VIEW && rel->flag != DDL_DROP_VIEW_IF_EXISTS && rel->flag != DDL_DROP_CONSTRAINT) + if (rel->flag != DDL_DROP_TABLE && rel->flag != DDL_DROP_VIEW && rel->flag != DDL_DROP_CONSTRAINT) { + if (en) { + table = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); + } append(l, table); + } else { + if (en) { + ifexists = exp_bin(be, en->data, NULL, NULL, NULL, NULL, NULL, NULL); + } else { + ifexists = stmt_atom_int(be, 0); + } + append(l, ifexists); + } append(l, action); return stmt_catalog(be, rel->flag, stmt_list(be, l)); } diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -812,7 +812,7 @@ str SQLcreate_schema(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str name = SaveArgReference(stk, pci, 2); int auth_id; @@ -837,14 +837,11 @@ SQLdrop_schema(Client cntxt, MalBlkPtr m { mvc *sql = NULL; str msg= MAL_SUCCEED; str sname = *getArgReference_str(stk, pci, 1); - str notused = *getArgReference_str(stk, pci, 2); - int action = *getArgReference_int(stk, pci, 3); - int if_exists = 0; // should become an argument + str notused = *getArgReference_str(stk, pci, 2); + int if_exists = *getArgReference_int(stk, pci, 3); + int action = *getArgReference_int(stk, pci, 4); sql_schema *s; - if( pci->argc > 4) - if_exists = *getArgReference_int(stk, pci, 4); - (void) notused; initcontext(); s = mvc_bind_schema(sql, sname); @@ -869,7 +866,7 @@ str SQLcreate_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str tname = *getArgReference_str(stk, pci, 2); sql_table *t = *(sql_table **) getArgReference(stk, pci, 3); int temp = *getArgReference_int(stk, pci, 4); @@ -883,7 +880,7 @@ str SQLcreate_view(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str vname = *getArgReference_str(stk, pci, 2); sql_table *t = *(sql_table **) getArgReference(stk, pci, 3); int temp = *getArgReference_int(stk, pci, 4); @@ -897,15 +894,12 @@ str SQLdrop_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str name = *getArgReference_str(stk, pci, 2); - int action = *getArgReference_int(stk, pci, 3); - int if_exists = 0; // should become an argument + int if_exists = *getArgReference_int(stk, pci, 3); + int action = *getArgReference_int(stk, pci, 4); initcontext(); - if( pci->argc > 4) - if_exists = *getArgReference_int(stk, pci, 4); - msg = drop_table(sql, sname, name, action, if_exists); return msg; } @@ -914,15 +908,12 @@ str SQLdrop_view(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str name = *getArgReference_str(stk, pci, 2); - int action = *getArgReference_int(stk, pci, 3); - int if_exists = 0; // should become an argument + int if_exists = *getArgReference_int(stk, pci, 3); + int action = *getArgReference_int(stk, pci, 4); initcontext(); - if( pci->argc > 4) - if_exists = *getArgReference_int(stk, pci, 4); - msg = drop_view(sql, sname, name, action, if_exists); return msg; } @@ -931,13 +922,13 @@ str SQLdrop_constraint(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { mvc *sql = NULL; str msg; - str sname = *getArgReference_str(stk, pci, 1); + str sname = *getArgReference_str(stk, pci, 1); str name = *getArgReference_str(stk, pci, 2); - int action = *getArgReference_int(stk, pci, 3); + int action = *getArgReference_int(stk, pci, 4); + (void) *getArgReference_int(stk, pci, 3); //the if_exists parameter is also passed but not used initcontext(); msg = drop_key(sql, sname, name, action); - return msg; } diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -2119,7 +2119,6 @@ stmt_catalog(backend *be, int type, stmt MalBlkPtr mb = be->mb; InstrPtr q = NULL; node *n; - int if_exists =0; if (args->nr < 0) return NULL; @@ -2130,16 +2129,10 @@ stmt_catalog(backend *be, int type, stmt case DDL_ALTER_SEQ: q = newStmt(mb, sqlcatalogRef, alter_seqRef); break; case DDL_DROP_SEQ: q = newStmt(mb, sqlcatalogRef, drop_seqRef); break; case DDL_CREATE_SCHEMA: q = newStmt(mb, sqlcatalogRef, create_schemaRef); break; - case DDL_DROP_SCHEMA_IF_EXISTS: if_exists =1; - /* fall through */ case DDL_DROP_SCHEMA: q = newStmt(mb, sqlcatalogRef, drop_schemaRef); break; case DDL_CREATE_TABLE: q = newStmt(mb, sqlcatalogRef, create_tableRef); break; case DDL_CREATE_VIEW: q = newStmt(mb, sqlcatalogRef, create_viewRef); break; - case DDL_DROP_TABLE_IF_EXISTS: if_exists =1; - /* fall through */ case DDL_DROP_TABLE: q = newStmt(mb, sqlcatalogRef, drop_tableRef); break; - case DDL_DROP_VIEW_IF_EXISTS: if_exists = 1; - /* fall through */ case DDL_DROP_VIEW: q = newStmt(mb, sqlcatalogRef, drop_viewRef); break; case DDL_DROP_CONSTRAINT: q = newStmt(mb, sqlcatalogRef, drop_constraintRef); break; case DDL_ALTER_TABLE: q = newStmt(mb, sqlcatalogRef, alter_tableRef); break; @@ -2176,9 +2169,6 @@ stmt_catalog(backend *be, int type, stmt } if (q) { stmt *s = stmt_create(be->mvc->sa, st_catalog); - - if( if_exists) - pushInt(mb,q,1); s->op1 = args; s->flag = type; s->q = q; diff --git a/sql/backends/monet5/sqlcatalog.mal b/sql/backends/monet5/sqlcatalog.mal --- a/sql/backends/monet5/sqlcatalog.mal +++ b/sql/backends/monet5/sqlcatalog.mal @@ -4,7 +4,7 @@ # # Copyright 1997 - July 2008 CWI, August 2008 - 2017 MonetDB B.V. -# All functions eturn a void and this are unsafe, having side effects. +# All functions return a void and this are unsafe, having side effects. module sqlcatalog; pattern create_seq( sname:str, seqname:str, seq:ptr, action:int) @@ -19,15 +19,11 @@ pattern drop_seq( sname:str, nme:str, ac address SQLdrop_seq comment "Catalog operation drop_seq"; -pattern create_schema(sname:str, auth:str, action:int) +pattern create_schema(sname:str, auth:str, ifnotexists:int, action:int) address SQLcreate_schema comment "Catalog operation create_schema"; -pattern drop_schema( sname:str, s:str, action:int, ifexists:int) -address SQLdrop_schema -comment "Catalog operation drop_schema"; - -pattern drop_schema( sname:str, s:str, action:int) +pattern drop_schema( sname:str, s:str, ifexists:int, action:int) address SQLdrop_schema comment "Catalog operation drop_schema"; @@ -39,23 +35,15 @@ pattern create_view(sname:str, vname:str address SQLcreate_view comment "Catalog operation create_view"; -pattern drop_table( sname:str, name:str, action:int , ifexists:int) -address SQLdrop_table -comment "Catalog operation drop_table"; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list