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

Reply via email to