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
