Changeset: 34304387fcc2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=34304387fcc2 Added Files: sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.sql sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.err sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.out sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.sql sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.err sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.out sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.err sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.out sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_JdbcClient.stable.out.Windows Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 monetdb5/modules/mal/tablet.c 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/benchmarks/tpch/fileleak/Tests/leaks.stable.out sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows sql/include/sql_relation.h sql/jdbc/tests/Tests/Test_CisValid.stable.out sql/server/rel_optimizer.c sql/server/rel_updates.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: default Log Message:
Merge with Jul2017 branch. diffs (truncated from 1502 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 @@ -8335,19 +8335,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", "pattern sql.declaredTable(name:str):int ", "mvc_declared_table_wrap;", "Prepare a declared table" ] [ "sql", "delete", "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", "pattern sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;", "drop a declared table" ] -[ "sql", "dropDeclaredTables", "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", "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" ] @@ -8374,6 +8370,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", "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 @@ -10698,19 +10698,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", "pattern sql.declaredTable(name:str):int ", "mvc_declared_table_wrap;", "Prepare a declared table" ] [ "sql", "delete", "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", "pattern sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;", "drop a declared table" ] -[ "sql", "dropDeclaredTables", "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", "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" ] @@ -10737,6 +10733,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", "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/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c --- a/monetdb5/modules/mal/tablet.c +++ b/monetdb5/modules/mal/tablet.c @@ -133,7 +133,7 @@ str TABLETcreate_bats(Tablet *as, BUN est) { Column *fmt = as->format; - BUN i; + BUN i, nr = 0; for (i = 0; i < as->nr_attrs; i++) { if (fmt[i].skip) @@ -147,7 +147,10 @@ TABLETcreate_bats(Tablet *as, BUN est) throw(SQL, "copy", "Failed to create bat of size " BUNFMT "\n", as->nr); } fmt[i].ci = bat_iterator(fmt[i].c); + nr++; } + if (!nr) + throw(SQL, "copy", "At least one column should be read from the input\n"); return MAL_SUCCEED; } 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; @@ -1952,11 +1954,12 @@ rel2bin_semijoin(backend *be, sql_rel *r idx = 1; /* stop on first non equality join */ if (!join) { + if (en->next && s->type != st_join && s->type != st_join2 && s->type != st_joinN) + break; join = s; } else if (s->type != st_join && s->type != st_join2 && s->type != st_joinN) { /* handle select expressions */ - assert(0); - return NULL; + break; } if (s->type == st_join || s->type == st_join2 || s->type == st_joinN) { list_append(lje, s->op1); @@ -1986,7 +1989,7 @@ rel2bin_semijoin(backend *be, sql_rel *r /* construct relation */ nl = sa_list(sql->sa); - /* first project using equi-joins */ + /* first project after equi-joins */ for( n = left->op4.lval->h; n; n = n->next ) { stmt *c = n->data; const char *rnme = table_name(sql->sa, c); 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 @@ -1089,6 +1089,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) @@ -2263,112 +2299,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); - const char *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", SQLSTATE(3F000) "Schema missing %s",dt_schema); - (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); - const char *tname = *getArgReference_str(stk, pci, 2); - const char *name = *getArgReference_str(stk, pci, 3); - const char *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", SQLSTATE(HY005) "Cannot access declared table"); - if (!sql_find_subtype(&tpe, typename, digits, scale) && (type = mvc_bind_type(m, typename)) == NULL) - throw(SQL, "sql.dtColumn", SQLSTATE(42S22) "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", SQLSTATE(3F000) "Schema missing %s",dt_schema); - t = mvc_bind_table(m, s, tname); - if (t == NULL) - throw(SQL, "sql.declared_table_column", SQLSTATE(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; - const char *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", SQLSTATE(3F000) "Schema missing %s",dt_schema); - t = mvc_bind_table(m, s, name); - if (t == NULL) - throw(SQL, "sql.drop", SQLSTATE(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", SQLSTATE(3F000) "Schema missing %s",dt_schema); - 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); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list