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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org