Changeset: 6b4d022af697 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b4d022af697
Added Files:
        sql/server/rel_propagate.c
        sql/server/rel_propagate.h
        sql/server/sql_partition.c
        sql/server/sql_partition.h
        sql/test/merge-partitions/Tests/All
        sql/test/merge-partitions/Tests/mergepart00.sql
        sql/test/merge-partitions/Tests/mergepart00.stable.err
        sql/test/merge-partitions/Tests/mergepart00.stable.out
        sql/test/merge-partitions/Tests/mergepart01.sql
        sql/test/merge-partitions/Tests/mergepart01.stable.err
        sql/test/merge-partitions/Tests/mergepart01.stable.out
        sql/test/merge-partitions/Tests/mergepart02.sql
        sql/test/merge-partitions/Tests/mergepart02.stable.err
        sql/test/merge-partitions/Tests/mergepart02.stable.out
        sql/test/merge-partitions/Tests/mergepart03.sql
        sql/test/merge-partitions/Tests/mergepart03.stable.err
        sql/test/merge-partitions/Tests/mergepart03.stable.out
        sql/test/merge-partitions/Tests/mergepart04.sql
        sql/test/merge-partitions/Tests/mergepart04.stable.err
        sql/test/merge-partitions/Tests/mergepart04.stable.out
        sql/test/merge-partitions/Tests/mergepart05.sql
        sql/test/merge-partitions/Tests/mergepart05.stable.err
        sql/test/merge-partitions/Tests/mergepart05.stable.out
        sql/test/merge-partitions/Tests/mergepart06.sql
        sql/test/merge-partitions/Tests/mergepart06.stable.err
        sql/test/merge-partitions/Tests/mergepart06.stable.out
        sql/test/merge-partitions/Tests/mergepart07.sql
        sql/test/merge-partitions/Tests/mergepart07.stable.err
        sql/test/merge-partitions/Tests/mergepart07.stable.out
        sql/test/merge-partitions/Tests/mergepart08.sql
        sql/test/merge-partitions/Tests/mergepart08.stable.err
        sql/test/merge-partitions/Tests/mergepart08.stable.out
        sql/test/merge-partitions/Tests/mergepart09.sql
        sql/test/merge-partitions/Tests/mergepart09.stable.err
        sql/test/merge-partitions/Tests/mergepart09.stable.out
        sql/test/merge-partitions/Tests/mergepart10.sql
        sql/test/merge-partitions/Tests/mergepart10.stable.err
        sql/test/merge-partitions/Tests/mergepart10.stable.out
        sql/test/merge-partitions/Tests/mergepart11.sql
        sql/test/merge-partitions/Tests/mergepart11.stable.err
        sql/test/merge-partitions/Tests/mergepart11.stable.out
        sql/test/merge-partitions/Tests/mergepart12.sql
        sql/test/merge-partitions/Tests/mergepart12.stable.err
        sql/test/merge-partitions/Tests/mergepart12.stable.out
        sql/test/merge-partitions/Tests/mergepart13.sql
        sql/test/merge-partitions/Tests/mergepart13.stable.err
        sql/test/merge-partitions/Tests/mergepart13.stable.out
        sql/test/merge-partitions/Tests/mergepart14.sql
        sql/test/merge-partitions/Tests/mergepart14.stable.err
        sql/test/merge-partitions/Tests/mergepart14.stable.out
        sql/test/merge-partitions/Tests/mergepart15.sql
        sql/test/merge-partitions/Tests/mergepart15.stable.err
        sql/test/merge-partitions/Tests/mergepart15.stable.out
        sql/test/merge-partitions/Tests/mergepart16.sql
        sql/test/merge-partitions/Tests/mergepart16.stable.err
        sql/test/merge-partitions/Tests/mergepart16.stable.out
        sql/test/merge-partitions/Tests/mergepart17.sql
        sql/test/merge-partitions/Tests/mergepart17.stable.err
        sql/test/merge-partitions/Tests/mergepart17.stable.out
        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
        sql/test/merge-partitions/Tests/mergepart20.sql
        sql/test/merge-partitions/Tests/mergepart20.stable.err
        sql/test/merge-partitions/Tests/mergepart20.stable.out
        sql/test/merge-partitions/Tests/mergepart21.sql
        sql/test/merge-partitions/Tests/mergepart21.stable.err
        sql/test/merge-partitions/Tests/mergepart21.stable.out
        sql/test/merge-partitions/Tests/mergepart22.sql
        sql/test/merge-partitions/Tests/mergepart22.stable.err
        sql/test/merge-partitions/Tests/mergepart22.stable.out
        sql/test/merge-partitions/Tests/mergepart23.py
        sql/test/merge-partitions/Tests/mergepart23.stable.err
        sql/test/merge-partitions/Tests/mergepart23.stable.out
        sql/test/merge-partitions/Tests/mergepart24.sql
        sql/test/merge-partitions/Tests/mergepart24.stable.err
        sql/test/merge-partitions/Tests/mergepart24.stable.out
        sql/test/merge-partitions/Tests/mergepart25.sql
        sql/test/merge-partitions/Tests/mergepart25.stable.err
        sql/test/merge-partitions/Tests/mergepart25.stable.out
        sql/test/merge-partitions/Tests/mergepart26.sql
        sql/test/merge-partitions/Tests/mergepart26.stable.err
        sql/test/merge-partitions/Tests/mergepart26.stable.out
        sql/test/merge-partitions/Tests/mergepart27.sql
        sql/test/merge-partitions/Tests/mergepart27.stable.err
        sql/test/merge-partitions/Tests/mergepart27.stable.out
        sql/test/merge-partitions/Tests/mergepart28.sql.in
        sql/test/merge-partitions/Tests/mergepart28.stable.err
        sql/test/merge-partitions/Tests/mergepart28.stable.out
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        clients/mapiclient/mhelp.c
        clients/mapiclient/msqldump.c
        clients/mapiclient/msqldump.h
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/mtime.h
        monetdb5/modules/mal/wlc.mal
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/mal_backend.c
        sql/backends/monet5/mal_backend.h
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_cat.h
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/sql_upgrades.c
        sql/backends/monet5/sqlcatalog.mal
        sql/backends/monet5/wlr.mal
        sql/common/sql_changeset.c
        sql/common/sql_list.c
        sql/common/sql_mem.c
        sql/include/sql_catalog.h
        sql/include/sql_list.h
        sql/include/sql_mem.h
        sql/include/sql_relation.h
        
sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.stable.out
        sql/jdbc/tests/Tests/Test_Dobjects.stable.out
        sql/rel.txt
        sql/scripts/51_sys_schema_extension.sql
        sql/server/Makefile.ag
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_prop.c
        sql/server/rel_prop.h
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_schema.c
        sql/server/rel_schema.h
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/rel_updates.c
        sql/server/rel_updates.h
        sql/server/sql_atom.c
        sql/server/sql_atom.h
        sql/server/sql_mvc.c
        sql/server/sql_parser.h
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_semantic.c
        sql/server/sql_semantic.h
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out
        
sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.stable.out
        
sql/test/BugTracker-2018/Tests/groupby_having_orderby_count.Bug-6624.stable.out
        sql/test/Tests/comment-dump.stable.out
        sql/test/UserDump/Tests/create.stable.out
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/mapi/Tests/php_monetdb.stable.out
        sql/test/testdb/Tests/testdb-dump.stable.out
Branch: default
Log Message:

Merge with merge-partitions branch.


diffs (truncated from 15290 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
@@ -10999,7 +10999,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:any_1, max:any_1, 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, 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:any...):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"     ]
@@ -11214,7 +11217,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, 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, 
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"     ]
@@ -11274,7 +11280,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, 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, 
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
@@ -15212,7 +15212,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:any_1, max:any_1, 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, 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:any...):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"     ]
@@ -15428,7 +15431,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, 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, 
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"     ]
@@ -15488,7 +15494,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, 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, 
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/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1999,7 +1999,9 @@ str affectedRowsRef;
 str aggrRef;
 str alarmRef;
 str algebraRef;
+str alter_add_range_partitionRef;
 str alter_add_tableRef;
+str alter_add_value_partitionRef;
 str alter_constraintRef;
 str alter_del_tableRef;
 str alter_functionRef;
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -813,9 +813,9 @@ dump_column_definition(Mapi mid, stream 
 }
 
 int
-describe_table(Mapi mid, const char *schema, const char *tname, stream 
*toConsole, int foreign)
+describe_table(Mapi mid, const char *schema, const char *tname, stream 
*toConsole, int foreign, bool databaseDump)
 {
-       int cnt;
+       int cnt, table_id = 0;
        MapiHdl hdl = NULL;
        char *query;
        char *view = NULL;
@@ -846,7 +846,7 @@ describe_table(Mapi mid, const char *sch
        query = malloc(maxquerylen);
        snprintf(query, maxquerylen,
                 "%s "
-                "SELECT t.name, t.query, t.type, c.remark "
+                "SELECT t.name, t.query, t.type, t.id, c.remark "
                 "FROM sys.schemas s, sys._tables t LEFT OUTER JOIN comments c 
ON t.id = c.id "
                 "WHERE s.name = '%s' AND "
                       "t.schema_id = s.id AND "
@@ -863,7 +863,8 @@ describe_table(Mapi mid, const char *sch
                if (view)
                        type = atoi(view);
                view = mapi_fetch_field(hdl, 1);
-               remark = mapi_fetch_field(hdl, 3);
+               table_id = atoi(mapi_fetch_field(hdl, 3));
+               remark = mapi_fetch_field(hdl, 4);
        }
        if (mapi_error(mid)) {
                view = NULL;
@@ -900,14 +901,34 @@ describe_table(Mapi mid, const char *sch
                mnstr_printf(toConsole, "%s\n", view);
                comment_on(toConsole, "VIEW", schema, tname, NULL, remark);
        } else {
+               if(!databaseDump) { //if it is not a database dump the table 
might depend on UDFs that must be dumped first
+                       assert(table_id);
+                       snprintf(query, maxquerylen,
+                                        "SELECT f.id, s.name, f.name "
+                                        "FROM sys.schemas s, "
+                                             "sys.functions f "
+                                        "WHERE s.id = f.schema_id AND "
+                                              "f.id IN (SELECT id FROM 
sys.dependencies WHERE depend_id = '%d')",
+                                        table_id);
+                       if ((hdl = mapi_query(mid, query)) == NULL || 
mapi_error(mid))
+                               goto bailout;
+                       while(mapi_fetch_row(hdl) != 0) {
+                               const char* function_id = mapi_fetch_field(hdl, 
0);
+                               const char* schema_name = mapi_fetch_field(hdl, 
1);
+                               const char* function_name = 
mapi_fetch_field(hdl, 2);
+                               dump_functions(mid, toConsole, 0, schema_name, 
function_name, function_id);
+                       }
+                       mapi_close_handle(hdl);
+                       hdl = NULL;
+               }
                /* the table is a real table */
                mnstr_printf(toConsole, "CREATE %sTABLE \"%s\".\"%s\" ",
-                            type == 3 ? "MERGE " :
-                            type == 4 ? "STREAM " :
-                            type == 5 ? "REMOTE " :
-                            type == 6 ? "REPLICA " :
-                            "",
-                            schema, tname);
+                           (type == 3 || type == 12 || type == 13 || type == 
14 || type == 15) ? "MERGE " :
+                           type == 4 ? "STREAM " :
+                           type == 5 ? "REMOTE " :
+                           type == 6 ? "REPLICA " :
+                           "",
+                           schema, tname);
 
                if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign, hashge))
                        goto bailout;
@@ -927,6 +948,29 @@ describe_table(Mapi mid, const char *sch
                        mnstr_printf(toConsole, " ON '%s' WITH USER '%s' 
ENCRYPTED PASSWORD '%s'", view, rt_user, rt_hash);
                        mapi_close_handle(hdl);
                        hdl = NULL;
+               } else if(type >= 12 && type <= 15) { /* partitioned table */
+                       const char *phow = (type == 12 || type == 14) ? 
"VALUES" : "RANGE";
+                       const char *pusing = (type == 12 || type == 13) ? "ON" 
: "USING";
+                       const char *expr = NULL;
+
+                       if(type == 12 || type == 13) { /* by column */
+                               snprintf(query, maxquerylen,
+                                                "SELECT c.name FROM schemas s, 
tables t, columns c, table_partitions tp "
+                                                "WHERE s.name = '%s' AND 
t.name = '%s' AND s.id = t.schema_id AND t.id = c.table_id "
+                                                "AND c.id = tp.column_id", 
schema, tname);
+                       } else { /* by expression */
+                               snprintf(query, maxquerylen,
+                                                "SELECT tp.expression FROM 
schemas s, tables t, table_partitions tp "
+                                                "WHERE s.name = '%s' AND 
t.name = '%s' AND s.id = t.schema_id AND t.id = tp.table_id",
+                                                schema, tname);
+                       }
+                       if ((hdl = mapi_query(mid, query)) == NULL || 
mapi_error(mid))
+                               goto bailout;
+                       while(mapi_fetch_row(hdl) != 0)
+                               expr = mapi_fetch_field(hdl, 0);
+                       mnstr_printf(toConsole, " PARTITION BY %s %s (%s)", 
phow, pusing, expr);
+                       mapi_close_handle(hdl);
+                       hdl = NULL;
                }
                mnstr_printf(toConsole, ";\n");
                comment_on(toConsole, "TABLE", schema, tname, NULL, remark);
@@ -1412,11 +1456,12 @@ dump_table_data(Mapi mid, const char *sc
 }
 
 int
-dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, 
int describe, int foreign, bool useInserts)
+dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, 
int describe, int foreign,
+                  bool useInserts, bool databaseDump)
 {
        int rc;
 
-       rc = describe_table(mid, schema, tname, toConsole, foreign);
+       rc = describe_table(mid, schema, tname, toConsole, foreign, 
databaseDump);
        if (rc == 0 && !describe)
                rc = dump_table_data(mid, schema, tname, toConsole, useInserts);
        return rc;
@@ -1840,27 +1885,28 @@ dump_database(Mapi mid, stream *toConsol
                     "sys.schemas s "
                "WHERE s.id = seq.schema_id "
                "ORDER BY s.name, seq.name";
-       const char *tables =
-               "SELECT s.name AS sname, "
-                      "t.name AS name, "
-                      "t.type AS type "
-               "FROM sys.schemas s, "
-                    "sys._tables t "
-               "WHERE t.type IN (0, 3, 4, 5, 6) AND "
-                     "t.system = FALSE AND "
-                     "s.id = t.schema_id AND "
-                     "s.name <> 'tmp' "
-               "ORDER BY t.id";
-       const char *mergetables = "SELECT s1.name, t1.name, s2.name, t2.name 
FROM sys.schemas s1, sys._tables t1, sys.dependencies d, sys.schemas s2, 
sys._tables t2 WHERE t1.type = 3 AND t1.schema_id = s1.id AND s1.name <> 'tmp' 
AND t1.system = FALSE AND t1.id = d.depend_id AND d.id = t2.id AND t2.schema_id 
= s2.id ORDER BY t1.id, t2.id";
-       /* we must dump views, functions and triggers in order of
-        * creation since they can refer to each other */
-       const char *views_functions_triggers =
-               ", vft (sname, name, id, query, remark) AS ("
-                       "SELECT s.name AS sname, "
+       /* we must dump tables, views, procedures and triggers in order of 
creation since they can refer to each other */
+       const char *tables_views_functions_triggers =
+               ", vft (sname, name, id, query, remark, type) AS ("
+                       "SELECT s.name AS sname, " /* tables */
+                              "t.name AS name, "
+                              "t.id AS id, "
+                              "NULL AS query, "
+                              "NULL AS remark, "
+                              "t.type AS type "
+                       "FROM sys.schemas s, "
+                             "sys._tables t "
+                       "WHERE t.type IN (0, 3, 4, 5, 6, 12, 13, 14, 15) AND "
+                             "t.system = FALSE AND "
+                             "s.id = t.schema_id AND "
+                             "s.name <> 'tmp' "
+                       "UNION "
+                       "SELECT s.name AS sname, " /* views */
                               "t.name AS name, "
                               "t.id AS id, "
                               "t.query AS query, "
-                              "rem.remark AS remark "
+                              "rem.remark AS remark, "
+                              "NULL AS type "
                        "FROM sys.schemas s, "
                             "sys._tables t LEFT OUTER JOIN comments rem ON 
t.id = rem.id "
                        "WHERE t.type = 1 AND "
@@ -1868,28 +1914,34 @@ dump_database(Mapi mid, stream *toConsol
                              "s.id = t.schema_id AND "
                              "s.name <> 'tmp' "
                        "UNION "
-                       "SELECT s.name AS sname, "
+                       "SELECT s.name AS sname, " /* functions */
                               "f.name AS name, "
                               "f.id AS id, "
                               "NULL AS query, "
-                              "NULL AS remark " /* emitted separately */
+                              "NULL AS remark, " /* emitted separately */
+                              "NULL AS type "
                        "FROM sys.schemas s, "
                             "sys.functions f "
                        "WHERE s.id = f.schema_id "
                        "AND f.id NOT IN (SELECT function_id FROM 
sys.systemfunctions) "
                        "UNION "
-                       "SELECT s.name AS sname, "
+                       "SELECT s.name AS sname, " /* triggers */
                               "tr.name AS name, "
                               "tr.id AS id, "
                               "tr.\"statement\" AS query, "
-                              "NULL AS remark " /* not available yet */
+                              "NULL AS remark, " /* not available yet */
+                              "NULL AS type "
                        "FROM sys.triggers tr, "
                             "sys.schemas s, "
                             "sys._tables t "
                        "WHERE s.id = t.schema_id AND "
                              "t.id = tr.table_id AND t.system = FALSE"
                ") "
-               "SELECT id, sname, name, query, remark FROM vft ORDER BY id";
+               "SELECT id, sname, name, query, remark, type FROM vft ORDER BY 
id";
+       const char *mergetables = "SELECT t1.type, s1.name, t1.name, s2.name, 
t2.name FROM sys.schemas s1, sys._tables t1, "
+                                                         "sys.dependencies d, 
sys.schemas s2, sys._tables t2 WHERE t1.type IN (3, 12, 13, 14, 15) "
+                                                         "AND t1.schema_id = 
s1.id AND s1.name <> 'tmp' AND t1.system = FALSE "
+                                                         "AND t1.id = 
d.depend_id AND d.id = t2.id AND t2.schema_id = s2.id ORDER BY t1.id, t2.id";
        char *sname = NULL;
        char *curschema = NULL;
        MapiHdl hdl = NULL;
@@ -2058,19 +2110,28 @@ dump_database(Mapi mid, stream *toConsol
        mapi_close_handle(hdl);
        hdl = NULL;
 
-       /* dump tables, note that merge tables refer to other tables,
+       /* dump tables, views, functions and triggers
+        * note that merge tables refer to other tables,
         * so we make sure the contents of merge tables are added
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to