Changeset: 885491efa3d2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/885491efa3d2
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/storage/sql_storage.h
sql/storage/store.c
sql/storage/store_sequence.c
sql/storage/store_sequence.h
Branch: sequences_7184
Log Message:
cleanup of too complex seqbulk_* interface
added simplified single seqbulk operator.
diffs (truncated from 705 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
@@ -6347,9 +6347,6 @@
[ "batsql", "diff", "pattern batsql.diff(X_0:bat[:bit],
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "diff", "pattern batsql.diff(X_0:bit,
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "first_value", "pattern batsql.first_value(X_0:bat[:any_1],
X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:any_1] ",
"SQLfirst_value;", "return the first value of groups" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current
value of sequences" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value of the
sequence" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of sequences" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:bte] ", "BATSTRindex_bte;", "Return the offsets as an
index bat" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:int] ", "BATSTRindex_int;", "Return the offsets as an
index bat" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:sht] ", "BATSTRindex_sht;", "Return the offsets as an
index bat" ]
@@ -6378,9 +6375,7 @@
[ "batsql", "lead", "pattern batsql.lead(X_0:bat[:any_1], X_1:bat[:any],
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;",
"return the value in the next 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "max", "pattern batsql.max(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmax;", "return the
maximum of groups" ]
[ "batsql", "min", "pattern batsql.min(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmin;", "return the
minimum of groups" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_next_value;", "return the next value of the
sequence" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
+[ "batsql", "next_value", "pattern batsql.next_value(X_0:lng, X_1:str,
X_2:str):bat[:lng] ", "mvc_next_value_bulk;", "return the next value of
the sequence"
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:any_1,
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:lng, X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
@@ -6397,13 +6392,6 @@
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:lng], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "rank", "pattern batsql.rank(X_0:bat[:any_1], X_1:any_2,
X_2:any_3):bat[:int] ", "SQLrank;", "return the ranked groups" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the sequence
with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
[ "batsql", "row_number", "pattern batsql.row_number(X_0:bat[:any_1],
X_1:any_2, X_2:any_3):bat[:int] ", "SQLrow_number;", "return the
row_numer-ed groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:bte], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:dbl], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
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
@@ -8888,9 +8888,6 @@
[ "batsql", "diff", "pattern batsql.diff(X_0:bat[:bit],
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "diff", "pattern batsql.diff(X_0:bit,
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "first_value", "pattern batsql.first_value(X_0:bat[:any_1],
X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:any_1] ",
"SQLfirst_value;", "return the first value of groups" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current
value of sequences" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value of the
sequence" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of sequences" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:bte] ", "BATSTRindex_bte;", "Return the offsets as an
index bat" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:int] ", "BATSTRindex_int;", "Return the offsets as an
index bat" ]
[ "batsql", "index", "command batsql.index(X_0:bat[:str],
X_1:bit):bat[:sht] ", "BATSTRindex_sht;", "Return the offsets as an
index bat" ]
@@ -8919,9 +8916,7 @@
[ "batsql", "lead", "pattern batsql.lead(X_0:bat[:any_1], X_1:bat[:any],
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;",
"return the value in the next 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "max", "pattern batsql.max(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmax;", "return the
maximum of groups" ]
[ "batsql", "min", "pattern batsql.min(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmin;", "return the
minimum of groups" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_next_value;", "return the next value of the
sequence" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
+[ "batsql", "next_value", "pattern batsql.next_value(X_0:lng, X_1:str,
X_2:str):bat[:lng] ", "mvc_next_value_bulk;", "return the next value of
the sequence"
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:any_1,
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:lng, X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
@@ -8943,13 +8938,6 @@
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:hge] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "rank", "pattern batsql.rank(X_0:bat[:any_1], X_1:any_2,
X_2:any_3):bat[:int] ", "SQLrank;", "return the ranked groups" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the sequence
with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
[ "batsql", "row_number", "pattern batsql.row_number(X_0:bat[:any_1],
X_1:any_2, X_2:any_3):bat[:int] ", "SQLrow_number;", "return the
row_numer-ed groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:bte], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:dbl], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
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
@@ -924,6 +924,57 @@ mvc_next_value(Client cntxt, MalBlkPtr m
throw(SQL, "sql.next_value", SQLSTATE(HY050) "Cannot generate next
sequence value %s.%s", sname, seqname);
}
+str
+mvc_next_value_bulk(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ backend *be = NULL;
+ str msg;
+ sql_schema *s;
+ sql_sequence *seq;
+ bat *res = getArgReference_bat(stk, pci, 0);
+ BUN card = *(BUN*)getArgReference_lng(stk, pci, 1);
+ const char *sname = *getArgReference_str(stk, pci, 2);
+ const char *seqname = *getArgReference_str(stk, pci, 3);
+ BAT *r = NULL;
+
+ (void)mb;
+ if ((msg = getBackendContext(cntxt, &be)) != NULL)
+ return msg;
+ if (!(s = mvc_bind_schema(be->mvc, sname)))
+ throw(SQL, "sql.next_value", SQLSTATE(3F000) "Cannot find the
schema %s", sname);
+ if (!mvc_schema_privs(be->mvc, s))
+ throw(SQL, "sql.next_value", SQLSTATE(42000) "Access denied for
%s to schema '%s'", get_string_global_var(be->mvc, "current_user"),
s->base.name);
+ if (!(seq = find_sql_sequence(be->mvc->session->tr, s, seqname)))
+ throw(SQL, "sql.next_value", SQLSTATE(HY050) "Cannot find the
sequence %s.%s", sname, seqname);
+ if (!(r = COLnew(0, TYPE_lng, card, TRANSIENT)))
+ throw(SQL, "sql.next_value", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+ lng start, inc, minv, maxv, end;
+
+ if (seqbulk_next_value(be->mvc->session->tr->store, seq, card, &start,
&inc, &minv, &maxv, &end)) {
+ be->last_id = end;
+ sqlvar_set_number(find_global_var(be->mvc,
mvc_bind_schema(be->mvc, "sys"), "last_id"), be->last_id);
+ lng c = start;
+ for(BUN i = 0; i<card; i++) {
+ if (c > maxv && minv && maxv)
+ c = minv;
+ if (c > maxv && !minv)
+ break;
+ if (BUNappend(r, &c, false) != GDK_SUCCEED) {
+ BBPreclaim(r);
+ throw(SQL, "sql.next_value", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
+ if ((i+1) < card)
+ c += inc;
+ }
+ (void)end;
+ assert(c == end);
+ BBPkeepref( *res = r->batCacheid );
+ return MAL_SUCCEED;
+ }
+ throw(SQL, "sql.next_value", SQLSTATE(HY050) "Cannot generate next
sequence value %s.%s", sname, seqname);
+}
+
/* str mvc_get_value(lng *res, str *sname, str *seqname); */
str
mvc_get_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -947,131 +998,10 @@ mvc_get_value(Client cntxt, MalBlkPtr mb
if (seq_get_value(m->session->tr->store, seq, res))
return MAL_SUCCEED;
+
throw(SQL, "sql.get_value", SQLSTATE(HY050) "Cannot get sequence value
%s.%s", sname, seqname);
}
-static str
-mvc_bat_next_get_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci, int (*bulk_func)(seqbulk *, lng *), const char *call, const char *action)
-{
- mvc *m = NULL;
- str msg = MAL_SUCCEED, sname = NULL, seqname = NULL;
- BAT *b = NULL, *c = NULL, *r = NULL, *it;
- BUN p, q;
- sql_schema *s = NULL;
- sql_sequence *seq = NULL;
- seqbulk *sb = NULL;
- BATiter bi = (BATiter) { .b = NULL }, ci = (BATiter) { .b = NULL };
- bat *res = getArgReference_bat(stk, pci, 0);
- bat schid = 0, seqid = 0;
-
- if (isaBatType(getArgType(mb, pci, 1)))
- schid = *getArgReference_bat(stk, pci, 1);
- else
- sname = *getArgReference_str(stk, pci, 1);
- if (isaBatType(getArgType(mb, pci, 2)))
- seqid = *getArgReference_bat(stk, pci, 2);
- else
- seqname = *getArgReference_str(stk, pci, 2);
-
- if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- sqlstore *store = m->session->tr->store;
-
- if (schid && !(b = BATdescriptor(schid))) {
- msg = createException(SQL, call, SQLSTATE(HY005) "Cannot access
column descriptor");
- goto bailout;
- }
- if (seqid && !(c = BATdescriptor(seqid))) {
- msg = createException(SQL, call, SQLSTATE(HY005) "Cannot access
column descriptor");
- goto bailout;
- }
- assert(b || c);
- it = b ? b : c; /* Either b or c must be set */
-
- if (!(r = COLnew(it->hseqbase, TYPE_lng, BATcount(it), TRANSIENT))) {
- msg = createException(SQL, call, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- goto bailout;
- }
-
- if (!BATcount(it))
- goto bailout; /* Success case */
-
- bi = bat_iterator(b);
- ci = bat_iterator(c);
-
- BATloop(it, p, q) {
- str nsname, nseqname;
- lng l;
-
- if (b)
- nsname = BUNtvar(bi, p);
- else
- nsname = sname;
- if (c)
- nseqname = BUNtvar(ci, p);
- else
- nseqname = seqname;
-
- if (!s || strcmp(s->base.name, nsname) != 0 || !seq ||
strcmp(seq->base.name, nseqname) != 0) {
- if (sb) {
- seqbulk_destroy(store, sb);
- sb = NULL;
- }
- seq = NULL;
- if ((!s || strcmp(s->base.name, nsname) != 0) && !(s =
mvc_bind_schema(m, nsname))) {
- msg = createException(SQL, call,
SQLSTATE(3F000) "Cannot find the schema %s", nsname);
- goto bailout1;
- }
- if (bulk_func == seqbulk_next_value &&
!mvc_schema_privs(m, s)) {
- msg = createException(SQL, call,
SQLSTATE(42000) "Access denied for %s to schema '%s'", get_string_global_var(m,
"current_user"), s->base.name);
- goto bailout1;
- }
- if (!(seq = find_sql_sequence(m->session->tr, s,
nseqname)) || !(sb = seqbulk_create(store, seq, BATcount(it)))) {
- msg = createException(SQL, call,
SQLSTATE(HY050) "Cannot find the sequence %s.%s", nsname, nseqname);
- goto bailout1;
- }
- }
- if (!bulk_func(sb, &l)) {
- msg = createException(SQL, call, SQLSTATE(HY050)
"Cannot %s sequence value %s.%s", action, nsname, nseqname);
- goto bailout1;
- }
- if (BUNappend(r, &l, false) != GDK_SUCCEED) {
- msg = createException(SQL, call, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- goto bailout1;
- }
- }
-bailout1:
- bat_iterator_end(&bi);
- bat_iterator_end(&ci);
-
-bailout:
- if (sb)
- seqbulk_destroy(store, sb);
- if (b)
- BBPunfix(b->batCacheid);
- if (c)
- BBPunfix(c->batCacheid);
- if (msg)
- BBPreclaim(r);
- else
- BBPkeepref(*res = r->batCacheid);
- return msg;
-}
-
-str
-mvc_bat_next_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
- return mvc_bat_next_get_value(cntxt, mb, stk, pci, seqbulk_next_value,
"sql.next_value", "generate next");
-}
-
-str
-mvc_bat_get_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
- return mvc_bat_next_get_value(cntxt, mb, stk, pci, seqbulk_get_value,
"sql.get_value", "get");
-}
-
str
mvc_getVersion(lng *version, const int *clientid)
{
@@ -1132,157 +1062,6 @@ mvc_restart_seq(Client cntxt, MalBlkPtr
return MAL_SUCCEED;
}
-str
-mvc_bat_restart_seq(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
- mvc *m = NULL;
- str msg = MAL_SUCCEED, sname = NULL, seqname = NULL;
- BAT *b = NULL, *c = NULL, *d = NULL, *r = NULL, *it;
- BUN p, q;
- sql_schema *s = NULL;
- sql_sequence *seq = NULL;
- seqbulk *sb = NULL;
- BATiter bi, ci, di;
- bat *res = getArgReference_bat(stk, pci, 0);
- bat schid = 0, seqid = 0, startid = 0;
- lng start = 0, *dptr = NULL;
-
- if (isaBatType(getArgType(mb, pci, 1)))
- schid = *getArgReference_bat(stk, pci, 1);
- else
- sname = *getArgReference_str(stk, pci, 1);
- if (isaBatType(getArgType(mb, pci, 2)))
- seqid = *getArgReference_bat(stk, pci, 2);
- else
- seqname = *getArgReference_str(stk, pci, 2);
- if (isaBatType(getArgType(mb, pci, 3)))
- startid = *getArgReference_bat(stk, pci, 3);
- else
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list