Changeset: e45a31dccee5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e45a31dccee5
Modified Files:
        sql/ChangeLog.Aug2011
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_scenario.c
        sql/server/sql_atom.c
Branch: Aug2011
Log Message:

Fixed a bunch of interrelated problems with default interval values.
The value that is stored in the default column of the sys.columns
table for an interval column is the number of units in the right-most
field of the interval (i.e. minutes in an INTERVAL DAY TO MINUTE).  So
make sure we multiply the value with the factor for that right-most
field when inserting into a table.
Also, we now declare the global SQL variable current_timezone as an
INTERVAL HOUR TO SECOND.
This fixes bug 2877.


diffs (120 lines):

diff --git a/sql/ChangeLog.Aug2011 b/sql/ChangeLog.Aug2011
--- a/sql/ChangeLog.Aug2011
+++ b/sql/ChangeLog.Aug2011
@@ -1,6 +1,9 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Wed Sep 21 2011 Sjoerd Mullender <[email protected]>
+- Fixed a bug when using default values for interval columns.  Bug 2877.
+
 * Fri Sep 16 2011 Sjoerd Mullender <[email protected]>
 - A bug was fixed where deleted rows weren't properly accounted for in
   all operations.  This was bug 2882.
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -5255,7 +5255,7 @@ second_interval_str( lng *res, str *s, i
 @= c_interval
 str
 month_interval_@1( int *ret, @1 *s, int *d, int *sk ){
-       int k = digits2sk(*d);
+       int k = digits2ek(*d);
        int r = (int)*s;
 
        (void)sk;
@@ -5272,7 +5272,7 @@ month_interval_@1( int *ret, @1 *s, int 
 }
 str
 second_interval_@1( lng *res, @1 *s, int *d, int *sk ){
-       int k = digits2sk(*d);
+       int k = digits2ek(*d);
        lng r = *s;
 
        (void)sk;
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -44,6 +44,7 @@
 #include "sql_mvc.h"
 #include "sql_readline.h"
 #include "sql_user.h"
+#include "sql_datetime.h"
 #include "mal_io.h"
 #include "mal_parser.h"
 #include "mal_builder.h"
@@ -301,7 +302,7 @@ global_variables(mvc *sql, char *user, c
        SQLglobal("trace","show,ticks,stmt");
 
        typename = "sec_interval";
-       sql_find_subtype(&ctype, typename, 0, 0);
+       sql_find_subtype(&ctype, typename, inttype2digits(ihour, isec), 0);
        SQLglobal("current_timezone", &sec);
 
        typename = "boolean";
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -337,7 +337,53 @@ atom2sql(atom *a)
        case EC_BLOB:
                /* TODO atom to string */
                break;
-       case EC_INTERVAL:
+       case EC_INTERVAL: {
+               lng v;
+               switch (a->data.vtype) {
+               case TYPE_lng:
+                       v = a->data.val.lval;
+                       break;
+               case TYPE_int:
+                       v = a->data.val.ival;
+                       break;
+               case TYPE_sht:
+                       v = a->data.val.shval;
+                       break;
+               case TYPE_bte:
+                       v = a->data.val.btval;
+                       break;
+               default:
+                       v = 0;
+                       break;
+               }
+               switch (a->tpe.digits) {
+               case 1:         /* year */
+                       v /= 12;
+                       break;
+               case 2:         /* year to month */
+               case 3:         /* month */
+                       break;
+               case 4:         /* day */
+                       v /= 60 * 60 * 24;
+                       break;
+               case 5:         /* day to hour */
+               case 8:         /* hour */
+                       v /= 60 * 60;
+                       break;
+               case 6:         /* day to minute */
+               case 9:         /* hour to minute */
+               case 11:        /* minute */
+                       v /= 60;
+                       break;
+               case 7:         /* day to second */
+               case 10:        /* hour to second */
+               case 12:        /* minute to second */
+               case 13:        /* second */
+                       break;
+               }
+               sprintf(buf, LLFMT, v);
+               break;
+       }
        case EC_NUM:
                switch (a->data.vtype) {
                case TYPE_lng:
@@ -355,6 +401,7 @@ atom2sql(atom *a)
                default:
                        break;
                }
+               break;
        case EC_DEC: {
                lng v = 0;
                switch (a->data.vtype) {
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to