Changeset: 4af7dcab3680 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4af7dcab3680 Added Files: sql/backends/monet5/sql_subquery.c sql/backends/monet5/sql_subquery.h sql/backends/monet5/sql_subquery.mal Modified Files: MonetDB5/optimizer/opt_mitosis.c clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 sql/backends/monet5/Makefile.ag sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql.mal sql/backends/monet5/sql_rank.mal Branch: gdk-tracer Log Message:
Merge branch default diffs (truncated from 2301 to 300 lines): diff --git a/MonetDB5/optimizer/opt_mitosis.c b/MonetDB5/optimizer/opt_mitosis.c --- a/MonetDB5/optimizer/opt_mitosis.c +++ b/MonetDB5/optimizer/opt_mitosis.c @@ -276,7 +276,6 @@ OPTmitosisImplementation(Client cntxt, M if (upd) pushInstruction(mb, matr); } - assert (i == limit) /*TODO: remove after succesful nightly testweb run*/; for (; i<slimit; i++) if (old[i]) freeInstruction(old[i]); 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 @@ -66,6 +66,7 @@ stdout of test 'MAL-signatures` in direc % clob, clob, clob, clob, clob # type % 11, 28, 364, 38, 874 # length [ "aggr", "allnotequal", "command aggr.allnotequal(l:bat[:any_1], r:bat[:any_1]):bit ", "SQLallnotequal;", "if all values in r are not equal to l return true, else if r has nil nil else false" ] +[ "aggr", "anyequal", "pattern aggr.anyequal(l:any_1, r:any_1):bit ", "CMDvarEQ;", "" ] [ "aggr", "anyequal", "command aggr.anyequal(l:bat[:any_1], r:bat[:any_1]):bit ", "SQLanyequal;", "if any value in r is equal to l return true, else if r has nil nil else false" ] [ "aggr", "avg", "command aggr.avg(b:bat[:bte], g:bat[:oid], e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "Grouped tail average on bte" ] [ "aggr", "avg", "command aggr.avg(b:bat[:dbl], g:bat[:oid], e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "Grouped tail average on dbl" ] @@ -128,6 +129,7 @@ stdout of test 'MAL-signatures` in direc [ "aggr", "min", "command aggr.min(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:any_1] ", "AGGRmin3;", "" ] [ "aggr", "min", "command aggr.min(b:bat[:any_2]):any_2 ", "ALGminany;", "Return the lowest tail value or nil." ] [ "aggr", "min", "command aggr.min(b:bat[:any_2], skipnil:bit):any_2 ", "ALGminany_skipnil;", "Return the lowest tail value or nil." ] +[ "aggr", "not_anyequal", "pattern aggr.not_anyequal(l:any_1, r:any_1):bit ", "CMDvarNE;", "" ] [ "aggr", "not_exist", "command aggr.not_exist(b:bat[:any_2]):bit ", "SQLnot_exist;", "" ] [ "aggr", "not_exist", "pattern aggr.not_exist(v:any_2):bit ", "SQLnot_exist_val;", "" ] [ "aggr", "prod", "command aggr.prod(b:bat[:bte], g:bat[:oid], e:bat[:any_1]):bat[:bte] ", "AGGRprod3_bte;", "Grouped tail product on bte" ] 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 @@ -70,6 +70,7 @@ stdout of test 'MAL-signatures` in direc % clob, clob, clob, clob, clob # type % 11, 28, 364, 38, 874 # length [ "aggr", "allnotequal", "command aggr.allnotequal(l:bat[:any_1], r:bat[:any_1]):bit ", "SQLallnotequal;", "if all values in r are not equal to l return true, else if r has nil nil else false" ] +[ "aggr", "anyequal", "pattern aggr.anyequal(l:any_1, r:any_1):bit ", "CMDvarEQ;", "" ] [ "aggr", "anyequal", "command aggr.anyequal(l:bat[:any_1], r:bat[:any_1]):bit ", "SQLanyequal;", "if any value in r is equal to l return true, else if r has nil nil else false" ] [ "aggr", "avg", "command aggr.avg(b:bat[:bte], g:bat[:oid], e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "Grouped tail average on bte" ] [ "aggr", "avg", "command aggr.avg(b:bat[:dbl], g:bat[:oid], e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "Grouped tail average on dbl" ] @@ -136,6 +137,7 @@ stdout of test 'MAL-signatures` in direc [ "aggr", "min", "command aggr.min(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:any_1] ", "AGGRmin3;", "" ] [ "aggr", "min", "command aggr.min(b:bat[:any_2]):any_2 ", "ALGminany;", "Return the lowest tail value or nil." ] [ "aggr", "min", "command aggr.min(b:bat[:any_2], skipnil:bit):any_2 ", "ALGminany_skipnil;", "Return the lowest tail value or nil." ] +[ "aggr", "not_anyequal", "pattern aggr.not_anyequal(l:any_1, r:any_1):bit ", "CMDvarNE;", "" ] [ "aggr", "not_exist", "command aggr.not_exist(b:bat[:any_2]):bit ", "SQLnot_exist;", "" ] [ "aggr", "not_exist", "pattern aggr.not_exist(v:any_2):bit ", "SQLnot_exist_val;", "" ] [ "aggr", "prod", "command aggr.prod(b:bat[:bte], g:bat[:oid], e:bat[:any_1]):bat[:bte] ", "AGGRprod3_bte;", "Grouped tail product on bte" ] diff --git a/sql/backends/monet5/Makefile.ag b/sql/backends/monet5/Makefile.ag --- a/sql/backends/monet5/Makefile.ag +++ b/sql/backends/monet5/Makefile.ag @@ -47,7 +47,7 @@ lib__sql = { sql_orderidx.c sql_orderidx.h \ wlr.c wlr.h \ sql_datetrunc.c \ - sql_rank.c sql_rank.h + sql_rank.c sql_rank.h sql_subquery.c sql_subquery.h # libmapi on Windows for mcrypt_* LIBS = ../../server/libsqlserver \ ../../storage/libstore \ @@ -65,7 +65,7 @@ headers_mal = { DIR = libdir/monetdb5 SOURCES = sql_aggr_bte.mal sql_aggr_flt.mal sql_aggr_dbl.mal sql_aggr_int.mal sql_aggr_lng.mal \ sql_aggr_sht.mal sql_decimal.mal sql_inspect.mal wlr.mal \ - sql_rank.mal sqlcatalog.mal sql_transaction.mal sql.mal sql_session.mal + sql_subquery.mal sql_rank.mal sqlcatalog.mal sql_transaction.mal sql.mal sql_session.mal } headers_mal_hge = { 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 @@ -2295,7 +2295,6 @@ BATleftproject(bat *Res, const bat *Col, return MAL_SUCCEED; } - /* str SQLtid(bat *result, mvc *m, str *sname, str *tname) */ str SQLtid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) @@ -3437,756 +3436,6 @@ mvc_bin_import_table_wrap(Client cntxt, } str -zero_or_one_error(ptr ret, const bat *bid, const bit *err) -{ - BAT *b; - BUN c; - size_t _s; - const void *p; - - if ((b = BATdescriptor(*bid)) == NULL) { - throw(SQL, "zero_or_one", SQLSTATE(HY005) "Cannot access column descriptor"); - } - c = BATcount(b); - if (c == 0) { - p = ATOMnilptr(b->ttype); - } else if (c == 1 || (c > 1 && *err == false)) { - BATiter bi = bat_iterator(b); - p = BUNtail(bi, 0); - } else { - p = NULL; - BBPunfix(b->batCacheid); - throw(SQL, "zero_or_one", SQLSTATE(21000) "Cardinality violation, scalar value expected"); - } - _s = ATOMsize(ATOMtype(b->ttype)); - if (ATOMextern(b->ttype)) { - _s = ATOMlen(ATOMtype(b->ttype), p); - *(ptr *) ret = GDKmalloc(_s); - if(*(ptr *) ret == NULL){ - BBPunfix(b->batCacheid); - throw(SQL, "zero_or_one", SQLSTATE(HY001) MAL_MALLOC_FAIL); - } - memcpy(*(ptr *) ret, p, _s); - } else if (b->ttype == TYPE_bat) { - bat bid = *(bat *) p; - if((*(BAT **) ret = BATdescriptor(bid)) == NULL){ - BBPunfix(b->batCacheid); - throw(SQL, "zero_or_one", SQLSTATE(HY005) "Cannot access column descriptor"); - } - } else if (_s == 4) { - *(int *) ret = *(int *) p; - } else if (_s == 1) { - *(bte *) ret = *(bte *) p; - } else if (_s == 2) { - *(sht *) ret = *(sht *) p; - } else if (_s == 8) { - *(lng *) ret = *(lng *) p; -#ifdef HAVE_HGE - } else if (_s == 16) { - *(hge *) ret = *(hge *) p; -#endif - } else { - memcpy(ret, p, _s); - } - BBPunfix(b->batCacheid); - return MAL_SUCCEED; -} - -str -zero_or_one_error_bat(ptr ret, const bat *bid, const bat *err) -{ - bit t = FALSE; - (void)err; - return zero_or_one_error(ret, bid, &t); -} - -str -zero_or_one(ptr ret, const bat *bid) -{ - bit t = TRUE; - return zero_or_one_error(ret, bid, &t); -} - -str -SQLsubzero_or_one(bat *ret, const bat *bid, const bat *gid, const bat *eid, bit *no_nil) -{ - gdk_return r; - BAT *ng = NULL, *h = NULL, *g, *b; - - (void)no_nil; - (void)eid; - - g = gid ? BATdescriptor(*gid) : NULL; - if (g == NULL) { - if (g) - BBPunfix(g->batCacheid); - throw(MAL, "sql.subzero_or_one", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } - - if ((r = BATgroup(&ng, NULL, &h, g, NULL, NULL, NULL, NULL)) == GDK_SUCCEED) { - lng max = 0; - - if (ng) - BBPunfix(ng->batCacheid); - BATmax(h, &max); - BBPunfix(h->batCacheid); - if (max != lng_nil && max > 1) - throw(SQL, "assert", SQLSTATE(M0M29) "zero_or_one: cardinality violation, scalar expression expected"); - - } - BBPunfix(g->batCacheid); - if (r == GDK_SUCCEED) { - b = bid ? BATdescriptor(*bid) : NULL; - BBPkeepref(*ret = b->batCacheid); - } - return MAL_SUCCEED; -} - -str -SQLall(ptr ret, const bat *bid) -{ - BAT *b; - BUN c, _s; - const void *p; - - if ((b = BATdescriptor(*bid)) == NULL) { - throw(SQL, "all", SQLSTATE(HY005) "Cannot access column descriptor"); - } - c = BATcount(b); - if (c == 0) { - p = ATOMnilptr(b->ttype); - } else if (c == 1 || (b->tsorted && b->trevsorted)) { - BATiter bi = bat_iterator(b); - p = BUNtail(bi, 0); - } else if (b->ttype == TYPE_void && is_oid_nil(b->tseqbase)) { - p = ATOMnilptr(b->ttype); - } else { - BUN q, r; - int (*ocmp) (const void *, const void *); - const void *n = ATOMnilptr(b->ttype); - BATiter bi = bat_iterator(b); - r = BUNlast(b); - p = BUNtail(bi, 0); - ocmp = ATOMcompare(b->ttype); - for (q = 1; q < r; q++) { - const void *c = BUNtail(bi, q); - if (ocmp(p, c) != 0) { - if (ocmp(n, c) != 0) - p = ATOMnilptr(b->ttype); - break; - } - } - } - _s = ATOMsize(ATOMtype(b->ttype)); - if (ATOMextern(b->ttype)) { - _s = ATOMlen(ATOMtype(b->ttype), p); - *(ptr *) ret = GDKmalloc(_s); - if(*(ptr *) ret == NULL){ - BBPunfix(b->batCacheid); - throw(SQL, "SQLall", SQLSTATE(HY001) MAL_MALLOC_FAIL); - } - memcpy(*(ptr *) ret, p, _s); - } else if (b->ttype == TYPE_bat) { - bat bid = *(bat *) p; - if ((*(BAT **) ret = BATdescriptor(bid)) == NULL) { - BBPunfix(b->batCacheid); - throw(SQL, "all", SQLSTATE(HY005) "Cannot access column descriptor"); - } - } else if (_s == 4) { - *(int *) ret = *(int *) p; - } else if (_s == 1) { - *(bte *) ret = *(bte *) p; - } else if (_s == 2) { - *(sht *) ret = *(sht *) p; - } else if (_s == 8) { - *(lng *) ret = *(lng *) p; -#ifdef HAVE_HGE - } else if (_s == 16) { - *(hge *) ret = *(hge *) p; -#endif - } else { - memcpy(ret, p, _s); - } - BBPunfix(b->batCacheid); - return MAL_SUCCEED; -} - -str -SQLall_grp(bat *ret, const bat *bid, const bat *gp, const bat *gpe, bit *no_nil) -{ - BAT *l, *g, *e, *res; - BATiter li; - ssize_t p, *pos = NULL; - int error = 0, has_nil = 0; - int (*ocmp) (const void *, const void *); - - (void)no_nil; - if ((l = BATdescriptor(*bid)) == NULL) { - throw(SQL, "all =", SQLSTATE(HY005) "Cannot access column descriptor"); - } - if ((g = BATdescriptor(*gp)) == NULL) { - BBPunfix(l->batCacheid); - throw(SQL, "all =", SQLSTATE(HY005) "Cannot access column descriptor"); - } - if ((e = BATdescriptor(*gpe)) == NULL) { - BBPunfix(l->batCacheid); - BBPunfix(g->batCacheid); - throw(SQL, "all =", SQLSTATE(HY005) "Cannot access column descriptor"); - } - li = bat_iterator(l); - ocmp = ATOMcompare(l->ttype); - if (BATcount(g) > 0) { - BUN q, o, s, offset = 0; - BATiter gi = bat_iterator(g); - - pos = GDKmalloc(sizeof(BUN)*BATcount(e)); - for (s = 0; s < BATcount(e); s++) - pos[s] = -1; - - offset = g->hseqbase - l->hseqbase; - o = BUNlast(g); - for (q = offset, s = 0; s < o; q++, s++) { - oid id = *(oid*)BUNtail(gi, s); - if (pos[id] == -2) - continue; - else if (pos[id] == -1) - pos[id] = q; - else { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list