Changeset: 1fa3c50e6852 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1fa3c50e6852
Added Files:
        sql/backends/monet5/mal_backend.c
        sql/backends/monet5/mal_backend.h
        sql/backends/monet5/sql_statistics.c
        sql/backends/monet5/sql_statistics.h
        sql/scripts/41_jsonstore.sql
        sql/scripts/80_statistics.sql
        sql/test/BugTracker-2013/Tests/avg_needs_abort_on_error.Bug-3329.sql
        
sql/test/BugTracker-2013/Tests/avg_needs_abort_on_error.Bug-3329.stable.err
        
sql/test/BugTracker-2013/Tests/avg_needs_abort_on_error.Bug-3329.stable.out
        
sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.sql
        
sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err
        
sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.out
        sql/test/BugTracker-2013/Tests/constraint_checking.Bug_3335.sql
        sql/test/BugTracker-2013/Tests/incorrect_subquery_delete.Bug-3315.sql
        
sql/test/BugTracker-2013/Tests/incorrect_subquery_delete.Bug-3315.stable.err
        
sql/test/BugTracker-2013/Tests/incorrect_subquery_delete.Bug-3315.stable.out
        sql/test/BugTracker-2013/Tests/mitosis-floor.Bug-3330.sql
        sql/test/BugTracker-2013/Tests/mitosis-floor.Bug-3330.stable.err
        sql/test/BugTracker-2013/Tests/mitosis-floor.Bug-3330.stable.out
        sql/test/BugTracker-2013/Tests/pivot.Bug-3339.sql
        sql/test/BugTracker-2013/Tests/qualified_aggrname.Bug-3332.sql
        sql/test/BugTracker-2013/Tests/qualified_aggrname.Bug-3332.stable.err
        sql/test/BugTracker-2013/Tests/qualified_aggrname.Bug-3332.stable.out
        
sql/test/BugTracker-2013/Tests/unique_constraint_on_declared_table.Bug-3319.sql
        
sql/test/BugTracker-2013/Tests/unique_constraint_on_declared_table.Bug-3319.stable.err
        
sql/test/BugTracker-2013/Tests/unique_constraint_on_declared_table.Bug-3319.stable.out
        sql/test/BugTracker-2013/Tests/update_on_declared_table.Bug-3318.sql
        
sql/test/BugTracker-2013/Tests/update_on_declared_table.Bug-3318.stable.err
        
sql/test/BugTracker-2013/Tests/update_on_declared_table.Bug-3318.stable.out
Removed Files:
        monetdb5/optimizer/Tests/LICENSE
        monetdb5/optimizer/Tests/Mexample.mx
Modified Files:
        NT/monetdb_config.h.in
        clients/Tests/exports.stable.out
        configure.ag
        gdk/gdk_group.c
        gdk/gdk_heap.c
        gdk/gdk_posix.c
        gdk/gdk_posix.h
        gdk/gdk_storage.c
        gdk/gdk_system.c
        gdk/gdk_system.h
        geom/sql/Tests/basic.stable.out
        geom/sql/Tests/relation.stable.out
        geom/sql/Tests/spatial.stable.out
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_recycle.c
        monetdb5/mal/mal_recycle.h
        monetdb5/mal/mal_resource.c
        monetdb5/mal/mal_resource.h
        monetdb5/modules/atoms/Tests/xml00.mal
        monetdb5/modules/atoms/Tests/xml00.stable.out
        monetdb5/modules/atoms/Tests/xml01.mal
        monetdb5/modules/atoms/Tests/xml01.stable.out
        monetdb5/modules/atoms/Tests/xml02.mal
        monetdb5/modules/atoms/Tests/xml02.stable.out
        monetdb5/modules/atoms/Tests/xml03.mal
        monetdb5/modules/atoms/Tests/xml03.stable.out
        monetdb5/modules/atoms/Tests/xml04.mal
        monetdb5/modules/atoms/Tests/xml04.stable.out
        monetdb5/modules/atoms/Tests/xml05.mal
        monetdb5/modules/atoms/Tests/xml05.stable.out
        monetdb5/modules/atoms/Tests/xml10.mal
        monetdb5/modules/atoms/Tests/xml10.stable.out
        monetdb5/modules/atoms/batxml.c
        monetdb5/modules/atoms/batxml.mal
        monetdb5/modules/atoms/uuid.c
        monetdb5/modules/atoms/uuid.h
        monetdb5/modules/atoms/uuid.mal
        monetdb5/modules/atoms/xml.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/algebra.h
        monetdb5/modules/kernel/algebra.mal
        monetdb5/modules/kernel/microbenchmark.c
        monetdb5/modules/kernel/microbenchmark.h
        monetdb5/modules/kernel/microbenchmark.mal
        monetdb5/modules/mal/tablet.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_recycler.c
        monetdb5/optimizer/opt_support.c
        sql/backends/monet5/Makefile.ag
        sql/backends/monet5/Tests/optimizers.stable.err
        sql/backends/monet5/Tests/optimizers.stable.out
        sql/backends/monet5/UDF/udf.c
        sql/backends/monet5/UDF/udf_impl.h
        sql/backends/monet5/datacell/basket.c
        sql/backends/monet5/datacell/datacell.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/rest/rest_jsonstore.c
        sql/backends/monet5/rest/rest_jsonstore_handle_get.c
        sql/backends/monet5/rest/rest_jsonstore_handle_get.h
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_gencode.h
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_result.h
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/vaults/fits.c
        sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/04.stable.out
        sql/benchmarks/tpch/Tests/01-22.stable.out
        sql/benchmarks/tpch/Tests/02.stable.out
        sql/benchmarks/tpch/Tests/04.stable.out
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/include/sql_relation.h
        sql/rel.txt
        sql/scripts/Makefile.ag
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/rel_updates.c
        sql/server/sql_parser.y
        sql/server/sql_semantic.h
        
sql/test/BugDay_2005-10-06_2.8/Tests/MapiClient-dump.SF-905851.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/var_char_cast_truncate.SF-1150907.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/timestamp_fraction.SF-1357342.stable.out
        sql/test/BugTracker-2008/Tests/OOM_query.SF-2457195.stable.out
        sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.stable.out
        
sql/test/BugTracker-2008/Tests/sql_command_kills_db.SF-2233677.stable.err
        sql/test/BugTracker-2009/Tests/correlated-selection-bug.stable.out
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
        
sql/test/BugTracker-2009/Tests/double_count_limit_bug.SF-2862146.stable.out
        sql/test/BugTracker-2009/Tests/mclient-lsql-D.stable.out
        
sql/test/BugTracker-2009/Tests/name_clash_with_dump.SF-2780395.stable.out
        sql/test/BugTracker-2010/Tests/join_problem.Bug-2694.stable.out
        sql/test/BugTracker-2011/Tests/aggregate-in-subquery.Bug-2739.stable.out
        sql/test/BugTracker-2011/Tests/case-overflow.Bug-2239.stable.out
        sql/test/BugTracker-2011/Tests/count-count-distinct.Bug-2808.stable.out
        sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
        sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
        
sql/test/BugTracker-2011/Tests/interrupted-initialization.Bug-2875.stable.out
        sql/test/BugTracker-2011/Tests/rand-with-seed.Bug-2900.stable.out
        
sql/test/BugTracker-2012/Tests/aggregate_vs_positional_column_crash.Bug-3085.stable.out
        sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err
        sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.out
        
sql/test/BugTracker-2012/Tests/scalar_subquery_with_alias.Bug-3093.stable.out
        sql/test/BugTracker-2012/Tests/simple_select.Bug-2988.stable.out
        
sql/test/BugTracker-2012/Tests/table_function_with_column_subselects.Bug-3172.stable.err
        sql/test/BugTracker-2013/Tests/All
        sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out
        sql/test/BugTracker-2013/Tests/php-size-limit-bug.SQL.bat
        sql/test/BugTracker-2013/Tests/php-size-limit-bug.SQL.sh
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit
        sql/test/BugTracker/Tests/multi-column-constraint.SF-1964587.stable.out
        sql/test/BugTracker/Tests/rank_over.SF-1691098.stable.out
        
sql/test/BugTracker/Tests/set_sql_debug_64__breaking_the_DB.SF-1906287.stable.out
        sql/test/BugTracker/Tests/with_only_once.SF-1720293.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out
        sql/test/Dump/Tests/dump-empty.stable.out
        sql/test/Dump/Tests/dump.stable.out
        sql/test/Tests/marcin3.stable.err
        sql/test/Tests/order_by_complex_exp.stable.out
        sql/test/Tests/round.stable.out
        sql/test/Tests/string.stable.out
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions_nogeom.stable.out
        sql/test/UserDump/Tests/create.stable.out
        sql/test/VOC/Tests/VOC.stable.out
        sql/test/bugs/Tests/case_substring.stable.out
        sql/test/bugs/Tests/crash_order_by.stable.err
        sql/test/bugs/Tests/create_insert_select_aggr-bug-00001.stable.out
        sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
        sql/test/bugs/Tests/polymorphism.stable.out
        sql/test/bugs/Tests/selectlist_subquery-sf-1208599.stable.out
        sql/test/bugs/Tests/simple_view.stable.out
        
sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out
        sql/test/bugs/Tests/subselect_single_value-bug-sf-962099.stable.out
        sql/test/bugs/Tests/zero_or_one_bug.stable.out
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1_nogeom.stable.out
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2_nogeom.stable.out
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3_nogeom.stable.out
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4_nogeom.stable.out
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5_nogeom.stable.out
        sql/test/mapi/Tests/php_monetdb.SQL.bat
        sql/test/mapi/Tests/php_monetdb.SQL.sh
        sql/test/mapi/Tests/php_monetdb.stable.out
        sql/test/mapi/Tests/php_monetdb_nogeom.SQL.bat
        sql/test/mapi/Tests/php_monetdb_nogeom.SQL.sh
        sql/test/sql_xml/Tests/xml.stable.out
        sql/test/sql_xml/Tests/xmlelement_segfault.SF-2812767.stable.out
        sql/test/testdb/Tests/testdb-dump.stable.out
        tools/merovingian/ChangeLog.Feb2013
        tools/merovingian/client/monetdb.c
Branch: mutation
Log Message:

merge with default


diffs (truncated from 12337 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -148,7 +148,8 @@
 #define HAVE_FTIME 1
 
 /* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
+#define HAVE_FTRUNCATE 1
+#define ftruncate(fd, sz)      (_chsize_s((fd), (__int64) (sz)) == 0 ? 0 : -1)
 
 /* Does your compiler support function attributes (__attribute__)? */
 /* #undef HAVE_FUNCTION_ATTRIBUTES */
@@ -979,43 +980,6 @@ typedef unsigned __int64 uint64_t;
 #endif
 #endif
 
-/* if nothing defined, ALGEBRA is default.
-   if ALGEBRA_IS_DEFAULT is defined to 0, SQL is default.
-   if both ALGEBRA_IS_DEFAULT and SQL_IS_DEFAULT are defined to 0, we
-   fallback to MPS */
-/* Use algebra back-end by default? */
-#ifndef ALGEBRA_IS_DEFAULT
-#if defined(MILPRINT_SUMMER_IS_DEFAULT) && MILPRINT_SUMMER_IS_DEFAULT
-#define ALGEBRA_IS_DEFAULT 0
-#elif defined(SQL_IS_DEFAULT) && SQL_IS_DEFAULT
-#define ALGEBRA_IS_DEFAULT 0
-#else
-#define ALGEBRA_IS_DEFAULT 1
-#endif
-#endif
-
-/* Use milprint_summer back-end by default? */
-#ifndef MILPRINT_SUMMER_IS_DEFAULT
-#if defined(SQL_IS_DEFAULT) && !SQL_IS_DEFAULT && !ALGEBRA_IS_DEFAULT
-#define MILPRINT_SUMMER_IS_DEFAULT 1
-#else
-#define MILPRINT_SUMMER_IS_DEFAULT 0
-#endif
-#endif
-
-/* Use sql back-end by default? */
-#ifndef SQL_IS_DEFAULT
-#if ALGEBRA_IS_DEFAULT || MILPRINT_SUMMER_IS_DEFAULT
-#define SQL_IS_DEFAULT 0
-#else
-#define SQL_IS_DEFAULT 1
-#endif
-#endif
-
-#if (ALGEBRA_IS_DEFAULT + MILPRINT_SUMMER_IS_DEFAULT + SQL_IS_DEFAULT) != 1
-#error "Only one of ALGEBRA_IS_DEFAULT, MILPRINT_SUMMER_IS_DEFAULT, 
SQL_IS_DEFAULT can be set to 1"
-#endif
-
 #ifndef _SEEN_MONETDB_CONFIG_H
 #define _SEEN_MONETDB_CONFIG_H 1
 
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
@@ -421,7 +421,6 @@ int escapedStrlen(const char *src);
 int fltFromStr(const char *src, int *len, flt **dst);
 int fltToStr(str *dst, int *len, const flt *src);
 const flt flt_nil;
-int ftruncate(int fd, off_t size);
 char *get_bin_path(void);
 int gettimeofday(struct timeval *tv, int *ignore_zone);
 int gprof_pthread_create(pthread_t *__restrict, __const pthread_attr_t 
*__restrict, void *( *fcn)(void *), void *__restrict);
@@ -1558,6 +1557,7 @@ str MATsortTail(Client cntxt, MalBlkPtr 
 str MBMmix(int *ret, int *batid);
 str MBMnormal(int *ret, oid *base, int *size, int *domain, int *stddev, int 
*mean);
 str MBMrandom(int *ret, oid *base, int *size, int *domain);
+str MBMrandom_seed(int *ret, oid *base, int *size, int *domain, const int 
*seed);
 str MBMskewed(int *ret, oid *base, int *size, int *domain, int *skew);
 str MBMuniform(int *ret, oid *base, int *size, int *domain);
 str MCawakeClient(int id);
@@ -2323,6 +2323,7 @@ str UUIDequal(bit *retval, str *l, str *
 str UUIDgenerateUuid(str *retval);
 str UUIDisaUUID(bit *retval, str *s);
 str UUIDstr2uuid(str *retval, str *s);
+int UUIDtoString(str *retval, int *len, str handle);
 str UUIDuuid2str(str *retval, str *s);
 str XMLattribute(xml *ret, str *name, str *val);
 str XMLcomment(xml *x, str *s);
@@ -2382,6 +2383,7 @@ str batcalcRef;
 str batmmathRef;
 str batmtimeRef;
 str batstrRef;
+str batxmlRef;
 str bbpRef;
 int bindBAT(Box box, str name, str location);
 str bindRef;
@@ -2458,6 +2460,7 @@ str datacellRef;
 str datacyclotronRef;
 int dataflowConflict(InstrPtr p);
 str dataflowRef;
+str dateRef;
 int date_fromstr(str buf, int *len, date **d);
 int date_tostr(str *buf, int *len, date *val);
 int daytime_fromstr(str buf, int *len, daytime **ret);
@@ -2569,7 +2572,7 @@ char **getHelp(Module m, str pat, int fl
 char **getHelpMatch(char *pat);
 MalBlkPtr getMalBlkHistory(MalBlkPtr mb, int idx);
 MalBlkPtr getMalBlkMarker(MalBlkPtr mb, str marker);
-lng getMemoryClaim(MalBlkPtr mb, MalStkPtr stk, int pc, int i, int flag);
+lng getMemoryClaim(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int i, int flag);
 str getName(str nme, size_t len);
 int getPC(MalBlkPtr mb, InstrPtr p);
 str getPipeCatalog(int *nme, int *def, int *stat);
@@ -3114,6 +3117,7 @@ str thetaselectRef;
 str thetasubselectRef;
 str thetauselectRef;
 str tidRef;
+str timestampRef;
 int timestamp_fromstr(str buf, int *len, timestamp **ret);
 timestamp *timestamp_nil;
 int timestamp_tostr(str *buf, int *len, timestamp *val);
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2710,7 +2710,6 @@ AC_CHECK_FUNCS([\
                                fpclassify \
                                fsync \
                                ftime \
-                               ftruncate \
                                getexecname \
                                getlogin \
                                getopt \
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -70,6 +70,7 @@
  * At the MAL level, the multigroup function would perform the dynamic
  * optimization.
  */
+
 #define GRPnotfound()                                                  \
        do {                                                            \
                /* no equal found: start new group */                   \
@@ -96,11 +97,184 @@
                ngrp++;                                                 \
        } while (0)
 
-#define GRPhashloop(TYPE)                                              \
+
+#define GRP_compare_consecutive_values(INIT_0,INIT_1,COMP,KEEP)                
\
        do {                                                            \
-               TYPE *w = (TYPE *) Tloc(b, 0);                          \
-               for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < q; p++) { 
\
-                       prb = hash_##TYPE(hs, &w[p]);                   \
+               INIT_0;                                                 \
+               for (r = BUNfirst(b), p = r + 1, q = r + BATcount(b);   \
+                    p < q;                                             \
+                    p++) {                                             \
+                       INIT_1;                                         \
+                       if ((grps && *grps != prev) || COMP) {          \
+                               GRPnotfound();                          \
+                       } else {                                        \
+                               ngrps[p - r] = ngrp - 1;                \
+                               if (histo)                              \
+                                       cnts[ngrp - 1]++;               \
+                       }                                               \
+                       KEEP;                                           \
+                       if (grps)                                       \
+                               prev = *grps++;                         \
+               }                                                       \
+       } while(0)
+
+#define GRP_compare_consecutive_values_tpe(TYPE)               \
+       GRP_compare_consecutive_values(                         \
+       /* INIT_0 */    TYPE *w = (TYPE *) Tloc(b, 0);          \
+                       TYPE pw = w[BUNfirst(b)]        ,       \
+       /* INIT_1 */                                    ,       \
+       /* COMP   */    w[p] != pw                      ,       \
+       /* KEEP   */    pw = w[p]                               \
+       )
+
+#define GRP_compare_consecutive_values_any()                   \
+       GRP_compare_consecutive_values(                         \
+       /* INIT_0 */    pv = BUNtail(bi, BUNfirst(b))   ,       \
+       /* INIT_1 */    v = BUNtail(bi, p)              ,       \
+       /* COMP   */    cmp(v, pv) != 0                 ,       \
+       /* KEEP   */    pv = v                                  \
+       )
+
+
+#define GRP_subscan_old_groups(INIT_0,INIT_1,COMP,KEEP)                        
\
+       do {                                                            \
+               INIT_0;                                                 \
+               pgrp[grps[0]] = BUNfirst(b);                            \
+               for (j = r = BUNfirst(b), p = r + 1, q = r + BATcount(b); \
+                    p < q;                                             \
+                    p++) {                                             \
+                       INIT_1;                                         \
+                       if (COMP) {                                     \
+                               /* range [j, p) is all same value */    \
+                               /* i is position where we saw p's old   \
+                                * group last */                        \
+                               i = pgrp[grps[p - r]];                  \
+                               /* p is new position where we saw this  \
+                                * group */                             \
+                               pgrp[grps[p - r]] = p;                  \
+                               if (j <= i && i < p)    {               \
+                                       /* i is position of equal       \
+                                        * value in same old group as   \
+                                        * p, so p gets same new group  \
+                                        * as i */                      \
+                                       oid grp = ngrps[i - r];         \
+                                       ngrps[p - r] = grp;             \
+                                       if (histo)                      \
+                                               cnts[grp]++;            \
+                                       if (gn->tsorted &&              \
+                                           grp != ngrp - 1)            \
+                                               gn->tsorted = 0;        \
+                                       /* we found the value/group     \
+                                        * combination, go to next      \
+                                        * value */                     \
+                                       continue;                       \
+                               }                                       \
+                       } else {                                        \
+                               /* value differs from previous value */ \
+                               j = p;                                  \
+                               KEEP;                                   \
+                               pgrp[grps[p - r]] = p;                  \
+                       }                                               \
+                       /* start a new group */                         \
+                       GRPnotfound();                                  \
+               }                                                       \
+       } while(0)
+
+#define GRP_subscan_old_groups_tpe(TYPE)                       \
+       GRP_subscan_old_groups(                                 \
+       /* INIT_0 */    TYPE *w = (TYPE *) Tloc(b, 0);          \
+                       TYPE pw = w[BUNfirst(b)]        ,       \
+       /* INIT_1 */                                    ,       \
+       /* COMP   */    w[p] == pw                      ,       \
+       /* KEEP   */    pw = w[p]                               \
+       )
+
+#define GRP_subscan_old_groups_any()                           \
+       GRP_subscan_old_groups(                                 \
+       /* INIT_0 */    pv = BUNtail(bi, BUNfirst(b))   ,       \
+       /* INIT_1 */    v = BUNtail(bi, p)              ,       \
+       /* COMP   */    cmp(v, pv) == 0                 ,       \
+       /* KEEP   */    pv = v                                  \
+       )
+
+
+#define GRP_use_existing_hash_table(INIT_0,INIT_1,HASH,COMP)           \
+       do {                                                            \
+               INIT_0;                                                 \
+               for (r = BUNfirst(b), p = r, q = r + BATcount(b);       \
+                    p < q;                                             \
+                    p++) {                                             \
+                       INIT_1;                                         \
+                       /* this loop is similar, but not equal, to      \
+                        * HASHloop: the difference is that we only     \
+                        * consider BUNs smaller than the one we're     \
+                        * looking up (p), and that we also consider    \
+                        * the input groups */                          \
+                       if (grps) {                                     \
+                               for (hb = HASHget(hs, HASH);            \
+                                    hb != HASHnil(hs);                 \
+                                    hb = HASHgetlink(hs, hb)) {        \
+                                       if (hb < p &&                   \
+                                           grps[hb - r] == grps[p - r] && \
+                                           COMP) {                     \
+                                               oid grp = ngrps[hb - r]; \
+                                               ngrps[p - r] = grp;     \
+                                               if (histo)              \
+                                                       cnts[grp]++;    \
+                                               if (gn->tsorted &&      \
+                                                   grp != ngrp - 1)    \
+                                                       gn->tsorted = 0; \
+                                               break;                  \
+                                       }                               \
+                               }                                       \
+                       } else {                                        \
+                               for (hb = HASHget(hs, HASH);            \
+                                    hb != HASHnil(hs);                 \
+                                    hb = HASHgetlink(hs, hb)) {        \
+                                       if (hb < p &&                   \
+                                           COMP) {                     \
+                                               oid grp = ngrps[hb - r]; \
+                                               ngrps[p - r] = grp;     \
+                                               if (histo)              \
+                                                       cnts[grp]++;    \
+                                               if (gn->tsorted &&      \
+                                                   grp != ngrp - 1)    \
+                                                       gn->tsorted = 0; \
+                                               break;                  \
+                                       }                               \
+                               }                                       \
+                       }                                               \
+                       if (hb == HASHnil(hs)) {                        \
+                               GRPnotfound();                          \
+                       }                                               \
+               }                                                       \
+       } while(0)
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to