Changeset: 05c641b3abb4 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05c641b3abb4 Added Files: sql/test/merge-partitions/Tests/mergepart18.sql sql/test/merge-partitions/Tests/mergepart18.stable.err sql/test/merge-partitions/Tests/mergepart18.stable.out sql/test/merge-partitions/Tests/mergepart19.sql sql/test/merge-partitions/Tests/mergepart19.stable.err sql/test/merge-partitions/Tests/mergepart19.stable.out Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 monetdb5/modules/mal/wlc.mal sql/backends/monet5/sql_cat.c sql/backends/monet5/sqlcatalog.mal sql/backends/monet5/wlr.mal sql/include/sql_catalog.h sql/server/rel_schema.c sql/server/sql_parser.y sql/storage/sql_catalog.c sql/storage/sql_storage.h sql/storage/store.c sql/test/merge-partitions/Tests/All Branch: merge-partitions Log Message:
Implemented partition range/list of values update. The grammar is the follows: ALTER TABLE parent SET TABLE child AS PARTITION ... Also fixed a bug in the partition by range, where previously the partitions list was kept in order, but the transaction manager wouldn't recognize new partitions if they were not appended at the end of the list. The list is no longer ordered so the transaction manager will always recognize properly. diffs (truncated from 1222 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -10951,9 +10951,10 @@ Ready. [ "sqlblob", "#tostr", "command sqlblob.#tostr():void ", "SQLBLOBtostr;", "" ] [ "sqlblob", "sqlblob", "command sqlblob.sqlblob(s:sqlblob):sqlblob ", "BLOBblob_blob;", "Noop routine." ] [ "sqlblob", "sqlblob", "command sqlblob.sqlblob(s:str):sqlblob ", "BLOBsqlblob_fromstr;", "" ] -[ "sqlcatalog", "alter_add_range_partition", "pattern sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "SQLalter_add_range_partition;", "Catalog operation alter_add_range_partition" ] +[ "sqlcatalog", "alter_add_range_partition", "pattern sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "SQLalter_add_range_partition;", "Catalog operation alter_add_range_partition" ] [ "sqlcatalog", "alter_add_table", "pattern sqlcatalog.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "SQLalter_add_table;", "Catalog operation alter_add_table" ] -[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] +[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] +[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] [ "sqlcatalog", "alter_del_table", "pattern sqlcatalog.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "SQLalter_del_table;", "Catalog operation alter_del_table" ] [ "sqlcatalog", "alter_seq", "pattern sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:lng):void ", "SQLalter_seq;", "Catalog operation alter_seq" ] [ "sqlcatalog", "alter_set_table", "pattern sqlcatalog.alter_set_table(sname:str, tnme:str, access:int):void ", "SQLalter_set_table;", "Catalog operation alter_set_table" ] @@ -11174,9 +11175,10 @@ Ready. [ "wkba", "#tostr", "command wkba.#tostr():void ", "wkbaTOSTR;", "" ] [ "wkba", "#write", "command wkba.#write():void ", "wkbaWRITE;", "" ] [ "wlc", "action", "pattern wlc.action(q:str):void ", "WLCaction;", "Keep the database changing queries for replay. " ] -[ "wlc", "alter_add_range_partition", "pattern wlc.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "WLCgeneric;", "Catalog operation alter_add_range_partition" ] +[ "wlc", "alter_add_range_partition", "pattern wlc.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "WLCgeneric;", "Catalog operation alter_add_range_partition" ] [ "wlc", "alter_add_table", "pattern wlc.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;", "Catalog operation alter_add_table" ] -[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] [ "wlc", "alter_del_table", "pattern wlc.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;", "Catalog operation alter_del_table" ] [ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str, val:lng):void ", "WLCgeneric;", "Catalog operation alter_seq" ] [ "wlc", "alter_set_table", "pattern wlc.alter_set_table(sname:str, tnme:str, access:int):void ", "WLCgeneric;", "Catalog operation alter_set_table" ] @@ -11235,9 +11237,10 @@ Ready. [ "wlc", "transaction_rollback", "pattern wlc.transaction_rollback(chain:int, name:str):void ", "WLCgeneric;", "A transaction statement (type can be commit,release,rollback or start)" ] [ "wlc", "update", "pattern wlc.update(sname:str, tname:str, cname:str, tid:any, val:any):int ", "WLCupdate;", "Keep the update in the workload-capture-replay list" ] [ "wlr", "action", "pattern wlr.action(q:str):void ", "WLRaction;", "A query producing updates" ] -[ "wlr", "alter_add_range_partition", "pattern wlr.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "WLRgeneric;", "Catalog operation alter_add_range_partition" ] +[ "wlr", "alter_add_range_partition", "pattern wlr.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "WLRgeneric;", "Catalog operation alter_add_range_partition" ] [ "wlr", "alter_add_table", "pattern wlr.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;", "Catalog operation alter_add_table" ] -[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] [ "wlr", "alter_del_table", "pattern wlr.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;", "Catalog operation alter_del_table" ] [ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str, val:lng):void ", "WLRgeneric;", "Catalog operation alter_seq" ] [ "wlr", "alter_set_table", "pattern wlr.alter_set_table(sname:str, tnme:str, access:int):void ", "WLRgeneric;", "Catalog operation alter_set_table" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -15164,9 +15164,10 @@ Ready. [ "sqlblob", "#tostr", "command sqlblob.#tostr():void ", "SQLBLOBtostr;", "" ] [ "sqlblob", "sqlblob", "command sqlblob.sqlblob(s:sqlblob):sqlblob ", "BLOBblob_blob;", "Noop routine." ] [ "sqlblob", "sqlblob", "command sqlblob.sqlblob(s:str):sqlblob ", "BLOBsqlblob_fromstr;", "" ] -[ "sqlcatalog", "alter_add_range_partition", "pattern sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "SQLalter_add_range_partition;", "Catalog operation alter_add_range_partition" ] +[ "sqlcatalog", "alter_add_range_partition", "pattern sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "SQLalter_add_range_partition;", "Catalog operation alter_add_range_partition" ] [ "sqlcatalog", "alter_add_table", "pattern sqlcatalog.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "SQLalter_add_table;", "Catalog operation alter_add_table" ] -[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] +[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] +[ "sqlcatalog", "alter_add_value_partition", "pattern sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "SQLalter_add_value_partition;", "Catalog operation alter_add_value_partition" ] [ "sqlcatalog", "alter_del_table", "pattern sqlcatalog.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "SQLalter_del_table;", "Catalog operation alter_del_table" ] [ "sqlcatalog", "alter_seq", "pattern sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:lng):void ", "SQLalter_seq;", "Catalog operation alter_seq" ] [ "sqlcatalog", "alter_set_table", "pattern sqlcatalog.alter_set_table(sname:str, tnme:str, access:int):void ", "SQLalter_set_table;", "Catalog operation alter_set_table" ] @@ -15388,9 +15389,10 @@ Ready. [ "wkba", "#tostr", "command wkba.#tostr():void ", "wkbaTOSTR;", "" ] [ "wkba", "#write", "command wkba.#write():void ", "wkbaWRITE;", "" ] [ "wlc", "action", "pattern wlc.action(q:str):void ", "WLCaction;", "Keep the database changing queries for replay. " ] -[ "wlc", "alter_add_range_partition", "pattern wlc.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "WLCgeneric;", "Catalog operation alter_add_range_partition" ] +[ "wlc", "alter_add_range_partition", "pattern wlc.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "WLCgeneric;", "Catalog operation alter_add_range_partition" ] [ "wlc", "alter_add_table", "pattern wlc.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;", "Catalog operation alter_add_table" ] -[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlc", "alter_add_value_partition", "pattern wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "WLCgeneric;", "Catalog operation alter_add_value_partition" ] [ "wlc", "alter_del_table", "pattern wlc.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;", "Catalog operation alter_del_table" ] [ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str, val:lng):void ", "WLCgeneric;", "Catalog operation alter_seq" ] [ "wlc", "alter_set_table", "pattern wlc.alter_set_table(sname:str, tnme:str, access:int):void ", "WLCgeneric;", "Catalog operation alter_set_table" ] @@ -15449,9 +15451,10 @@ Ready. [ "wlc", "transaction_rollback", "pattern wlc.transaction_rollback(chain:int, name:str):void ", "WLCgeneric;", "A transaction statement (type can be commit,release,rollback or start)" ] [ "wlc", "update", "pattern wlc.update(sname:str, tname:str, cname:str, tid:any, val:any):int ", "WLCupdate;", "Keep the update in the workload-capture-replay list" ] [ "wlr", "action", "pattern wlr.action(q:str):void ", "WLRaction;", "A query producing updates" ] -[ "wlr", "alter_add_range_partition", "pattern wlr.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int):void ", "WLRgeneric;", "Catalog operation alter_add_range_partition" ] +[ "wlr", "alter_add_range_partition", "pattern wlr.alter_add_range_partition(sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int):void ", "WLRgeneric;", "Catalog operation alter_add_range_partition" ] [ "wlr", "alter_add_table", "pattern wlr.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;", "Catalog operation alter_add_table" ] -[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, arg:str...):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] +[ "wlr", "alter_add_value_partition", "pattern wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...):void ", "WLRgeneric;", "Catalog operation alter_add_value_partition" ] [ "wlr", "alter_del_table", "pattern wlr.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;", "Catalog operation alter_del_table" ] [ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str, val:lng):void ", "WLRgeneric;", "Catalog operation alter_seq" ] [ "wlr", "alter_set_table", "pattern wlr.alter_set_table(sname:str, tnme:str, access:int):void ", "WLRgeneric;", "Catalog operation alter_set_table" ] 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 @@ -222,7 +222,7 @@ pattern alter_set_table( sname:str, tnme address WLCgeneric comment "Catalog operation alter_set_table"; -pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int) +pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int) address WLCgeneric comment "Catalog operation alter_add_range_partition"; @@ -246,10 +246,10 @@ unsafe pattern transaction() address WLCgeneric comment "Start an autocommit transaction"; -pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int) +pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int) address WLCgeneric comment "Catalog operation alter_add_value_partition"; -pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, arg:str...) +pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...) address WLCgeneric comment "Catalog operation alter_add_value_partition"; 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 @@ -105,7 +105,8 @@ rel_check_tables(sql_table *nt, sql_tabl } static char* -validate_alter_table_add_table(mvc *sql, char* call, char *msname, char *mtname, char *psname, char *ptname, sql_table **mt, sql_table **pt) +validate_alter_table_add_table(mvc *sql, char* call, char *msname, char *mtname, char *psname, char *ptname, + sql_table **mt, sql_table **pt, int update) { sql_schema *ms = mvc_bind_schema(sql, msname), *ps = mvc_bind_schema(sql, psname); sql_table *rmt = NULL, *rpt = NULL; @@ -116,14 +117,16 @@ validate_alter_table_add_table(mvc *sql, rpt = mvc_bind_table(sql, ps, ptname); *mt = rmt; *pt = rpt; - if (rmt && (!isMergeTable(rmt) && !isReplicaTable(rmt))) + if (!update && rmt && (!isMergeTable(rmt) && !isReplicaTable(rmt))) throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: cannot add table '%s.%s' to table '%s.%s'", psname, ptname, msname, mtname); if (rmt && rpt) { char *msg; node *n = cs_find_id(&rmt->members, rpt->base.id); - if (n) + if (n && !update) throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table '%s.%s' is already part of the MERGE TABLE '%s.%s'", psname, ptname, msname, mtname); + if(!n && update) + throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table '%s.%s' isn't part of the MERGE TABLE '%s.%s'", psname, ptname, msname, mtname); if ((msg = rel_check_tables(rmt, rpt)) != NULL) return msg; return MAL_SUCCEED; @@ -138,7 +141,7 @@ static char * alter_table_add_table(mvc *sql, char *msname, char *mtname, char *psname, char *ptname) { sql_table *mt = NULL, *pt = NULL; - str msg = validate_alter_table_add_table(sql, "sql.alter_table_add_table", msname, mtname, psname, ptname, &mt, &pt); + str msg = validate_alter_table_add_table(sql, "sql.alter_table_add_table", msname, mtname, psname, ptname, &mt, &pt, 0); if(msg == MAL_SUCCEED) sql_trans_add_table(sql->session->tr, mt, pt); @@ -180,7 +183,8 @@ add_quotes(char *atom_str) /* always pro } static char * -alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char *psname, char *ptname, char *min, char *max, int with_nills) +alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char *psname, char *ptname, char *min, char *max, + int with_nills, int update) { sql_table *mt = NULL, *pt = NULL; sql_part *err = NULL; @@ -192,14 +196,14 @@ alter_table_add_range_partition(mvc *sql ssize_t (*atomtostr)(str *, size_t *, const void *); int free_pmin = 1, free_pmax = 1; - if((msg = validate_alter_table_add_table(sql, "sql.alter_table_add_range_partition", msname, mtname, psname, ptname, &mt, &pt))) { + if((msg = validate_alter_table_add_table(sql, "sql.alter_table_add_range_partition", msname, mtname, psname, ptname, &mt, &pt, update))) { return msg; } else if(mt->type != tt_range_partition) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: cannot add range partition into a %s table", (mt->type == tt_merge_table)?"merge":"list partition"); goto finish; - } else if(pt->p) { + } else if(!update && pt->p) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: table %s.%s is already part of another range partition table", psname, ptname); @@ -271,7 +275,7 @@ alter_table_add_range_partition(mvc *sql free_pmax = 0; } - errcode = sql_trans_add_range_partition(sql->session->tr, mt, pt, col->type, pmin, smin, pmax, smax, with_nills, &err); + errcode = sql_trans_add_range_partition(sql->session->tr, mt, pt, col->type, pmin, smin, pmax, smax, with_nills, update, &err); switch(errcode) { case 0: break; @@ -327,7 +331,8 @@ finish: } static char * -alter_table_add_value_partition(mvc *sql, MalStkPtr stk, InstrPtr pci, char *msname, char *mtname, char *psname, char *ptname, int with_nills) +alter_table_add_value_partition(mvc *sql, MalStkPtr stk, InstrPtr pci, char *msname, char *mtname, char *psname, + char *ptname, int with_nills, int update) { sql_table *mt = NULL, *pt = NULL; str msg = MAL_SUCCEED, escaped = NULL; @@ -336,14 +341,14 @@ alter_table_add_value_partition(mvc *sql int tp1 = 0, errcode = 0, i = 0, ninserts = 0; list *values = list_new(sql->sa, (fdestroy) NULL); - if((msg = validate_alter_table_add_table(sql, "sql.alter_table_add_value_partition", msname, mtname, psname, ptname, &mt, &pt))) { + if((msg = validate_alter_table_add_table(sql, "sql.alter_table_add_value_partition", msname, mtname, psname, ptname, &mt, &pt, update))) { return msg; } else if(mt->type != tt_list_partition) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) "ALTER TABLE: cannot add value partition into a %s table", (mt->type == tt_merge_table)?"merge":"range partition"); goto finish; - } else if(pt->p) { + } else if(!update && pt->p) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) "ALTER TABLE: table %s.%s is already part of another list partition table", psname, ptname); @@ -352,12 +357,12 @@ alter_table_add_value_partition(mvc *sql col = mt->pcol; tp1 = col->type.type->localtype; - ninserts = pci->argc - pci->retc - 5; + ninserts = pci->argc - pci->retc - 6; if(ninserts <= 0 && !with_nills) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) "ALTER TABLE: no values in the list"); goto finish; } - for( i = pci->retc+5; i < pci->argc; i++){ + for( i = pci->retc+6; i < pci->argc; i++){ ptr pnext = NULL; size_t len = 0; str next = *getArgReference_str(stk, pci, i); @@ -409,7 +414,7 @@ alter_table_add_value_partition(mvc *sql GDKfree(pnext); } - errcode = sql_trans_add_value_partition(sql->session->tr, mt, pt, col->type, values, with_nills, &err); + errcode = sql_trans_add_value_partition(sql->session->tr, mt, pt, col->type, values, with_nills, update, &err); switch(errcode) { case 0: break; @@ -1527,9 +1532,10 @@ SQLalter_add_range_partition(Client cntx char *min = *getArgReference_str(stk, pci, 5); char *max = *getArgReference_str(stk, pci, 6); int with_nills = *getArgReference_int(stk, pci, 7); + int update = *getArgReference_int(stk, pci, 8); initcontext(); - msg = alter_table_add_range_partition(sql, sname, mtname, psname, ptname, min, max, with_nills); + msg = alter_table_add_range_partition(sql, sname, mtname, psname, ptname, min, max, with_nills, update); return msg; } @@ -1542,9 +1548,10 @@ SQLalter_add_value_partition(Client cntx char *psname = SaveArgReference(stk, pci, 3); char *ptname = SaveArgReference(stk, pci, 4); int with_nills = *getArgReference_int(stk, pci, 5); + int update = *getArgReference_int(stk, pci, 6); initcontext(); - msg = alter_table_add_value_partition(sql, stk, pci, sname, mtname, psname, ptname, with_nills); + msg = alter_table_add_value_partition(sql, stk, pci, sname, mtname, psname, ptname, with_nills, update); return msg; } 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 @@ -147,15 +147,15 @@ pattern alter_set_table( sname:str, tnme address SQLalter_set_table comment "Catalog operation alter_set_table"; -pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int) +pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int) address SQLalter_add_range_partition comment "Catalog operation alter_add_range_partition"; -pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int) +pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int) address SQLalter_add_value_partition comment "Catalog operation alter_add_value_partition"; -pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, arg:str...) +pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int, update:int, arg:str...) address SQLalter_add_value_partition comment "Catalog operation alter_add_value_partition"; diff --git a/sql/backends/monet5/wlr.mal b/sql/backends/monet5/wlr.mal --- a/sql/backends/monet5/wlr.mal +++ b/sql/backends/monet5/wlr.mal @@ -227,7 +227,7 @@ pattern alter_set_table( sname:str, tnme address WLRgeneric comment "Catalog operation alter_set_table"; -pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int) +pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int, update:int) address WLRgeneric comment "Catalog operation alter_add_range_partition"; @@ -251,10 +251,10 @@ unsafe pattern transaction() address WLRgeneric comment "Start an autocommit transaction"; -pattern alter_add_value_partition( sname:str, mtnme:str, psnme:str, ptnme:str, nills:int) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list