Changeset: 29eb4f7ce81f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/29eb4f7ce81f
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/exports.stable.out
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_result.h
        sql/backends/monet5/sql_statement.c
        sql/storage/bat/bat_table.c
        sql/storage/bat/res_table.c
        sql/storage/sql_storage.h
        sql/test/SQLancer/Tests/sqlancer10.test
        tools/monetdbe/monetdbe.c
Branch: nested
Log Message:

pass multiset info to result set


diffs (truncated from 599 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -46409,6 +46409,11 @@ pattern json.dump(X_0:json):bat[:str]
 JSONdump
 (empty)
 json
+epilogue
+command json.epilogue():void
+JSONepilogue
+(empty)
+json
 filter
 command json.filter(X_0:json, X_1:str):json
 JSONfilter
@@ -46524,6 +46529,16 @@ command json.number(X_0:json):dbl
 JSONjson2number
 Convert simple JSON values to a double, return nil upon error.
 json
+prelude
+pattern json.prelude():void
+JSONprelude
+(empty)
+json
+read_json
+pattern json.read_json(X_0:str):bat[:json]
+JSONread_json
+Reads json file into a table
+json
 renderarray
 pattern json.renderarray(X_0:any...):json
 JSONrenderarray
@@ -49145,7 +49160,7 @@ SQLfirst_value
 return the first value of groups
 sql
 from_json
-pattern sql.from_json(X_0:json, X_1:ptr):bat[:any]...
+pattern sql.from_json(X_0:bat?[:json], X_1:ptr):bat[:any]...
 SQLfrom_json
 Reads json string into table of nested/multiset structures
 sql
@@ -49455,20 +49470,20 @@ mvc_restart_seq
 restart the sequence with value start
 sql
 resultSet
-unsafe pattern sql.resultSet(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:int], X_4:bat[:int], X_5:any...):int
+unsafe pattern sql.resultSet(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:int], X_4:bat[:int], X_5:bat[:int], X_6:bat[:any]...):int
+mvc_result_set_wrap
+Prepare a table result set for the client in default CSV format
+sql
+resultSet
+unsafe pattern sql.resultSet(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:int], X_4:bat[:int], X_5:bat[:int], X_6:any...):int
 mvc_row_result_wrap
 Prepare a table result set for the client front-end
 sql
 resultSet
-unsafe pattern sql.resultSet(X_0:str, X_1:str, X_2:str, X_3:int, X_4:int, 
X_5:int, X_6:any):int
+unsafe pattern sql.resultSet(X_0:str, X_1:str, X_2:str, X_3:int, X_4:int, 
X_5:int, X_6:int, X_7:any):int
 mvc_scalar_value_wrap
 Prepare a table result set for the client front-end.
 sql
-resultSet
-unsafe pattern sql.resultSet(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:int], X_4:bat[:int], X_5:bat[:any]...):int
-mvc_table_result_wrap
-Prepare a table result set for the client in default CSV format
-sql
 resume_log_flushing
 unsafe pattern sql.resume_log_flushing():void
 SQLresume_log_flushing
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1633,7 +1633,7 @@ str mvc_commit(mvc *c, int chain, const 
 int mvc_create_column(sql_column **col, mvc *m, sql_table *t, const char 
*name, sql_subtype *tpe);
 int mvc_create_table(sql_table **t, mvc *m, sql_schema *s, const char *name, 
int tt, bit system, int persistence, int commit_action, int sz, bit properties);
 void mvc_query_processed(mvc *m);
-int mvc_result_column(backend *be, const char *tn, const char *name, const 
char *typename, int digits, int scale, BAT *b);
+int mvc_result_column(backend *be, const char *tn, const char *name, const 
char *typename, int digits, int scale, int multiset, BAT *b);
 int mvc_result_table(backend *be, oid query_id, int nr_cols, mapi_query_t 
type);
 str mvc_rollback(mvc *c, int chain, const char *name, bool 
disabling_auto_commit);
 str number2name(str s, int len, int i);
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
@@ -2548,7 +2548,7 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        return msg;
 }
 
-/* unsafe pattern resultSet(tbl:bat[:str], attr:bat[:str], tpe:bat[:str], 
len:bat[:int],scale:bat[:int], cols:bat[:any]...) :int */
+/* unsafe pattern resultSet(tbl:bat[:str], attr:bat[:str], tpe:bat[:str], 
len:bat[:int],scale:bat[:int],multiset:bat[:int], cols:bat[:any]...) :int */
 /* New result set rendering infrastructure */
 
 static str
@@ -2560,15 +2560,16 @@ mvc_result_set_wrap( Client cntxt, MalBl
        bat tpeId= *getArgReference_bat(stk, pci,3);
        bat lenId= *getArgReference_bat(stk, pci,4);
        bat scaleId= *getArgReference_bat(stk, pci,5);
+       bat multisetId= *getArgReference_bat(stk, pci,6);
        bat bid;
        int i, res, ok;
        const char *tblname, *colname, *tpename;
        str msg= MAL_SUCCEED;
-       int *digits, *scaledigits;
+       int *digits, *scaledigits, *ms;
        oid o = 0;
-       BATiter itertbl,iteratr,itertpe,iterdig,iterscl;
+       BATiter itertbl,iteratr,itertpe,iterdig,iterscl,iterms;
        backend *be = NULL;
-       BAT *b = NULL, *tbl = NULL, *atr = NULL, *tpe = NULL,*len = NULL,*scale 
= NULL;
+       BAT *b = NULL, *tbl = NULL, *atr = NULL, *tpe = NULL,*len = NULL,*scale 
= NULL, *multiset = NULL;
 
        if ((msg = getBackendContext(cntxt, &be)) != NULL)
                return msg;
@@ -2578,7 +2579,7 @@ mvc_result_set_wrap( Client cntxt, MalBl
                msg = createException(SQL, "sql.resultSet", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
                goto wrapup_result_set;
        }
-       res = *res_id = mvc_result_table(be, mb->tag, pci->argc - (pci->retc + 
5), Q_TABLE);
+       res = *res_id = mvc_result_table(be, mb->tag, pci->argc - (pci->retc + 
6), Q_TABLE);
        BBPunfix(b->batCacheid);
        if (res < 0) {
                msg = createException(SQL, "sql.resultSet", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
@@ -2590,7 +2591,8 @@ mvc_result_set_wrap( Client cntxt, MalBl
        tpe = BATdescriptor(tpeId);
        len = BATdescriptor(lenId);
        scale = BATdescriptor(scaleId);
-       if (tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale 
== NULL)
+       multiset = BATdescriptor(multisetId);
+       if (tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale 
== NULL || multiset == NULL)
                goto wrapup_result_set;
        /* mimic the old rsColumn approach; */
        itertbl = bat_iterator(tbl);
@@ -2598,10 +2600,12 @@ mvc_result_set_wrap( Client cntxt, MalBl
        itertpe = bat_iterator(tpe);
        iterdig = bat_iterator(len);
        iterscl = bat_iterator(scale);
+       iterms = bat_iterator(multiset);
        digits = (int*) iterdig.base;
        scaledigits = (int*) iterscl.base;
-
-       for( i = 6; msg == MAL_SUCCEED && i< pci->argc; i++, o++){
+       ms = (int*) iterms.base;
+
+       for( i = 7; msg == MAL_SUCCEED && i< pci->argc; i++, o++){
                bid = *getArgReference_bat(stk,pci,i);
                tblname = BUNtvar(itertbl,o);
                colname = BUNtvar(iteratr,o);
@@ -2609,7 +2613,7 @@ mvc_result_set_wrap( Client cntxt, MalBl
                b = BATdescriptor(bid);
                if ( b == NULL)
                        msg = createException(SQL, "sql.resultSet", 
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
-               else if (mvc_result_column(be, tblname, colname, tpename, 
*digits++, *scaledigits++, b))
+               else if (mvc_result_column(be, tblname, colname, tpename, 
*digits++, *scaledigits++, *ms++, b))
                        msg = createException(SQL, "sql.resultSet", 
SQLSTATE(42000) "Cannot access column descriptor %s.%s",tblname,colname);
                if( b)
                        BBPunfix(bid);
@@ -2619,6 +2623,7 @@ mvc_result_set_wrap( Client cntxt, MalBl
        bat_iterator_end(&itertpe);
        bat_iterator_end(&iterdig);
        bat_iterator_end(&iterscl);
+       bat_iterator_end(&iterms);
        /* now send it to the channel cntxt->fdout */
        if (bstream_getoob(cntxt->fdin))
                msg = createException(SQL, "sql.resultSet", SQLSTATE(HY000) 
"Query aboted");
@@ -2633,6 +2638,7 @@ mvc_result_set_wrap( Client cntxt, MalBl
        if( tpe) BBPunfix(tpeId);
        if( len) BBPunfix(lenId);
        if( scale) BBPunfix(scaleId);
+       if( multiset) BBPunfix(multisetId);
        return msg;
 }
 
@@ -2718,7 +2724,7 @@ mvc_export_table_wrap( Client cntxt, Mal
                b = BATdescriptor(bid);
                if ( b == NULL)
                        msg = createException(SQL, "sql.resultSet", 
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
-               else if (mvc_result_column(be, tblname, colname, tpename, 
*digits++, *scaledigits++, b))
+               else if (mvc_result_column(be, tblname, colname, tpename, 
*digits++, *scaledigits++, MS_VALUE, b))
                        msg = createException(SQL, "sql.resultSet", 
SQLSTATE(42000) "Cannot access column descriptor %s.%s",tblname,colname);
                if( b)
                        BBPunfix(bid);
@@ -2791,7 +2797,7 @@ mvc_export_table_wrap( Client cntxt, Mal
        return msg;
 }
 
-/* unsafe pattern resultSet(tbl:bat[:str], attr:bat[:str], tpe:bat[:str], 
len:bat[:int],scale:bat[:int], cols:any...) :int */
+/* unsafe pattern resultSet(tbl:bat[:str], attr:bat[:str], tpe:bat[:str], 
len:bat[:int],scale:bat[:int],multiset:bat[:int],cols:any...) :int */
 str
 mvc_row_result_wrap( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
@@ -2801,20 +2807,21 @@ mvc_row_result_wrap( Client cntxt, MalBl
        bat tpeId= *getArgReference_bat(stk, pci,3);
        bat lenId= *getArgReference_bat(stk, pci,4);
        bat scaleId= *getArgReference_bat(stk, pci,5);
+       bat multisetId= *getArgReference_bat(stk, pci,6);
        int i, res, ok;
        const char *tblname, *colname, *tpename;
        str msg= MAL_SUCCEED;
-       int *digits, *scaledigits;
+       int *digits, *scaledigits, *ms;
        oid o = 0;
-       BATiter itertbl,iteratr,itertpe,iterdig,iterscl;
+       BATiter itertbl,iteratr,itertpe,iterdig,iterscl,iterms;
        backend *be = NULL;
        ptr v;
        int mtype;
-       BAT *tbl = NULL, *atr = NULL, *tpe = NULL, *len = NULL, *scale = NULL;
+       BAT *tbl = NULL, *atr = NULL, *tpe = NULL, *len = NULL, *scale = NULL, 
*multiset = NULL;
 
        if ((msg = getBackendContext(cntxt, &be)) != NULL)
                return msg;
-       res = *res_id = mvc_result_table(be, mb->tag, pci->argc - (pci->retc + 
5), Q_TABLE);
+       res = *res_id = mvc_result_table(be, mb->tag, pci->argc - (pci->retc + 
6), Q_TABLE);
        if (res < 0) {
                msg = createException(SQL, "sql.resultSet", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                goto wrapup_result_set;
@@ -2825,6 +2832,7 @@ mvc_row_result_wrap( Client cntxt, MalBl
        tpe = BATdescriptor(tpeId);
        len = BATdescriptor(lenId);
        scale = BATdescriptor(scaleId);
+       multiset = BATdescriptor(multisetId);
        if( tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale 
== NULL)
                goto wrapup_result_set;
        /* mimic the old rsColumn approach; */
@@ -2833,10 +2841,12 @@ mvc_row_result_wrap( Client cntxt, MalBl
        itertpe = bat_iterator(tpe);
        iterdig = bat_iterator(len);
        iterscl = bat_iterator(scale);
+       iterms = bat_iterator(multiset);
        digits = (int*) iterdig.base;
        scaledigits = (int*) iterscl.base;
-
-       for( i = 6; msg == MAL_SUCCEED && i< pci->argc; i++, o++){
+       ms = (int*) iterms.base;
+
+       for( i = 7; msg == MAL_SUCCEED && i< pci->argc; i++, o++){
                tblname = BUNtvar(itertbl,o);
                colname = BUNtvar(iteratr,o);
                tpename = BUNtvar(itertpe,o);
@@ -2845,13 +2855,14 @@ mvc_row_result_wrap( Client cntxt, MalBl
                mtype = getArgType(mb, pci, i);
                if (ATOMextern(mtype))
                        v = *(ptr *) v;
-               if ((ok = mvc_result_value(be, tblname, colname, tpename, 
*digits++, *scaledigits++, v, mtype) < 0)) {
+               if ((ok = mvc_result_value(be, tblname, colname, tpename, 
*digits++, *scaledigits++, *ms++, v, mtype) < 0)) {
                        msg = createException(SQL, "sql.rsColumn", 
SQLSTATE(45000) "Result set construction failed: %s", mvc_export_error(be, 
be->out, ok));
                        bat_iterator_end(&itertbl);
                        bat_iterator_end(&iteratr);
                        bat_iterator_end(&itertpe);
                        bat_iterator_end(&iterdig);
                        bat_iterator_end(&iterscl);
+                       bat_iterator_end(&iterms);
                        goto wrapup_result_set;
                }
        }
@@ -2860,6 +2871,7 @@ mvc_row_result_wrap( Client cntxt, MalBl
        bat_iterator_end(&itertpe);
        bat_iterator_end(&iterdig);
        bat_iterator_end(&iterscl);
+       bat_iterator_end(&iterms);
        if (!msg && (ok = mvc_export_result(cntxt->sqlcontext, cntxt->fdout, 
res, true, cntxt->qryctx.starttime, mb->optimize)) < 0)
                msg = createException(SQL, "sql.resultSet", SQLSTATE(45000) 
"Result set construction failed: %s", mvc_export_error(cntxt->sqlcontext, 
cntxt->fdout, ok));
   wrapup_result_set:
@@ -2871,6 +2883,7 @@ mvc_row_result_wrap( Client cntxt, MalBl
        if( tpe) BBPunfix(tpeId);
        if( len) BBPunfix(lenId);
        if( scale) BBPunfix(scaleId);
+       if( multiset) BBPunfix(multisetId);
        return msg;
 }
 
@@ -2956,7 +2969,7 @@ mvc_export_row_wrap( Client cntxt, MalBl
                mtype = getArgType(mb, pci, i);
                if (ATOMextern(mtype))
                        v = *(ptr *) v;
-               if ((ok = mvc_result_value(be, tblname, colname, tpename, 
*digits++, *scaledigits++, v, mtype)) < 0) {
+               if ((ok = mvc_result_value(be, tblname, colname, tpename, 
*digits++, *scaledigits++, MS_VALUE, v, mtype)) < 0) {
                        msg = createException(SQL, "sql.rsColumn", 
SQLSTATE(45000) "Result set construction failed: %s", mvc_export_error(be, s, 
ok));
                        bat_iterator_end(&itertbl);
                        bat_iterator_end(&iteratr);
@@ -3029,35 +3042,6 @@ mvc_export_row_wrap( Client cntxt, MalBl
        return msg;
 }
 
-str
-mvc_table_result_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
-       str res = MAL_SUCCEED;
-       backend *be = NULL;
-       str msg;
-       int *res_id;
-       int nr_cols;
-       mapi_query_t qtype;
-
-       if ( pci->argc > 6)
-               return mvc_result_set_wrap(cntxt,mb,stk,pci);
-
-       assert(0);
-       res_id = getArgReference_int(stk, pci, 0);
-       nr_cols = *getArgReference_int(stk, pci, 1);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to