Changeset: 91147e78f0be for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/91147e78f0be
Modified Files:
sql/server/rel_optimize_sel.c
Branch: no_type_bat
Log Message:
Merge with default branch.
diffs (134 lines):
diff --git a/monetdb5/modules/mal/txtsim.c b/monetdb5/modules/mal/txtsim.c
--- a/monetdb5/modules/mal/txtsim.c
+++ b/monetdb5/modules/mal/txtsim.c
@@ -462,10 +462,10 @@ popcount64(uint64_t x)
return (int) __popcnt64(x);
#endif
#else
- x = (x & 0x5555555555555555ULL) + ((x >> 1) & 0x5555555555555555ULL);
- x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL);
- x = (x & 0x0F0F0F0F0F0F0F0FULL) + ((x >> 4) & 0x0F0F0F0F0F0F0F0FULL);
- return (int) ((x * 0x0101010101010101ULL) >> 56);
+ x = (x & UINT64_C(0x5555555555555555)) + ((x >> 1) &
UINT64_C(0x5555555555555555));
+ x = (x & UINT64_C(0x3333333333333333)) + ((x >> 2) &
UINT64_C(0x3333333333333333));
+ x = (x & UINT64_C(0x0F0F0F0F0F0F0F0F)) + ((x >> 4) &
UINT64_C(0x0F0F0F0F0F0F0F0F));
+ return (int) ((x * UINT64_C(0x0101010101010101)) >> 56);
#endif
}
@@ -501,10 +501,10 @@ str_alphabet_bitmap(str_item *s)
{
int i;
- s->abm = 0ULL;
+ s->abm = UINT64_C(0);
for (i = 0; i < s->len; i++)
- s->abm |= 1ULL << (s->cp_sequence[i] % 64);
+ s->abm |= UINT64_C(1) << (s->cp_sequence[i] % 64);
s->abm_popcount = popcount64(s->abm);
}
diff --git a/sql/backends/monet5/generator/generator.c
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -78,7 +78,36 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l) ||
is_##TPE##_nil(f) || is_##TPE##_nil(l)) \
throw(MAL, "generator.table",
\
SQLSTATE(42000) "Illegal generator range");
\
- n = (BUN) ((l - f) / s);
\
+ if (s < 0)
\
+ n = ((BUN)f - l);
\
+ else
\
+ n = ((BUN)l - f);
\
+ step = s<0?-s:s;
\
+ n = n/step;
\
+ if ((TPE) (n * s + f) != l)
\
+ n++;
\
+ bn = COLnew(0, TYPE_##TPE, n, TRANSIENT);
\
+ if (bn == NULL)
\
+ throw(MAL, "generator.table", SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
+ v = (TPE*) Tloc(bn, 0);
\
+ for (c = 0; c < n; c++)
\
+ *v++ = (TPE) (f + c * s);
\
+ bn->tsorted = s > 0 || n <= 1;
\
+ bn->trevsorted = s < 0 || n <= 1;
\
+ } while (0)
+
+#define VLTmaterialize_flt(TPE)
\
+ do {
\
+ TPE *v, f, l, s;
\
+ f = *getArgReference_##TPE(stk, pci, 1);
\
+ l = *getArgReference_##TPE(stk, pci, 2);
\
+ if ( pci->argc == 3)
\
+ s = f<l? (TPE) 1: (TPE)-1;
\
+ else s = *getArgReference_##TPE(stk,pci, 3);
\
+ if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l) ||
is_##TPE##_nil(f) || is_##TPE##_nil(l)) \
+ throw(MAL, "generator.table",
\
+ SQLSTATE(42000) "Illegal generator range");
\
+ n = (BUN) ((l - f) / s);
\
if ((TPE) (n * s + f) != l)
\
n++;
\
bn = COLnew(0, TYPE_##TPE, n, TRANSIENT);
\
@@ -94,7 +123,7 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
static str
VLTgenerator_table_(BAT **result, Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
{
- BUN c, n;
+ BUN c, n, step;
BAT *bn;
int tpe;
(void) cntxt;
@@ -120,10 +149,10 @@ VLTgenerator_table_(BAT **result, Client
break;
#endif
case TYPE_flt:
- VLTmaterialize(flt);
+ VLTmaterialize_flt(flt);
break;
case TYPE_dbl:
- VLTmaterialize(dbl);
+ VLTmaterialize_flt(dbl);
break;
default:
if (tpe == TYPE_timestamp) {
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2049,12 +2049,17 @@ popcount64(uint64_t x)
#if defined(__GNUC__)
return (uint32_t) __builtin_popcountll(x);
#elif defined(_MSC_VER)
- return (uint32_t) __popcnt64(x);
+#if SIZEOF_OID == 4
+ /* no __popcnt64 on 32 bit Windows */
+ return (int) (__popcnt((uint32_t) x) + __popcnt((uint32_t) (x >> 32)));
#else
- x = (x & 0x5555555555555555ULL) + ((x >> 1) & 0x5555555555555555ULL);
- x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL);
- x = (x & 0x0F0F0F0F0F0F0F0FULL) + ((x >> 4) & 0x0F0F0F0F0F0F0F0FULL);
- return (x * 0x0101010101010101ULL) >> 56;
+ return (uint32_t) __popcnt64(x);
+#endif
+#else
+ x = (x & UINT64_C(0x5555555555555555)) + ((x >> 1) &
UINT64_C(0x5555555555555555));
+ x = (x & UINT64_C(0x3333333333333333)) + ((x >> 2) &
UINT64_C(0x3333333333333333));
+ x = (x & UINT64_C(0x0F0F0F0F0F0F0F0F)) + ((x >> 4) &
UINT64_C(0x0F0F0F0F0F0F0F0F));
+ return (x * UINT64_C(0x0101010101010101)) >> 56;
#endif
}
diff --git a/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
b/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
--- a/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
+++ b/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
@@ -10,8 +10,7 @@ SELECT ( NULLIF ( -1 , 255 ) ) FROM GENE
-1
-1
-skipif knownfail
query I nosort
-SELECT ( NULLIF ( -1 , 255 ) ) FROM GENERATE_SERIES ( 2147483647 , -1 )
+SELECT count(*) FROM GENERATE_SERIES ( 2147483647 , -2, -10000000 )
----
--1
+215
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]