Changeset: db6c051e3401 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=db6c051e3401 Added Files: sql/test/BugTracker-2017/Tests/case.Bug-6386.sql sql/test/BugTracker-2017/Tests/case.Bug-6386.stable.err sql/test/BugTracker-2017/Tests/case.Bug-6386.stable.out sql/test/BugTracker-2017/Tests/exists.Bug-6392.sql sql/test/BugTracker-2017/Tests/exists.Bug-6392.stable.err sql/test/BugTracker-2017/Tests/exists.Bug-6392.stable.out sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.sql sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.sql sql/test/BugTracker-2017/Tests/too-large-decimals.Bug-6192.stable.err.int128 Removed Files: geom/sql/conformance/Tests/T3.stable.out.int128 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out gdk/gdk_aggr.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_hash.h gdk/gdk_imprints.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_sample.c gdk/gdk_select.c gdk/gdk_unique.c gdk/gdk_utils.c geom/sql/40_geom.sql geom/sql/conformance/Tests/T3.stable.out monetdb5/ChangeLog monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err.Windows monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows monetdb5/extras/rapi/rapi.c monetdb5/mal/mal_debugger.c monetdb5/mal/mal_listing.c monetdb5/modules/atoms/json.c monetdb5/modules/kernel/aggr.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/kernel/batstr.c monetdb5/modules/kernel/group.c monetdb5/modules/kernel/group.h monetdb5/modules/kernel/group.mal monetdb5/modules/kernel/microbenchmark.c monetdb5/modules/mal/batExtensions.c monetdb5/modules/mal/batcalc.c monetdb5/modules/mal/mat.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/sample.c monetdb5/modules/mal/txtsim.c monetdb5/optimizer/Tests/GCexample01.stable.out monetdb5/optimizer/Tests/dataflow.stable.out monetdb5/optimizer/Tests/tst4006.stable.out monetdb5/optimizer/opt_deadcode.c sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out sql/backends/monet5/UDF/pyapi/connection.c sql/backends/monet5/generator/generator.c sql/backends/monet5/prog.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_rank.mal sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/vaults/bam/bam_lib.c sql/common/sql_list.c sql/common/sql_string.c sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.stable.err sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.stable.out sql/scripts/25_debug.sql sql/scripts/51_sys_schema_extension.sql sql/server/rel_optimizer.c sql/server/rel_psm.c sql/server/rel_rel.c sql/server/rel_schema.c sql/server/rel_select.c sql/server/rel_sequence.c sql/server/rel_trans.c sql/server/rel_updates.c sql/server/sql_atom.c sql/server/sql_mvc.c sql/server/sql_parser.y sql/server/sql_qc.c sql/server/sql_scan.c sql/server/sql_semantic.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c sql/storage/bat/bat_utils.c sql/storage/bat/res_table.c sql/test/BugTracker-2009/Tests/bit_and.SF-2850341.stable.err sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err.Darwin sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err.Windows sql/test/BugTracker-2012/Tests/large-number-operation-strange-results.Bug-2929.stable.err sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out sql/test/BugTracker-2014/Tests/round.Bug-3542.stable.err sql/test/BugTracker-2015/Tests/large_join.Bug-3809.sql sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out sql/test/BugTracker-2016/Tests/storagemodel.stable.out sql/test/BugTracker-2016/Tests/storagemodel.stable.out.Darwin sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/create_table_as-missing_not_null.Bug-6329.stable.out sql/test/BugTracker-2017/Tests/too-large-decimals.Bug-6192.stable.err sql/test/BugTracker/Tests/explain.SF-1739353.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/BugTracker/Tests/limits_of_decimal.SF-1685357.stable.err sql/test/Tests/coalesce.stable.out sql/test/Tests/systemfunctions.stable.out sql/test/Tests/systemfunctions.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/leaks/Tests/check1.stable.out sql/test/leaks/Tests/check1.stable.out.int128 sql/test/leaks/Tests/check2.stable.out sql/test/leaks/Tests/check2.stable.out.int128 sql/test/leaks/Tests/check3.stable.out sql/test/leaks/Tests/check3.stable.out.int128 sql/test/leaks/Tests/check4.stable.out sql/test/leaks/Tests/check4.stable.out.int128 sql/test/leaks/Tests/check5.stable.out sql/test/leaks/Tests/check5.stable.out.int128 sql/test/leaks/Tests/select1.stable.out sql/test/leaks/Tests/select1.stable.out.int128 sql/test/leaks/Tests/select2.stable.out sql/test/leaks/Tests/select2.stable.out.int128 sql/test/leaks/Tests/temp1.stable.out sql/test/leaks/Tests/temp1.stable.out.int128 sql/test/mapi/Tests/sql_int128.stable.out.int128 sql/test/mergetables/Tests/mergequery.stable.out sql/test/pg_regress/Tests/float8.stable.err sql/test/pg_regress/Tests/float8.stable.err.Windows sql/test/pg_regress/Tests/int8.stable.err sql/test/pg_regress/Tests/int8.stable.out sql/test/pg_regress/Tests/interval.stable.err sql/test/pg_regress/Tests/interval.stable.out sql/test/pg_regress/Tests/numeric_big.stable.err sql/test/pg_regress/Tests/oid.stable.err sql/test/pg_regress/Tests/oid.stable.err.32bit sql/test/pg_regress/Tests/strings.stable.err sql/test/remote/Tests/partition_elim.stable.out sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: sqlextra Log Message:
Merged with default diffs (truncated from 22284 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 @@ -95,7 +95,7 @@ Ready. [ "aggr", "covar", "function aggr.covar(e1:bat[:sht], e2:bat[:sht]):sht;", "", "" ] [ "aggr", "exist", "command aggr.exist(b:bat[:any_2], h:any_1):bit ", "ALGexist;", "" ] [ "aggr", "exist", "command aggr.exist(b:bat[:any_2]):bit ", "SQLexist;", "" ] -[ "aggr", "exist", "command aggr.exist(v:any_2):bit ", "SQLexist_val;", "" ] +[ "aggr", "exist", "pattern aggr.exist(v:any_2):bit ", "SQLexist_val;", "" ] [ "aggr", "jsonaggr", "command aggr.jsonaggr(val:bat[:dbl]):str ", "JSONgroupStr;", "Aggregate the double values to array." ] [ "aggr", "jsonaggr", "command aggr.jsonaggr(val:bat[:str]):str ", "JSONgroupStr;", "Aggregate the string values to array." ] [ "aggr", "max", "command aggr.max(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:any_1] ", "AGGRmax3;", "" ] @@ -7689,17 +7689,29 @@ Ready. [ "geom", "setSRID", "command geom.setSRID(w:wkb, srid:int):wkb ", "wkbSetSRID;", "Sets the Reference System ID for this Geometry." ] [ "group", "group", "command group.group(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", "" ] [ "group", "group", "command group.group(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup2;", "" ] +[ "group", "group", "command group.group(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ] +[ "group", "group", "command group.group(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", "" ] [ "group", "groupdone", "command group.groupdone(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", "" ] [ "group", "groupdone", "command group.groupdone(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup2;", "" ] +[ "group", "groupdone", "command group.groupdone(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ] +[ "group", "groupdone", "command group.groupdone(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", "" ] [ "group", "multicolumn", "pattern group.multicolumn(b:bat[:any]...) (ref:bat[:oid], grp:bat[:oid], hist:bat[:any]) ", "GROUPmulticolumngroup;", "Derivation of a group index over multiple columns." ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup2;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup3;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup4;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup7;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup8;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup9;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup2;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup3;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup4;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup7;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup8;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup9;", "" ] [ "identifier", "#fromstr", "command identifier.#fromstr():void ", "IDfromString;", "Convert a string to an identifier without any check" ] [ "identifier", "#tostr", "command identifier.#tostr():void ", "IDtoString;", "Convert identifier to string equivalent" ] [ "identifier", "identifier", "command identifier.identifier(s:str):identifier ", "IDentifier;", "Cast a string to an identifer " ] @@ -7813,20 +7825,20 @@ Ready. [ "json", "unfold", "pattern json.unfold(val:json) (o:bat[:oid], k:bat[:str], v:bat[:json]) ", "JSONunfold;", "Expands the outermost JSON object into key-value pairs." ] [ "json", "valuearray", "command json.valuearray(val:json):json ", "JSONvalueArray;", "Expands the outermost JSON object values into a JSON value array." ] [ "json", "values", "command json.values(val:json):bat[:json] ", "JSONvalueTable;", "Expands the outermost JSON values." ] -[ "language", "assert", "unsafe command language.assert(v:bit, term:str):void ", "MALassertBit;", "" ] -[ "language", "assert", "unsafe command language.assert(v:int, term:str):void ", "MALassertInt;", "" ] -[ "language", "assert", "unsafe command language.assert(v:lng, term:str):void ", "MALassertLng;", "" ] -[ "language", "assert", "unsafe command language.assert(v:oid, term:str):void ", "MALassertOid;", "" ] -[ "language", "assert", "unsafe command language.assert(v:sht, term:str):void ", "MALassertSht;", "" ] -[ "language", "assert", "unsafe command language.assert(v:str, term:str):void ", "MALassertStr;", "" ] -[ "language", "assert", "unsafe pattern language.assert(v:any_1, pname:str, oper:str, val:any_2):void ", "MALassertTriple;", "Assertion test." ] +[ "language", "assert", "command language.assert(v:bit, term:str):void ", "MALassertBit;", "" ] +[ "language", "assert", "command language.assert(v:int, term:str):void ", "MALassertInt;", "" ] +[ "language", "assert", "command language.assert(v:lng, term:str):void ", "MALassertLng;", "" ] +[ "language", "assert", "command language.assert(v:oid, term:str):void ", "MALassertOid;", "" ] +[ "language", "assert", "command language.assert(v:sht, term:str):void ", "MALassertSht;", "" ] +[ "language", "assert", "command language.assert(v:str, term:str):void ", "MALassertStr;", "" ] +[ "language", "assert", "pattern language.assert(v:any_1, pname:str, oper:str, val:any_2):void ", "MALassertTriple;", "Assertion test." ] [ "language", "block", "pattern language.block(v:int, w:any...):int ", "deblockdataflow;", "Block on availability of all variables w, and then pass on v" ] [ "language", "call", "pattern language.call(s:bat[:str]):void ", "CMDcallBAT;", "Evaluate a program stored in a BAT." ] [ "language", "call", "pattern language.call(m:str, f:str):void ", "CMDcallFunction;", "" ] [ "language", "call", "pattern language.call(s:str):void ", "CMDcallString;", "Evaluate a MAL string program." ] [ "language", "dataflow", "pattern language.dataflow():bit ", "MALstartDataflow;", "The current guarded block is executed using dataflow control. " ] [ "language", "pass", "pattern language.pass(v:any_1):void ", "MALpass;", "Cheap instruction to disgard storage while retaining the dataflow dependency" ] -[ "language", "raise", "unsafe command language.raise(msg:str):str ", "CMDraise;", "Raise an exception labeled \n\twith a specific message." ] +[ "language", "raise", "command language.raise(msg:str):str ", "CMDraise;", "Raise an exception labeled \n\twith a specific message." ] [ "language", "register", "pattern language.register(m:str, f:str, code:str, help:str):void ", "CMDregisterFunction;", "Compile the code string to MAL and register it as a function." ] [ "language", "sink", "pattern language.sink(v:any...):void ", "MALgarbagesink;", "Variables to be considered together when triggering garbage collection.\nUsed in the dataflow blocks to avoid early release of values." ] [ "language", "source", "pattern language.source(f:str):void ", "CMDevalFile;", "Merge the instructions stored in the file with the current program." ] 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 @@ -103,7 +103,7 @@ Ready. [ "aggr", "covar", "function aggr.covar(e1:bat[:sht], e2:bat[:sht]):sht;", "", "" ] [ "aggr", "exist", "command aggr.exist(b:bat[:any_2], h:any_1):bit ", "ALGexist;", "" ] [ "aggr", "exist", "command aggr.exist(b:bat[:any_2]):bit ", "SQLexist;", "" ] -[ "aggr", "exist", "command aggr.exist(v:any_2):bit ", "SQLexist_val;", "" ] +[ "aggr", "exist", "pattern aggr.exist(v:any_2):bit ", "SQLexist_val;", "" ] [ "aggr", "jsonaggr", "command aggr.jsonaggr(val:bat[:dbl]):str ", "JSONgroupStr;", "Aggregate the double values to array." ] [ "aggr", "jsonaggr", "command aggr.jsonaggr(val:bat[:str]):str ", "JSONgroupStr;", "Aggregate the string values to array." ] [ "aggr", "max", "command aggr.max(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:any_1] ", "AGGRmax3;", "" ] @@ -10045,17 +10045,29 @@ Ready. [ "geom", "setSRID", "command geom.setSRID(w:wkb, srid:int):wkb ", "wkbSetSRID;", "Sets the Reference System ID for this Geometry." ] [ "group", "group", "command group.group(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", "" ] [ "group", "group", "command group.group(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup2;", "" ] +[ "group", "group", "command group.group(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ] +[ "group", "group", "command group.group(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", "" ] [ "group", "groupdone", "command group.groupdone(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", "" ] [ "group", "groupdone", "command group.groupdone(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup2;", "" ] +[ "group", "groupdone", "command group.groupdone(b:bat[:any_1]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ] +[ "group", "groupdone", "command group.groupdone(b:bat[:any_1], s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", "" ] [ "group", "multicolumn", "pattern group.multicolumn(b:bat[:any]...) (ref:bat[:oid], grp:bat[:oid], hist:bat[:any]) ", "GROUPmulticolumngroup;", "Derivation of a group index over multiple columns." ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup2;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup3;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup4;", "" ] [ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup7;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup8;", "" ] +[ "group", "subgroup", "command group.subgroup(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup9;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup2;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup3;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup4;", "" ] [ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup7;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup8;", "" ] +[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1], s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup9;", "" ] [ "identifier", "#fromstr", "command identifier.#fromstr():void ", "IDfromString;", "Convert a string to an identifier without any check" ] [ "identifier", "#tostr", "command identifier.#tostr():void ", "IDtoString;", "Convert identifier to string equivalent" ] [ "identifier", "identifier", "command identifier.identifier(s:str):identifier ", "IDentifier;", "Cast a string to an identifer " ] 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 @@ -1131,10 +1131,16 @@ str FCTshutdown(Client cntxt, MalBlkPtr str GROUPmulticolumngroup(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str GRPgroup1(bat *ngid, bat *next, bat *nhis, const bat *bid); str GRPgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid); +str GRPgroup3(bat *ngid, bat *next, const bat *bid); +str GRPgroup4(bat *ngid, bat *next, const bat *bid, const bat *sid); str GRPsubgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *gid); str GRPsubgroup3(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid, const bat *gid); str GRPsubgroup4(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *gid, const bat *eid, const bat *hid); str GRPsubgroup5(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid, const bat *gid, const bat *eid, const bat *hid); +str GRPsubgroup6(bat *ngid, bat *next, const bat *bid, const bat *gid); +str GRPsubgroup7(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat *gid); +str GRPsubgroup8(bat *ngid, bat *next, const bat *bid, const bat *gid, const bat *eid, const bat *hid); +str GRPsubgroup9(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat *gid, const bat *eid, const bat *hid); str IDentifier(identifier *retval, str *in); int IDfromString(str src, int *len, identifier *retval); str IDprelude(void *ret); diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -84,38 +84,46 @@ BATgroupaggrinit(BAT *b, BAT *g, BAT *e, ngrp = 1; } else if (e == NULL) { /* we need to find out the min and max of g */ - min = oid_nil; /* note that oid_nil > 0! (unsigned) */ - max = 0; - if (BATtdense(g)) { - min = g->tseqbase; - max = g->tseqbase + BATcount(g) - 1; - } else if (g->tsorted) { - gids = (const oid *) Tloc(g, 0); - /* find first non-nil */ - for (i = 0, ngrp = BATcount(g); i < ngrp; i++, gids++) { - if (*gids != oid_nil) { - min = *gids; - break; + PROPrec *prop; + + prop = BATgetprop(g, GDK_MAX_VALUE); + if (prop) { + min = 0; /* just assume it starts at 0 */ + max = prop->v.val.oval; + } else { + min = oid_nil; /* note that oid_nil > 0! (unsigned) */ + max = 0; + if (BATtdense(g)) { + min = g->tseqbase; + max = g->tseqbase + BATcount(g) - 1; + } else if (g->tsorted) { + gids = (const oid *) Tloc(g, 0); + /* find first non-nil */ + for (i = 0, ngrp = BATcount(g); i < ngrp; i++, gids++) { + if (*gids != oid_nil) { + min = *gids; + break; + } } + if (min != oid_nil) { + /* found a non-nil, max must be last + * value (and there is one!) */ + max = * (const oid *) Tloc(g, BUNlast(g) - 1); + } + } else { + /* we'll do a complete scan */ + gids = (const oid *) Tloc(g, 0); + for (i = 0, ngrp = BATcount(g); i < ngrp; i++, gids++) { + if (*gids != oid_nil) { + if (*gids < min) + min = *gids; + if (*gids > max) + max = *gids; + } + } + /* note: max < min is possible if all groups + * are nil (or BATcount(g)==0) */ } - if (min != oid_nil) { - /* found a non-nil, max must be last - * value (and there is one!) */ - max = * (const oid *) Tloc(g, BUNlast(g) - 1); - } - } else { - /* we'll do a complete scan */ - gids = (const oid *) Tloc(g, 0); - for (i = 0, ngrp = BATcount(g); i < ngrp; i++, gids++) { - if (*gids != oid_nil) { - if (*gids < min) - min = *gids; - if (*gids > max) - max = *gids; - } - } - /* note: max < min is possible if all groups - * are nil (or BATcount(g)==0) */ } ngrp = max < min ? 0 : max - min + 1; } else { diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -246,10 +246,10 @@ BATdense(oid hseq, oid tseq, BUN cnt) BAT *bn; bn = COLnew(hseq, TYPE_void, 0, TRANSIENT); - if (bn == NULL) - return NULL; - BATtseqbase(bn, tseq); - BATsetcount(bn, cnt); + if (bn != NULL) { + BATtseqbase(bn, tseq); + BATsetcount(bn, cnt); + } return bn; } @@ -505,6 +505,8 @@ BATclear(BAT *b, int force) HASHdestroy(b); IMPSdestroy(b); OIDXdestroy(b); + PROPdestroy(b->tprops); + b->tprops = NULL; /* we must dispose of all inserted atoms */ if (force && BATatoms[b->ttype].atomDel == NULL) { @@ -1055,6 +1057,8 @@ BUNappend(BAT *b, const void *t, bit for IMPSdestroy(b); /* no support for inserts in imprints yet */ OIDXdestroy(b); + PROPdestroy(b->tprops); + b->tprops = NULL; if (b->thash == (Hash *) 1) { /* don't bother first loading the hash to then change it */ HASHdestroy(b); @@ -1118,6 +1122,8 @@ BUNdelete(BAT *b, oid o) IMPSdestroy(b); OIDXdestroy(b); HASHdestroy(b); + PROPdestroy(b->tprops); + b->tprops = NULL; return GDK_SUCCEED; } @@ -1155,6 +1161,8 @@ BUNinplace(BAT *b, BUN p, const void *t, b->tnil = 0; } HASHdestroy(b); + PROPdestroy(b->tprops); + b->tprops = NULL; Treplacevalue(b, BUNtloc(bi, p), t); tt = b->ttype; @@ -1372,6 +1380,7 @@ BATsetcount(BAT *b, BUN cnt) { /* head column is always VOID, and some head properties never change */ assert(b->hseqbase != oid_nil); + assert(cnt <= BUN_MAX); b->batCount = cnt; b->batDirtydesc = TRUE; diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -490,6 +490,8 @@ BATappend(BAT *b, BAT *n, BAT *s, bit fo IMPSdestroy(b); /* imprints do not support updates yet */ OIDXdestroy(b); + PROPdestroy(b->tprops); + b->tprops = NULL; if (b->thash == (Hash *) 1 || BATcount(b) == 0) { /* don't bother first loading the hash to then change * it, or updating the hash if we replace the heap */ @@ -749,6 +751,8 @@ BATdel(BAT *b, BAT *d) /* not sure about these anymore */ b->tnosorted = b->tnorevsorted = 0; b->tnokey[0] = b->tnokey[1] = 0; + PROPdestroy(b->tprops); + b->tprops = NULL; return GDK_SUCCEED; } @@ -1302,21 +1306,17 @@ BATsort(BAT **sorted, BAT **order, BAT * *sorted = bn; } if (order) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list