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