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

Reply via email to