Changeset: 296cbb8eecfe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=296cbb8eecfe
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_rank.c
sql/backends/monet5/sql_rank.mal
Branch: default
Log Message:
Added missing cases for batsql.diff
diffs (138 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
@@ -8977,7 +8977,9 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "dec_round", "command batsql.dec_round(v:bat[:sht],
r:sht):bat[:sht] ", "sht_bat_dec_round_wrap;", "round off the value v
to nearests multiple of r" ]
[ "batsql", "dense_rank", "pattern batsql.dense_rank(b:bat[:any_1],
p:any_2, o:any_3):bat[:int] ", "SQLdense_rank;", "return the
densely ranked groups" ]
[ "batsql", "diff", "pattern batsql.diff(b:bat[:any_1]):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
+[ "batsql", "diff", "pattern batsql.diff(p:bat[:bit], b:any_1):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
[ "batsql", "diff", "pattern batsql.diff(p:bat[:bit],
b:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev row"
]
+[ "batsql", "diff", "pattern batsql.diff(p:bit, b:bat[:any_1]):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
[ "batsql", "first_value", "pattern batsql.first_value(b:bat[:any_1],
s:bat[:lng], e:bat[:lng]):bat[:any_1] ", "SQLfirst_value;", "return
the first value of groups" ]
[ "batsql", "get_value", "pattern batsql.get_value(sname:bat[:str],
sequence:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the
current value of sequences" ]
[ "batsql", "get_value", "pattern batsql.get_value(sname:bat[:str],
sequence:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of the sequence" ]
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
@@ -12699,7 +12699,9 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "dec_round", "command batsql.dec_round(v:bat[:sht],
r:sht):bat[:sht] ", "sht_bat_dec_round_wrap;", "round off the value v
to nearests multiple of r" ]
[ "batsql", "dense_rank", "pattern batsql.dense_rank(b:bat[:any_1],
p:any_2, o:any_3):bat[:int] ", "SQLdense_rank;", "return the
densely ranked groups" ]
[ "batsql", "diff", "pattern batsql.diff(b:bat[:any_1]):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
+[ "batsql", "diff", "pattern batsql.diff(p:bat[:bit], b:any_1):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
[ "batsql", "diff", "pattern batsql.diff(p:bat[:bit],
b:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev row"
]
+[ "batsql", "diff", "pattern batsql.diff(p:bit, b:bat[:any_1]):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row" ]
[ "batsql", "first_value", "pattern batsql.first_value(b:bat[:any_1],
s:bat[:lng], e:bat[:lng]):bat[:any_1] ", "SQLfirst_value;", "return
the first value of groups" ]
[ "batsql", "get_value", "pattern batsql.get_value(sname:bat[:str],
sequence:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the
current value of sequences" ]
[ "batsql", "get_value", "pattern batsql.get_value(sname:bat[:str],
sequence:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of the sequence" ]
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
@@ -624,10 +624,10 @@ exp_bin(backend *be, sql_exp *e, stmt *l
if (rows && en == exps->h && f->func->type !=
F_LOADER)
es = stmt_const(be, rows, es);
- else if(f->func->type == F_ANALYTIC &&
es->nrcols == 0) {
- if(en == exps->h)
+ else if (f->func->type == F_ANALYTIC &&
es->nrcols == 0) {
+ if (en == exps->h)
es = stmt_const(be,
bin_first_column(be, left), es); /* ensure the first argument is a column */
- if((!strcmp(f->func->base.name,
"window_bound"))
+ if (!f->func->s &&
!strcmp(f->func->base.name, "window_bound")
&& exps->h->next &&
list_length(f->func->ops) == 6 && en == exps->h->next)
es = stmt_const(be,
bin_first_column(be, left), es);
}
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -31,32 +31,57 @@ SQLdiff(Client cntxt, MalBlkPtr mb, MalS
bat *res = getArgReference_bat(stk, pci, 0);
bat *bid = getArgReference_bat(stk, pci, 1);
BAT *b = BATdescriptor(*bid), *c, *r;
- gdk_return gdk_code;
+ gdk_return gdk_code = GDK_SUCCEED;
+
+ if (!b)
+ throw(SQL, "sql.diff", SQLSTATE(HY005) "Cannot access
column descriptor");
+ if (pci->argc > 2) {
+ if (isaBatType(getArgType(mb, pci, 2))) {
+ voidresultBAT(r, TYPE_bit, BATcount(b), b,
"sql.diff");
+ c = b;
+ bid = getArgReference_bat(stk, pci, 2);
+ b = BATdescriptor(*bid);
+ if (!b) {
+ BBPunfix(c->batCacheid);
+ throw(SQL, "sql.diff", SQLSTATE(HY005)
"Cannot access column descriptor");
+ }
+ gdk_code = GDKanalyticaldiff(r, b, c, b->ttype);
+ BBPunfix(c->batCacheid);
+ } else { /* the input is a constant, so the output is
the previous sql.diff output */
+ assert(b->ttype == TYPE_bit);
+ r = COLcopy(b, TYPE_bit, false, TRANSIENT);
+ if (!r) {
+ BBPunfix(b->batCacheid);
+ throw(SQL, "sql.diff", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
+ }
+ } else {
+ voidresultBAT(r, TYPE_bit, BATcount(b), b, "sql.diff");
+ gdk_code = GDKanalyticaldiff(r, b, NULL, b->ttype);
+ }
+ BBPunfix(b->batCacheid);
+ if (gdk_code == GDK_SUCCEED)
+ BBPkeepref(*res = r->batCacheid);
+ else
+ throw(SQL, "sql.diff", GDK_EXCEPTION);
+ } else if (pci->argc > 2 && isaBatType(getArgType(mb, pci, 2))) {
+ bat *res = getArgReference_bat(stk, pci, 0);
+ bat *bid = getArgReference_bat(stk, pci, 2);
+ BAT *b = BATdescriptor(*bid), *r;
+ gdk_return gdk_code = GDK_SUCCEED;
if (!b)
throw(SQL, "sql.diff", SQLSTATE(HY005) "Cannot access
column descriptor");
voidresultBAT(r, TYPE_bit, BATcount(b), b, "sql.diff");
- if (pci->argc > 2) {
- c = b;
- bid = getArgReference_bat(stk, pci, 2);
- b = BATdescriptor(*bid);
- if (!b) {
- BBPunfix(c->batCacheid);
- throw(SQL, "sql.diff", SQLSTATE(HY005) "Cannot
access column descriptor");
- }
- gdk_code = GDKanalyticaldiff(r, b, c, b->ttype);
- BBPunfix(c->batCacheid);
- } else {
- gdk_code = GDKanalyticaldiff(r, b, NULL, b->ttype);
- }
+
+ gdk_code = GDKanalyticaldiff(r, b, NULL, b->ttype);
BBPunfix(b->batCacheid);
- if(gdk_code == GDK_SUCCEED)
+ if (gdk_code == GDK_SUCCEED)
BBPkeepref(*res = r->batCacheid);
else
throw(SQL, "sql.diff", GDK_EXCEPTION);
} else {
bit *res = getArgReference_bit(stk, pci, 0);
-
*res = FALSE;
}
return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_rank.mal b/sql/backends/monet5/sql_rank.mal
--- a/sql/backends/monet5/sql_rank.mal
+++ b/sql/backends/monet5/sql_rank.mal
@@ -20,6 +20,14 @@ pattern sql.diff(p:bit, b:any_1) :bit
address SQLdiff
comment "return true if cur != prev row";
+pattern batsql.diff(p:bit, b:bat[:any_1]) :bat[:bit]
+address SQLdiff
+comment "return true if cur != prev row";
+
+pattern batsql.diff(p:bat[:bit], b:any_1) :bat[:bit]
+address SQLdiff
+comment "return true if cur != prev row";
+
pattern batsql.diff(p:bat[:bit], b:bat[:any_1]) :bat[:bit]
address SQLdiff
comment "return true if cur != prev row";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list