Changeset: 9ccae5c8d830 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9ccae5c8d830
Added Files:
        sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.sql
        sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.err
        sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.out
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_statement.c
        sql/include/sql_relation.h
        sql/server/rel_optimizer.c
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
        sql/test/BugTracker-2017/Tests/All
        sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.sql
Branch: Jul2017
Log Message:

re-implemented declared tables, to solve the side-effect bug 6397.

also lots of fixes for the sqllitelogistest_case bug 6335 (doesn't
crash (or run out of memory) anymore).


diffs (truncated from 1094 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
@@ -8313,19 +8313,15 @@ Ready.
 [ "sql",       "dec_round",    "command sql.dec_round(v:int, r:int):int ",     
"int_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
 [ "sql",       "dec_round",    "command sql.dec_round(v:lng, r:lng):lng ",     
"lng_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
 [ "sql",       "dec_round",    "command sql.dec_round(v:sht, r:sht):sht ",     
"sht_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
-[ "sql",       "declaredTable",        "unsafe pattern 
sql.declaredTable(name:str):int ",      "mvc_declared_table_wrap;",     
"Prepare a declared table"      ]
 [ "sql",       "delete",       "unsafe pattern sql.delete(mvc:int, sname:str, 
tname:str, b:any):int ", "mvc_delete_wrap;",     "Delete a row from a table. 
Returns sequence number for order dependece."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ",     "DELTAbat2;",   "Return 
column bat with delta's applied."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",    
"DELTAbat;",    "Return column bat with delta's applied."       ]
 [ "sql",       "dense_rank",   "pattern sql.dense_rank(b:any_1, p:bit, 
o:bit):int ",   "SQLdense_rank;",       "return the densely ranked groups"      
]
 [ "sql",       "diff", "pattern sql.diff(b:any_1):bit ",       "SQLdiff;",     
"return true if cur != prev row"        ]
 [ "sql",       "diff", "pattern sql.diff(p:bit, b:any_1):bit ",        
"SQLdiff;",     "return true if cur != prev row"        ]
-[ "sql",       "dropDeclaredTable",    "unsafe pattern 
sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;",        
"drop a declared table" ]
-[ "sql",       "dropDeclaredTables",   "unsafe pattern 
sql.dropDeclaredTables(nr:int):void ",  "mvc_drop_declared_tables_wrap;",       
"drop top n declared tables"    ]
 [ "sql",       "drop_func_upgrade_oct2014",    "pattern 
sql.drop_func_upgrade_oct2014(id:int):int ",   "UPGdrop_func;",        "Drop 
the function identified by id, needed for the Oct2014 upgrade"    ]
 [ "sql",       "drop_hash",    "pattern sql.drop_hash(sch:str, tbl:str):void 
",        "SQLdrop_hash;",        "Drop hash indices for the given table" ]
 [ "sql",       "droporderindex",       "pattern sql.droporderindex(sch:str, 
tbl:str, col:str):void ",  "sql_droporderindex;",  "Drop the order index on a 
column"      ]
-[ "sql",       "dtColumn",     "unsafe pattern sql.dtColumn(rs:int, tname:str, 
name:str, typename:str, digits:int, scale:int):void ",  
"mvc_declared_table_column_wrap;",      ""      ]
 [ "sql",       "dump_cache",   "pattern sql.dump_cache() (query:bat[:str], 
count:bat[:int]) ", "dump_cache;",  "dump the content of the query cache"   ]
 [ "sql",       "dump_opt_stats",       "pattern sql.dump_opt_stats() 
(rewrite:bat[:str], count:bat[:int]) ",   "dump_opt_stats;",      "dump the 
optimizer rewrite statistics" ]
 [ "sql",       "dump_trace",   "pattern sql.dump_trace() (event:bat[:int], 
clk:bat[:str], pc:bat[:str], thread:bat[:int], ticks:bat[:lng], 
rssMB:bat[:lng], vmMB:bat[:lng], reads:bat[:lng], writes:bat[:lng], 
minflt:bat[:lng], majflt:bat[:lng], nvcsw:bat[:lng], stmt:bat[:str]) ", 
"dump_trace;",  "dump the trace statistics"     ]
@@ -8352,6 +8348,7 @@ Ready.
 [ "sql",       "getVariable",  "pattern sql.getVariable(mvc:int, 
varname:str):any_1 ", "getVariable;", "Get the value of a session variable"   ]
 [ "sql",       "getVersion",   "command sql.getVersion(clientid:int):lng ",    
"mvc_getVersion;",      "Return the database version identifier for a client."  
]
 [ "sql",       "get_value",    "pattern sql.get_value(sname:str, 
sequence:str):lng ",  "mvc_get_value;",       "return the current value of the 
sequence"      ]
+[ "sql",       "grow", "pattern sql.grow(tid:bat[:oid], X_0:any_1):int ",      
"mvc_grow_wrap;",       "Resize the tid column of a declared table."    ]
 [ "sql",       "importTable",  "unsafe pattern sql.importTable(sname:str, 
tname:str, fname:str...):bat[:any]... ",     "mvc_bin_import_table_wrap;",   
"Import a table from the files (fname)" ]
 [ "sql",       "include",      "pattern sql.include(fname:str):void ", 
"SQLinclude;",  "Compile and execute a sql statements on the file"      ]
 [ "sql",       "init", "pattern sql.init():void ",     "SQLinitEnvironment;",  
"Initialize the environment for MAL"    ]
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
@@ -10676,19 +10676,15 @@ Ready.
 [ "sql",       "dec_round",    "command sql.dec_round(v:int, r:int):int ",     
"int_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
 [ "sql",       "dec_round",    "command sql.dec_round(v:lng, r:lng):lng ",     
"lng_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
 [ "sql",       "dec_round",    "command sql.dec_round(v:sht, r:sht):sht ",     
"sht_dec_round_wrap;",  "round off the value v to nearests multiple of r"       
]
-[ "sql",       "declaredTable",        "unsafe pattern 
sql.declaredTable(name:str):int ",      "mvc_declared_table_wrap;",     
"Prepare a declared table"      ]
 [ "sql",       "delete",       "unsafe pattern sql.delete(mvc:int, sname:str, 
tname:str, b:any):int ", "mvc_delete_wrap;",     "Delete a row from a table. 
Returns sequence number for order dependece."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ",     "DELTAbat2;",   "Return 
column bat with delta's applied."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",    
"DELTAbat;",    "Return column bat with delta's applied."       ]
 [ "sql",       "dense_rank",   "pattern sql.dense_rank(b:any_1, p:bit, 
o:bit):int ",   "SQLdense_rank;",       "return the densely ranked groups"      
]
 [ "sql",       "diff", "pattern sql.diff(b:any_1):bit ",       "SQLdiff;",     
"return true if cur != prev row"        ]
 [ "sql",       "diff", "pattern sql.diff(p:bit, b:any_1):bit ",        
"SQLdiff;",     "return true if cur != prev row"        ]
-[ "sql",       "dropDeclaredTable",    "unsafe pattern 
sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;",        
"drop a declared table" ]
-[ "sql",       "dropDeclaredTables",   "unsafe pattern 
sql.dropDeclaredTables(nr:int):void ",  "mvc_drop_declared_tables_wrap;",       
"drop top n declared tables"    ]
 [ "sql",       "drop_func_upgrade_oct2014",    "pattern 
sql.drop_func_upgrade_oct2014(id:int):int ",   "UPGdrop_func;",        "Drop 
the function identified by id, needed for the Oct2014 upgrade"    ]
 [ "sql",       "drop_hash",    "pattern sql.drop_hash(sch:str, tbl:str):void 
",        "SQLdrop_hash;",        "Drop hash indices for the given table" ]
 [ "sql",       "droporderindex",       "pattern sql.droporderindex(sch:str, 
tbl:str, col:str):void ",  "sql_droporderindex;",  "Drop the order index on a 
column"      ]
-[ "sql",       "dtColumn",     "unsafe pattern sql.dtColumn(rs:int, tname:str, 
name:str, typename:str, digits:int, scale:int):void ",  
"mvc_declared_table_column_wrap;",      ""      ]
 [ "sql",       "dump_cache",   "pattern sql.dump_cache() (query:bat[:str], 
count:bat[:int]) ", "dump_cache;",  "dump the content of the query cache"   ]
 [ "sql",       "dump_opt_stats",       "pattern sql.dump_opt_stats() 
(rewrite:bat[:str], count:bat[:int]) ",   "dump_opt_stats;",      "dump the 
optimizer rewrite statistics" ]
 [ "sql",       "dump_trace",   "pattern sql.dump_trace() (event:bat[:int], 
clk:bat[:str], pc:bat[:str], thread:bat[:int], ticks:bat[:lng], 
rssMB:bat[:lng], vmMB:bat[:lng], reads:bat[:lng], writes:bat[:lng], 
minflt:bat[:lng], majflt:bat[:lng], nvcsw:bat[:lng], stmt:bat[:str]) ", 
"dump_trace;",  "dump the trace statistics"     ]
@@ -10715,6 +10711,7 @@ Ready.
 [ "sql",       "getVariable",  "pattern sql.getVariable(mvc:int, 
varname:str):any_1 ", "getVariable;", "Get the value of a session variable"   ]
 [ "sql",       "getVersion",   "command sql.getVersion(clientid:int):lng ",    
"mvc_getVersion;",      "Return the database version identifier for a client."  
]
 [ "sql",       "get_value",    "pattern sql.get_value(sname:str, 
sequence:str):lng ",  "mvc_get_value;",       "return the current value of the 
sequence"      ]
+[ "sql",       "grow", "pattern sql.grow(tid:bat[:oid], X_0:any_1):int ",      
"mvc_grow_wrap;",       "Resize the tid column of a declared table."    ]
 [ "sql",       "importTable",  "unsafe pattern sql.importTable(sname:str, 
tname:str, fname:str...):bat[:any]... ",     "mvc_bin_import_table_wrap;",   
"Import a table from the files (fname)" ]
 [ "sql",       "include",      "pattern sql.include(fname:str):void ", 
"SQLinclude;",  "Compile and execute a sql statements on the file"      ]
 [ "sql",       "init", "pattern sql.init():void ",     "SQLinitEnvironment;",  
"Initialize the environment for MAL"    ]
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
@@ -357,7 +357,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        stmt *r = exp_bin(be, e->l, left, right, grp, ext, cnt, 
sel);
                        return stmt_assign(be, e->name, r, 
GET_PSM_LEVEL(e->flag));
                } else if (e->flag & PSM_VAR) {
-                       if (e->f) /* TODO TABLE */
+                       if (e->f)
                                return stmt_vars(be, e->name, e->f, 1, 
GET_PSM_LEVEL(e->flag));
                        else
                                return stmt_var(be, e->name, &e->tpe, 1, 
GET_PSM_LEVEL(e->flag));
@@ -365,6 +365,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        sql_exp *l = e->l;
                        stmt *r = exp_bin(be, l, left, right, grp, ext, cnt, 
sel);
 
+                       if (!r)
+                               return NULL;
                        /* handle table returning functions */
                        if (l->type == e_psm && l->flag & PSM_REL) {
                                stmt *lst = r->op1;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1034,6 +1034,42 @@ str mvc_append_column(sql_trans *t, sql_
        return MAL_SUCCEED;
 }
 
+/*mvc_grow_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */
+str
+mvc_grow_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       int *res = getArgReference_int(stk, pci, 0);
+       bat Tid = *getArgReference_bat(stk, pci, 1);
+       ptr Ins = getArgReference(stk, pci, 2);
+       int tpe = getArgType(mb, pci, 2);
+       BAT *tid = 0, *ins = 0;
+       size_t cnt = 1;
+       oid v = 0;
+
+       (void)cntxt;
+       *res = 0;
+       if ((tid = BATdescriptor(Tid)) == NULL)
+               throw(SQL, "sql.grow", "Cannot access descriptor");
+       if (tpe > GDKatomcnt)
+               tpe = TYPE_bat;
+       if (tpe == TYPE_bat && (ins = BATdescriptor(*(int *) Ins)) == NULL)
+               throw(SQL, "sql.append", "Cannot access descriptor");
+       if (ins) {
+               cnt = BATcount(ins);
+               BBPunfix(ins->batCacheid);
+       }
+       if (BATcount(tid))
+               v = *Tloc(tid, BATcount(tid)-1)+1;
+       for(;cnt>0; cnt--, v++) {
+               if (BUNappend(tid, &v, FALSE) != GDK_SUCCEED) {
+                       BBPunfix(Tid);
+                       throw(SQL, "sql", MAL_MALLOC_FAIL);
+               }
+       }
+       BBPunfix(Tid);
+       return MAL_SUCCEED;
+}
+
 /*mvc_append_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */
 str
 mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -2204,112 +2240,6 @@ mvc_table_result_wrap(Client cntxt, MalB
        return res;
 }
 
-/* str mvc_declared_table_wrap(int *res_id, str *name); */
-str
-mvc_declared_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
-{
-       mvc *m = NULL;
-       str msg;
-       sql_schema *s = NULL;
-       int *res_id = getArgReference_int(stk, pci, 0);
-       str name = *getArgReference_str(stk, pci, 1);
-
-       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-               return msg;
-       if ((msg = checkSQLContext(cntxt)) != NULL)
-               return msg;
-       s = mvc_bind_schema(m, dt_schema);
-       if (s == NULL)
-               throw(SQL, "sql.declared_table", "3F000!Schema missing");
-       (void) mvc_create_table(m, s, name, tt_table, TRUE, SQL_DECLARED_TABLE, 
CA_DROP, 0);
-       *res_id = 0;
-       return MAL_SUCCEED;
-}
-
-/* str mvc_declared_table_column_wrap(int *ret, int *rs, str *tname, str 
*name, str *type, int *digits, int *scale); */
-str
-mvc_declared_table_column_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
-{
-       mvc *m = NULL;
-       str msg;
-       sql_schema *s = NULL;
-       sql_table *t = NULL;
-       sql_type *type = NULL;
-       sql_subtype tpe;
-       int rs = *getArgReference_int(stk, pci, 1);
-       str tname = *getArgReference_str(stk, pci, 2);
-       str name = *getArgReference_str(stk, pci, 3);
-       str typename = *getArgReference_str(stk, pci, 4);
-       int digits = *getArgReference_int(stk, pci, 5);
-       int scale = *getArgReference_int(stk, pci, 6);
-
-       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-               return msg;
-       if ((msg = checkSQLContext(cntxt)) != NULL)
-               return msg;
-       if (rs != 0)
-               throw(SQL, "sql.dtColumn", "Cannot access declared table");
-       if (!sql_find_subtype(&tpe, typename, digits, scale) && (type = 
mvc_bind_type(m, typename)) == NULL)
-               throw(SQL, "sql.dtColumn", "Cannot find column type");
-       if (type)
-               sql_init_subtype(&tpe, type, 0, 0);
-       s = mvc_bind_schema(m, dt_schema);
-       if (s == NULL)
-               throw(SQL, "sql.declared_table_column", "3F000!Schema missing");
-       t = mvc_bind_table(m, s, tname);
-       if (t == NULL)
-               throw(SQL, "sql.declared_table_column", "42S02!Table missing");
-       (void) mvc_create_column(m, t, name, &tpe);
-       return MAL_SUCCEED;
-}
-
-str
-mvc_drop_declared_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
-{
-       mvc *m = NULL;
-       str name = *getArgReference_str(stk, pci, 1);
-       str msg;
-       sql_schema *s = NULL;
-       sql_table *t = NULL;
-
-       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-               return msg;
-       if ((msg = checkSQLContext(cntxt)) != NULL)
-               return msg;
-       s = mvc_bind_schema(m, dt_schema);
-       if (s == NULL)
-               throw(SQL, "sql.drop", "3F000!Schema missing");
-       t = mvc_bind_table(m, s, name);
-       if (t == NULL)
-               throw(SQL, "sql.drop", "42S02!Table missing");
-       (void) mvc_drop_table(m, s, t, 0);
-       return MAL_SUCCEED;
-}
-
-str
-mvc_drop_declared_tables_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
-{
-       mvc *m = NULL;
-       int i = *getArgReference_int(stk, pci, 1);
-       str msg;
-       sql_schema *s = NULL;
-       sql_table *t = NULL;
-
-       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-               return msg;
-       if ((msg = checkSQLContext(cntxt)) != NULL)
-               return msg;
-       s = mvc_bind_schema(m, dt_schema);
-       if (s == NULL)
-               throw(SQL, "sql.drop", "3F000!Schema missing");
-       while (i && s->tables.set->t) {
-               t = s->tables.set->t->data;
-               (void) mvc_drop_table(m, s, t, 0);
-               i--;
-       }
-       return MAL_SUCCEED;
-}
-
 /* str mvc_affected_rows_wrap(int *m, int m, lng *nr, str *w); */
 str
 mvc_affected_rows_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -67,6 +67,7 @@ sql5_export str SQLshutdown_wrap(Client 
 sql5_export str SQLtransaction2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
+sql5_export str mvc_grow_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str mvc_append_column(sql_trans *t, sql_column *c, BAT *ins);
 
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -218,6 +218,10 @@ command getVersion(clientid:int):lng
 address mvc_getVersion
 comment "Return the database version identifier for a client.";
 
+pattern grow(tid:bat[:oid], :any_1):int
+address mvc_grow_wrap
+comment "Resize the tid column of a declared table.";
+
 pattern append(mvc:int, sname:str, tname:str, cname:str, ins:any):int
 address mvc_append_wrap
 comment "Append to the column tname.cname (possibly optimized to replace the 
insert bat of tname.cname. Returns sequence number for order dependence.";
@@ -260,21 +264,6 @@ unsafe pattern export_table(fname:str, f
 address mvc_export_table_wrap
 comment "Prepare a table result set for the COPY INTO stream";
 
-unsafe pattern declaredTable( name:str ) :int 
-address mvc_declared_table_wrap
-comment "Prepare a declared table"; 
-
-unsafe pattern dtColumn(rs:int, tname:str, name:str, typename:str, digits:int, 
scale:int) :void
-address mvc_declared_table_column_wrap;
-
-unsafe pattern dropDeclaredTable( name:str ) :void 
-address mvc_drop_declared_table_wrap
-comment "drop a declared table"; 
-
-unsafe pattern dropDeclaredTables( nr:int ) :void 
-address mvc_drop_declared_tables_wrap
-comment "drop top n declared tables"; 
-
 pattern drop_func_upgrade_oct2014(id:int) :int
 address UPGdrop_func
 comment "Drop the function identified by id, needed for the Oct2014 upgrade";
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
@@ -257,39 +257,39 @@ stmt_none(backend *be)
 }
 
 static int
-dump_table(MalBlkPtr mb, sql_table *t)
+create_bat(MalBlkPtr mb, int tt)
 {
-       int nr;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to