Update of /cvsroot/monetdb/sql/src/common
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv16275/src/common
Modified Files:
sql_types.mx
Log Message:
type system cleanup (was needed to better handle WRD)
U sql_types.mx
Index: sql_types.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/common/sql_types.mx,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -d -r1.112 -r1.113
--- sql_types.mx 7 Sep 2008 14:27:57 -0000 1.112
+++ sql_types.mx 7 Sep 2008 20:31:29 -0000 1.113
@@ -282,7 +282,7 @@
{
if (nlt == TYPE_flt || nlt == TYPE_dbl) {
nlt = TYPE_dbl;
- } else if (nlt == TYPE_bte || nlt == TYPE_sht || nlt == TYPE_int || nlt
== TYPE_lng) {
+ } else if (nlt == TYPE_bte || nlt == TYPE_sht || nlt == TYPE_int || nlt
== TYPE_wrd || nlt == TYPE_lng) {
nlt = TYPE_lng;
}
if (nlt == olt)
@@ -320,9 +320,6 @@
return r;
}
}
- t = n->data;
- sql_init_subtype(r, t, digits, 0);
- return r;
}
}
return NULL;
@@ -1243,7 +1240,7 @@
sql_type *ts[100];
sql_type **strings, **numerical;
sql_type **decimals, **floats, **dates, **end, **t;
- sql_type *STR, *BTE, *INT, *LNG, *OID, *BIT, *DBL, *WRD;
+ sql_type *STR, *BTE, *SHT, *INT, *LNG, *OID, *BIT, *DBL, *WRD;
sql_type *SECINT, *MONINT, *DTE;
sql_type *TME, *TMETZ, *TMESTAMP, *TMESTAMPTZ;
sql_type *ANY;
@@ -1263,15 +1260,15 @@
numerical = t;
+ BTE = *t++ = sql_create_type("TINYINT", 8, SCALE_FIX, 2, EC_NUM,
"bte");
+ SHT = *t++ = sql_create_type("SMALLINT", 16, SCALE_FIX, 2, EC_NUM,
"sht");
OID = *t++ = sql_create_type("OID", 31, 0, 2, EC_NUM, "oid");
+ INT = *t++ = sql_create_type("INT", 32, SCALE_FIX, 2, EC_NUM,
"int");
if (sizeof(wrd) == sizeof(int))
WRD = *t++ = sql_create_type("WRD", 32, SCALE_FIX, 2, EC_NUM,
"wrd");
- else
- WRD = *t++ = sql_create_type("WRD", 64, SCALE_FIX, 2, EC_NUM,
"wrd");
- BTE = *t++ = sql_create_type("TINYINT", 8, SCALE_FIX, 2, EC_NUM,
"bte");
- *t++ = sql_create_type("SMALLINT", 16, SCALE_FIX, 2, EC_NUM,
"sht");
- INT = *t++ = sql_create_type("INT", 32, SCALE_FIX, 2, EC_NUM,
"int");
LNG = *t++ = sql_create_type("BIGINT", 64, SCALE_FIX, 2, EC_NUM,
"lng");
+ if (sizeof(wrd) == sizeof(lng))
+ WRD = *t++ = sql_create_type("WRD", 64, SCALE_FIX, 2, EC_NUM,
"wrd");
decimals = t;
/* decimal(d,s) (d indicates nr digits,
@@ -1332,16 +1329,35 @@
sql_create_func3("ifthenelse", "calc", "ifthenelse", BIT, ANY, ANY,
ANY, SCALE_FIX);
/* sum for numerical and decimals */
+ sql_create_aggr("sum", "aggr", "sum", BTE, SHT);
+ sql_create_aggr("sum", "aggr", "sum", BTE, INT);
+ sql_create_aggr("sum", "aggr", "sum", BTE, WRD);
+ sql_create_aggr("sum", "aggr", "sum", BTE, LNG);
+
+ sql_create_aggr("sum", "aggr", "sum", SHT, INT);
+ sql_create_aggr("sum", "aggr", "sum", SHT, WRD);
+ sql_create_aggr("sum", "aggr", "sum", SHT, LNG);
+
+ sql_create_aggr("sum", "aggr", "sum", INT, WRD);
+ sql_create_aggr("sum", "aggr", "sum", INT, LNG);
+
sql_create_aggr("sum", "aggr", "sum", WRD, WRD);
sql_create_aggr("sum", "aggr", "sum", WRD, LNG);
- for (t = numerical+2 /* skipe OID/WRD */; t < floats; t += 4) {
- sql_create_aggr("sum", "aggr", "sum", *(t), *(t + 1));
- sql_create_aggr("sum", "aggr", "sum", *(t + 1), *(t + 2));
- sql_create_aggr("sum", "aggr", "sum", *(t + 2), *(t + 3));
- sql_create_aggr("sum", "aggr", "sum", *(t + 3), *(t + 3));
- }
+ sql_create_aggr("sum", "aggr", "sum", LNG, LNG);
- for (t = numerical+1; t < floats; t++) {
+ t = decimals; /* BTE */
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+1));
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+2));
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+3));
+ t++; /* SHT */
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+1));
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+2));
+ t++; /* INT */
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t+1));
+ t++; /* LNG */
+ sql_create_aggr("sum", "aggr", "sum", *(t), *(t));
+
+ for (t = numerical; t < floats; t++) {
sql_create_aggr("avg", "aggr", "avg", *(t), DBL);
sql_create_func("mod", "calc", "%", *t, *t, *t, SCALE_FIX);
}
@@ -1408,7 +1424,9 @@
}
for (t = decimals, t++; t != floats; t++) {
sql_type **u;
- for (u = numerical+1; u != floats; u++) {
+ for (u = numerical; u != floats; u++) {
+ if (*u == OID)
+ continue;
if ((*t)->localtype > (*u)->localtype) {
sql_create_func("sql_mul", "calc", "*", *t, *u,
*t, SCALE_ADD);
sql_create_func("sql_mul", "calc", "*", *u, *t,
*t, SCALE_ADD);
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins