Changeset: c1a6825ba6da for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1a6825ba6da
Modified Files:
gdk/gdk_join.c
Branch: default
Log Message:
Implemented project_void, and call project_lng/project_int for oid.
diffs (85 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2006,6 +2006,63 @@ project_loop(dbl)
project_loop(lng)
static int
+project_void(BAT *bn, BAT *l, BAT *r, int nilcheck)
+{
+ BUN n;
+ oid lo, hi;
+ oid v, prev = oid_nil;
+ const oid *o;
+
+ o = (const oid *) Tloc(l, BUNfirst(l));
+ n = BUNfirst(bn);
+ for (lo = 0, hi = lo + BATcount(l); lo < hi; lo++, o++, n++) {
+ if (*o == oid_nil) {
+ tfastins_nocheck(bn, n, &oid_nil, Tsize(bn));
+ bn->T->nonil = 0;
+ bn->T->nil = 1;
+ bn->tsorted = 0;
+ bn->trevsorted = 0;
+ bn->tkey = 0;
+ } else if (*o < r->hseqbase ||
+ *o >= r->hseqbase + BATcount(r)) {
+ GDKerror("BATproject: does not match always\n");
+ goto bunins_failed;
+ } else {
+ if (r->tseqbase == oid_nil) {
+ v = oid_nil;
+ if (nilcheck && bn->T->nonil) {
+ bn->T->nonil = 0;
+ bn->T->nil = 1;
+ }
+ } else {
+ v = *o - r->hseqbase + r->tseqbase;
+ }
+ tfastins_nocheck(bn, n, &v, Tsize(bn));
+ if (n > BUNfirst(bn) &&
+ (bn->trevsorted | bn->tsorted | bn->tkey)) {
+ if (prev < v) {
+ bn->trevsorted = 0;
+ if (!bn->tsorted)
+ bn->tkey = 0; /* can't be sure
*/
+ } else if (prev > v) {
+ bn->tsorted = 0;
+ if (!bn->trevsorted)
+ bn->tkey = 0; /* can't be sure
*/
+ } else {
+ bn->tkey = 0; /* definitely */
+ }
+ }
+ prev = v;
+ }
+ }
+ assert(n == BATcount(l));
+ BATsetcount(bn, n);
+ return GDK_SUCCEED;
+bunins_failed:
+ return GDK_FAIL;
+}
+
+static int
project_any(BAT *bn, BAT *l, BAT *r, int nilcheck)
{
BUN n;
@@ -2165,6 +2222,17 @@ BATproject(BAT *l, BAT *r)
case TYPE_lng:
res = project_lng(projectargs);
break;
+ case TYPE_oid:
+ if (r->ttype == TYPE_void) {
+ res = project_void(projectargs);
+ } else {
+#if SIZEOF_OID == SIZEOF_INT
+ res = project_int(projectargs);
+#else
+ res = project_lng(projectargs);
+#endif
+ }
+ break;
default:
res = project_any(projectargs);
break;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list