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 -- [email protected]
To unsubscribe send an email to [email protected]
