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

Reply via email to