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

Reply via email to