Changeset: bbf52f558643 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bbf52f558643
Added Files:
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/algebra.h
        monetdb5/modules/kernel/algebra.mal
        monetdb5/modules/mal/json_util.c
        monetdb5/modules/mal/json_util.h
        monetdb5/modules/mal/json_util.mal
        monetdb5/optimizer/opt_json.c
        monetdb5/optimizer/opt_json.h
Removed Files:
        monetdb5/mal/Tests/recycle04.mal
        monetdb5/mal/Tests/recycle04.stable.err
        monetdb5/mal/Tests/recycle04.stable.out
        monetdb5/mal/Tests/recycle13.mal
        monetdb5/mal/Tests/recycle13.stable.err
        monetdb5/mal/Tests/recycle13.stable.out
        monetdb5/modules/kernel/algebra.mx
Modified Files:
        .hgtags
        NT/monetdb_config.h.in
        clients/Tests/exports.stable.out
        configure.ag
        gdk/gdk_aggr.c
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        gdk/gdk_calc.c
        gdk/gdk_calc.h
        gdk/gdk_calc_private.h
        gdk/gdk_heap.c
        gdk/gdk_join.c
        gdk/gdk_posix.c
        gdk/gdk_private.h
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.sql
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
        monetdb5/mal/Tests/All
        monetdb5/mal/Tests/recycle00.mal
        monetdb5/mal/Tests/recycle01.mal
        monetdb5/mal/Tests/recycle02.mal
        monetdb5/mal/Tests/recycle03.mal
        monetdb5/mal/Tests/recycle05.mal
        monetdb5/mal/Tests/recycle06.mal
        monetdb5/mal/Tests/recycle07.mal
        monetdb5/mal/Tests/recycle08.mal
        monetdb5/mal/Tests/recycle09.mal
        monetdb5/mal/Tests/recycle10.mal
        monetdb5/mal/Tests/recycle11.mal
        monetdb5/mal/Tests/recycle12.mal
        monetdb5/mal/mal.h
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_profiler.h
        monetdb5/mal/mal_recycle.c
        monetdb5/mal/mal_recycle.h
        monetdb5/modules/kernel/Makefile.ag
        monetdb5/modules/mal/Makefile.ag
        monetdb5/modules/mal/Tests/remote03.stable.out
        monetdb5/modules/mal/batcalc.c
        monetdb5/modules/mal/calc.mal
        monetdb5/modules/mal/calc.mal.sh
        monetdb5/modules/mal/mal_init.mal
        monetdb5/modules/mal/recycle.c
        monetdb5/modules/mal/recycle.h
        monetdb5/modules/mal/recycle.mal
        monetdb5/modules/mal/trader.c
        monetdb5/optimizer/Makefile.ag
        monetdb5/optimizer/Tests/dataflow.stable.out
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_dataflow.h
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_recycler.c
        monetdb5/optimizer/opt_recycler.h
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/opt_support.c
        monetdb5/optimizer/opt_support.h
        monetdb5/optimizer/opt_wrapper.c
        monetdb5/optimizer/optimizer.mal
        monetdb5/tests/BugTracker/Tests/kunion-and-nil.Bug-1667.stable.err
        monetdb5/tests/BugTracker/Tests/kunion-and-nil.Bug-1667.stable.out
        monetdb5/tools/Tests/mserver5--help.stable.err
        sql/backends/monet5/UDF/README
        sql/backends/monet5/UDF/udf.c
        sql/backends/monet5/UDF/udf.h
        sql/backends/monet5/UDF/udf_impl.h
        sql/backends/monet5/sql_scenario.c
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err.Windows
        sql/test/BugTracker-2008/Tests/All
        sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
        sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.out
        sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.sql
        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/predicate_select.Bug-3090_nogeom.stable.err
        
sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out
        
sql/test/BugTracker-2012/Tests/table_function_with_column_subselects.Bug-3172.stable.err
        
sql/test/BugTracker/Tests/set_sql_debug_64__breaking_the_DB.SF-1906287.stable.out
        sql/test/Tests/setoptimizer.stable.err
        sql/test/Tests/setoptimizer.stable.out
        sql/test/Tests/systemfunctions_nogeom.stable.out
        sql/test/Tests/trace_nogeom.stable.out
        sql/test/centipede/Tests/olap.sql
        sql/test/leaks/Tests/check0_nogeom.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/leaks/Tests/drop3_nogeom.stable.out
        sql/test/leaks/Tests/select1_nogeom.stable.out
        sql/test/leaks/Tests/select2_nogeom.stable.out
        sql/test/leaks/Tests/temp1_nogeom.stable.out
        sql/test/leaks/Tests/temp2_nogeom.stable.out
        sql/test/leaks/Tests/temp3_nogeom.stable.out
        sql/test/mapi/Tests/php_monetdb.stable.out
        sql/test/mapi/Tests/php_monetdb_nogeom.stable.out
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade/Tests/upgrade.stable.out
        testing/Mfilter.py.in
        tools/mserver/mserver5.c
Branch: rdf
Log Message:

Merge with default branch


diffs (truncated from 17295 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -529,3 +529,6 @@ b9ccba3754cda87e79cac9e5348e46f35a883845
 7c9bc94e85b75a79a48aa15af3a428ab5ef67bc7 Feb2013_11
 b9ccba3754cda87e79cac9e5348e46f35a883845 Feb2013_SP3_release
 efddb40b959a8ce6e77bec83cefd49c0a8de343c Feb2013_SP3_release
+64caf95db680ce67235697114693cbcf4cc859eb before_JSON_data_type
+334140294fb20e04aa85ab7f06bc3da45b1ae4f3 before_new_JOIN_implementation
+508d02b1f9bf8bac7a86664b092000dd3fd20824 before_reviving_RECYCLER
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
@@ -301,6 +301,9 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #define HAVE_MEMORY_H 1
 
+/* Define to 1 if you have the `mremap' function. */
+/* #undef HAVE_MREMAP */
+
 /* Define if you have the mseed library */
 /* #undef HAVE_MSEED */
 
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
@@ -151,8 +151,10 @@ BAT *BATmark(BAT *b, oid base);
 BAT *BATmark_grp(BAT *b, BAT *g, oid *base);
 BAT *BATmaterialize(BAT *b);
 BAT *BATmaterializeh(BAT *b);
+void *BATmax(BAT *b, void *aggr);
 size_t BATmemsize(BAT *b, int dirty);
 BAT *BATmergecand(BAT *a, BAT *b);
+void *BATmin(BAT *b, void *aggr);
 int BATmmap(BAT *b, int hb, int tb, int hh, int th, int force);
 BAT *BATmode(BAT *b, int onoff);
 gdk_return BATmultiprintf(stream *f, int argc, BAT *argv[], int printoid, int 
order, int printorderby);
@@ -728,8 +730,6 @@ str ALARMsleep(int *res, int *secs);
 str ALARMtime(int *res);
 str ALARMtimers(int *res);
 str ALARMusec(lng *ret);
-str ALGBATmaximum(ptr *result, int *bid);
-str ALGBATminimum(ptr *result, int *bid);
 str ALGantijoin(int *result, int *lid, int *rid);
 str ALGantijoin2(int *l, int *r, int *lid, int *rid);
 str ALGantiuselect1(int *result, int *bid, ptr value);
@@ -779,22 +779,8 @@ str ALGmarkHead_default(int *result, int
 str ALGmark_grp_1(int *result, int *bid, int *gid);
 str ALGmark_grp_2(int *result, int *bid, int *gid, oid *base);
 str ALGmaterialize(int *ret, int *bid);
-str ALGmax_bte(bte *res, int *bid);
-str ALGmax_dbl(dbl *res, int *bid);
-str ALGmax_flt(flt *res, int *bid);
-str ALGmax_int(int *res, int *bid);
-str ALGmax_lng(lng *res, int *bid);
-str ALGmax_sht(sht *res, int *bid);
-str ALGmax_wrd(wrd *res, int *bid);
 str ALGmaxany(ptr result, int *bid);
 str ALGmerge(int *result, int *bid);
-str ALGmin_bte(bte *res, int *bid);
-str ALGmin_dbl(dbl *res, int *bid);
-str ALGmin_flt(flt *res, int *bid);
-str ALGmin_int(int *res, int *bid);
-str ALGmin_lng(lng *res, int *bid);
-str ALGmin_sht(sht *res, int *bid);
-str ALGmin_wrd(wrd *res, int *bid);
 str ALGminany(ptr result, int *bid);
 str ALGouterjoin(int *result, int *lid, int *rid);
 str ALGouterjoinestimate(int *result, int *lid, int *rid, lng *estimate);
@@ -828,10 +814,9 @@ str ALGssort(int *result, int *bid);
 str ALGssort_rev(int *result, int *bid);
 str ALGstdev(dbl *res, int *bid);
 str ALGstdevp(dbl *res, int *bid);
-str ALGsubleftjoin(bat *r1, bat *r2, bat *l, bat *r);
-str ALGsubleftjoin4(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr);
-str ALGsubouterjoin(bat *r1, bat *r2, bat *l, bat *r);
-str ALGsubouterjoin4(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr);
+str ALGsubjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, lng 
*estimate);
+str ALGsubleftjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, lng 
*estimate);
+str ALGsubouterjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, lng 
*estimate);
 str ALGsubsample(int *result, int *bid, int *param);
 str ALGsubselect1(bat *result, bat *bid, const void *low, const void *high, 
const bit *li, const bit *hi, const bit *anti);
 str ALGsubselect2(bat *result, bat *bid, bat *sid, const void *low, const void 
*high, const bit *li, const bit *hi, const bit *anti);
@@ -845,8 +830,7 @@ str ALGsubsort23(bat *result, bat *norde
 str ALGsubsort31(bat *result, bat *bid, bat *order, bat *group, bit *reverse, 
bit *stable);
 str ALGsubsort32(bat *result, bat *norder, bat *bid, bat *order, bat *group, 
bit *reverse, bit *stable);
 str ALGsubsort33(bat *result, bat *norder, bat *ngroup, bat *bid, bat *order, 
bat *group, bit *reverse, bit *stable);
-str ALGsubthetajoin(bat *r1, bat *r2, bat *l, bat *r, str *op);
-str ALGsubthetajoin4(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, str 
*op);
+str ALGsubthetajoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, str 
*op, lng *estimate);
 str ALGsunion(int *result, int *lid, int *rid);
 str ALGsunique(int *result, int *bid);
 str ALGtdiff(int *result, int *lid, int *rid);
@@ -932,8 +916,6 @@ str BATXMLstr2xml(int *x, int *s);
 str BATXMLxml2str(int *ret, int *bid);
 str BATXMLxmltext(int *ret, int *bid);
 str BATXMLxquery(int *x, int *s, str *expr);
-ptr BATmax(BAT *b, ptr aggr);
-ptr BATmin(BAT *b, ptr aggr);
 str BKCaccbuild(int *ret, int *bid, str *acc, ptr *param);
 str BKCaccbuild_std(int *ret, int *bid, int *acc);
 str BKCappend_force_wrap(int *r, int *bid, int *uid, bit *force);
@@ -1505,7 +1487,9 @@ str JSONpath(json *ret, json *js, str *e
 str JSONprelude(int *ret);
 str JSONrenderarray(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str JSONrenderobject(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+str JSONresultSet(str *res, bat *u, bat *rev, bat *js);
 str JSONstr2json(json *ret, str *j);
+str JSONtext(json *ret, json *js, str *expr);
 int JSONtoString(str *s, int *len, json src);
 str JSONunnest(int *key, int *val, json *j);
 str JSONunnestGrouped(int *grp, int *key, int *val, json *j);
@@ -1806,6 +1790,7 @@ int OPTgroupsImplementation(Client cntxt
 int OPTinlineImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
 int OPTisAlias(InstrPtr p);
 int OPTjoinPathImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
+int OPTjsonImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 str OPTlegAdvice(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 int OPTlegAdviceInternal(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str OPTmacro(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
@@ -2033,31 +2018,27 @@ str QOTshowPlan(Client cntxt, MalBlkPtr 
 void QOTstatisticsExit(void);
 void QOTupdateStatistics(str nme, int prop, lng val);
 QueryQueue QRYqueue;
+void RECYCLEdump(stream *s);
+void RECYCLEdumpDataTrans(stream *s);
 str RECYCLEdumpQPatWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+void RECYCLEdumpRecyclerPool(stream *s);
 str RECYCLEdumpWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-int RECYCLEentry(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-str RECYCLEepilogue(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-void RECYCLEexit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, lng 
ticks);
-str RECYCLEgetAdmission(int *p);
-str RECYCLEgetCache(int *p);
-bte RECYCLEgetQryCat(int qidx);
-str RECYCLEgetReuse(int *p);
+lng RECYCLEentry(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int 
pc);
+void RECYCLEexit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int 
pc, lng ticks);
 void RECYCLEinit(void);
-void RECYCLEinitQPat(int sz);
+void RECYCLEinitRecyclePool(int sz);
 int RECYCLEinterest(InstrPtr p);
-str RECYCLElog(int *d, str *nm);
 str RECYCLEmonitor(int *d, int *p);
 int RECYCLEnewQryStat(MalBlkPtr mb);
-str RECYCLEprelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-void RECYCLEreset(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-str RECYCLEresetCMD(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-str RECYCLEsetAdmission(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
+str RECYCLEreset(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int 
pc);
+str RECYCLErunningStat(Client cntxt, MalBlkPtr mb);
 str RECYCLEsetCache(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-str RECYCLEsetReuse(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 void RECYCLEshutdown(Client cntxt);
 str RECYCLEshutdownWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
-str RECYCLEstart(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str RECYCLEstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+str RECYCLEstart(Client cntxt, MalBlkPtr mb);
+str RECYCLEstartWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
+str RECYCLEstop(Client cntxt, MalBlkPtr mb);
+str RECYCLEstopWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 str RMTbatload(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str RMTbincopyfrom(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str RMTbincopyto(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
@@ -2399,7 +2380,6 @@ str activateCounter(str name);
 str addOptimizerPipe(Client cntxt, MalBlkPtr mb, str name);
 str addPipeDefinition(Client cntxt, str name, str pipe);
 void addtoMalBlkHistory(MalBlkPtr mb, str marker);
-int admissionPolicy;
 str affectedRowsRef;
 str aggrRef;
 str alarmRef;
@@ -2495,6 +2475,7 @@ str crossRef;
 int cstToken(Client cntxt, ValPtr val);
 str datacellRef;
 str datacyclotronRef;
+int dataflowConflict(InstrPtr p);
 str dataflowRef;
 int date_fromstr(str buf, int *len, date **d);
 int date_tostr(str *buf, int *len, date *val);
@@ -2711,6 +2692,7 @@ int isUpdateInstruction(InstrPtr p);
 str iteratorRef;
 str joinPathRef;
 str joinRef;
+str jsonRef;
 str kdifferenceRef;
 int keepProp;
 str kunionRef;
@@ -2786,7 +2768,6 @@ str mark_grpRef;
 str matRef;
 str materializeRef;
 str materializeRef;
-aggrFun maxAggr;
 str maxRef;
 str max_no_nilRef;
 void mdbClrBreakRequest(Client cntxt, str name);
@@ -2807,7 +2788,6 @@ str mdbTrapClient(Client cntxt, MalBlkPt
 int memoryclaims;
 lng memorypool;
 str mergecandRef;
-aggrFun minAggr;
 str minRef;
 str min_no_nilRef;
 str minusRef;
@@ -2979,7 +2959,6 @@ str queryRef;
 str querylogRef;
 str rankRef;
 str rank_grpRef;
-int rcachePolicy;
 int readConsole(Client cntxt);
 MalStkPtr reallocGlobalStack(MalStkPtr s, int cnt);
 MalStkPtr reallocStack(MalStkPtr s, int cnt);
@@ -2988,8 +2967,6 @@ double recycleAlpha;
 MalBlkPtr recycleBlk;
 int recycleCacheLimit;
 int recycleMaxInterest;
-lng recycleMemory;
-QryPatPtr recycleQPat;
 str recycleRef;
 lng recycleSearchTime;
 lng recycleTime;
@@ -3017,7 +2994,6 @@ void resetVarName(MalBlkPtr mb, int i);
 void resizeMalBlk(MalBlkPtr mb, int maxstmt, int maxvar);
 int resolveType(int dsttype, int srctype);
 str resultSetRef;
-int reusePolicy;
 str reuseRef;
 malType reverseBatType(malType v);
 str reverseRef;
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2564,6 +2564,7 @@ AC_CHECK_FUNCS([\
                                localtime_r \
                                lockf \
                                madvise \
+                               mremap \
                                nl_langinfo \
                                _NSGetExecutablePath \
                                pipe \
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -1732,55 +1732,69 @@ BATgroupsize(BAT *b, BAT *g, BAT *e, BAT
 #define AGGR_CMP(TYPE, OP)                                             \
        do {                                                            \
                const TYPE *vals = (const TYPE *) Tloc(b, BUNfirst(b)); \
-               for (;;) {                                              \
+               if (ngrp == cnt) {                                      \
+                       /* single element groups */                     \
                        if (cand) {                                     \
-                               if (cand == candend)                    \
-                                       break;                          \
-                               i = *cand++ - b->hseqbase;              \
-                               if (i >= end)                           \
-                                       break;                          \
+                               while (cand < candend) {                \
+                                       i = *cand++ - b->hseqbase;      \
+                                       if (i >= end)                   \
+                                               break;                  \
+                                       if (!skip_nils ||               \
+                                           vals[i] != TYPE##_nil) {    \
+                                               oids[i] = i + b->hseqbase; \
+                                               nils--;                 \
+                                       }                               \
+                               }                                       \
                        } else {                                        \
-                               i = start++;                            \
-                               if (i == end)                           \
-                                       break;                          \
+                               for (i = start; i < end; i++) {         \
+                                       if (!skip_nils ||               \
+                                           vals[i] != TYPE##_nil) {    \
+                                               oids[i] = i + b->hseqbase; \
+                                               nils--;                 \
+                                       }                               \
+                               }                                       \
                        }                                               \
-                       if (gids == NULL ||                             \
-                           (gids[i] >= min && gids[i] <= max)) {       \
-                               if (gids)                               \
-                                       gid = gids[i] - min;            \
-                               else                                    \
-                                       gid = (oid) i;                  \
-                               if (!skip_nils || vals[i] != TYPE##_nil) { \
-                                       if (oids[gid] == oid_nil) {     \
-                                               oids[gid] = i + b->hseqbase; \
-                                               nils--;                 \
-                                       } else if (vals[oids[gid] - 
b->hseqbase] != TYPE##_nil && \
-                                                  (vals[i] == TYPE##_nil || \
-                                                   OP(vals[i], vals[oids[gid] 
- b->hseqbase]))) \
-                                               oids[gid] = i + b->hseqbase; \
+               } else {                                                \
+                       gid = 0; /* in case gids == NULL */             \
+                       for (;;) {                                      \
+                               if (cand) {                             \
+                                       if (cand == candend)            \
+                                               break;                  \
+                                       i = *cand++ - b->hseqbase;      \
+                                       if (i >= end)                   \
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to