Changeset: 852c9602954d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/852c9602954d
Modified Files:
        sql/backends/monet5/generator/generator.c
Branch: default
Log Message:

use floats for number of steps for floating point types.


diffs (47 lines):

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
@@ -96,6 +96,30 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
                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);                       
                        \
+               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)
+
 static str
 VLTgenerator_table_(BAT **result, Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
@@ -125,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) {
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to