Changeset: ce8ea7862446 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce8ea7862446
Modified Files:
sql/backends/monet5/sql.mx
sql/server/rel_select.c
Branch: default
Log Message:
Merge with Dec2011 branch.
diffs (truncated from 521 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1978,11 +1978,11 @@ str CALCswitchbit(Client cntxt, MalBlkPt
str CALCunarybitABS(bit *res, bit *a);
str CALCunarybitNEG(bit *res, bit *a);
str CALCunarybitNOT(bit *retval, bit *value);
-str CALCunarybitSIGN(bit *res, bit *a);
+str CALCunarybitSIGN(int *res, bit *a);
str CALCunarybteABS(bte *res, bte *a);
str CALCunarybteNEG(bte *res, bte *a);
str CALCunarybteNOT(bte *res, bte *a);
-str CALCunarybteSIGN(bte *res, bte *a);
+str CALCunarybteSIGN(int *res, bte *a);
str CALCunarycheckbitINV(bit *res, bit *a);
str CALCunarycheckbteINV(bte *res, bte *a);
str CALCunarycheckchrINV(chr *res, chr *a);
@@ -1995,13 +1995,13 @@ str CALCunarycheckwrdINV(wrd *res, wrd *
str CALCunarychrABS(chr *res, chr *a);
str CALCunarychrNEG(chr *res, chr *a);
str CALCunarychrNOT(chr *res, chr *a);
-str CALCunarychrSIGN(chr *res, chr *a);
+str CALCunarychrSIGN(int *res, chr *a);
str CALCunarydblABS(dbl *res, dbl *a);
str CALCunarydblNEG(dbl *res, dbl *a);
-str CALCunarydblSIGN(dbl *res, dbl *a);
+str CALCunarydblSIGN(int *res, dbl *a);
str CALCunaryfltABS(flt *res, flt *a);
str CALCunaryfltNEG(flt *res, flt *a);
-str CALCunaryfltSIGN(flt *res, flt *a);
+str CALCunaryfltSIGN(int *res, flt *a);
str CALCunaryintABS(int *res, int *a);
str CALCunaryintNEG(int *res, int *a);
str CALCunaryintNOT(int *res, int *a);
@@ -2009,14 +2009,14 @@ str CALCunaryintSIGN(int *res, int *a);
str CALCunarylngABS(lng *res, lng *a);
str CALCunarylngNEG(lng *res, lng *a);
str CALCunarylngNOT(lng *res, lng *a);
-str CALCunarylngSIGN(lng *res, lng *a);
+str CALCunarylngSIGN(int *res, lng *a);
str CALCunaryshtABS(sht *res, sht *a);
str CALCunaryshtNEG(sht *res, sht *a);
str CALCunaryshtNOT(sht *res, sht *a);
-str CALCunaryshtSIGN(sht *res, sht *a);
+str CALCunaryshtSIGN(int *res, sht *a);
str CALCunarywrdABS(wrd *res, wrd *a);
str CALCunarywrdNEG(wrd *res, wrd *a);
-str CALCunarywrdSIGN(wrd *res, wrd *a);
+str CALCunarywrdSIGN(int *res, wrd *a);
str CALCwrd2bit(bit *res, wrd *a);
str CALCwrd2bte(bte *res, wrd *a);
str CALCwrd2chr(chr *res, wrd *a);
@@ -4077,6 +4077,7 @@ str DCYbind(int *ret, str *sch, str *tab
str DCYcopy(int *ret_bat, int *ret_id, str *sch, str *tab, str *col, int
*kind, int *part, int *fbun, int *lbun);
str DCYpin(int *ret, int *bid);
str DCYunpin(int *ret, int *bid);
+int DFLOWadmission(lng argclaim, lng hotclaim);
str DICTbind(int *idx, int *val, str *nme);
str DICTcompress(int *idx, str *nme, int *bid);
str DICTdecompress(int *ret, str *nme);
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
@@ -1355,7 +1355,6 @@ sql5_export str second_interval_@1( lng
@:c_interval_export(wrd)@
@:c_interval_export(lng)@
@:c_interval_export(daytime)@
-sql5_export str second_interval_2_daytime( daytime *res, lng *s, int *d);
@= simpleupcast_export
sql5_export str @2_2_@1( @1 *res, @2 *v );
sql5_export str bat@2_2_@1( int *res, int *v );
@@ -4216,6 +4215,30 @@ str_2time_daytime( daytime *res, str *v,
}
str
+timestamp_2_daytime( daytime *res, timestamp *v, int *digits )
+{
+ int d = (*digits)?*digits-1:0;
+ int msec = v->msecs;
+
+ /* correct fraction */
+ if (d < 3 && msec) {
+ msec /= scales[3-d];
+ msec *= scales[3-d];
+ }
+ *res = msec;
+ return MAL_SUCCEED;
+}
+
+str
+date_2_timestamp( timestamp *res, date *v, int *digits )
+{
+ (void)digits; /* no precision needed */
+ res->days = *v;
+ res->msecs = 0;
+ return MAL_SUCCEED;
+}
+
+str
timestamp_2time_timestamp( timestamp *res, timestamp *v, int *digits )
{
int d = (*digits)?*digits-1:0;
@@ -5565,8 +5588,19 @@ comment "cast daytime to a second_interv
command calc.daytime( v:lng, d:int) :daytime
address second_interval_2_daytime
comment "cast second_interval to a daytime and check for overflow";
+
+command calc.daytime( v:timestamp, d:int) :daytime
+address timestamp_2_daytime
+comment "cast timestamp to a daytime and check for overflow";
+
+command calc.timestamp( v:date, d:int) :timestamp
+address date_2_timestamp
+comment "cast date to a timestamp and check for overflow";
@h
sql5_export str second_interval_daytime( lng *res, daytime *s, int *ek, int
*sk );
+sql5_export str second_interval_2_daytime( daytime *res, lng *s, int *d);
+sql5_export str timestamp_2_daytime( daytime *res, timestamp *v, int *d);
+sql5_export str date_2_timestamp( timestamp *res, date *v, int *d);
@c
str
second_interval_daytime( lng *res, daytime *s, int *d, int *sk )
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -192,6 +192,8 @@ sql_find_numeric(sql_subtype *r, int loc
localtype = TYPE_dbl;
} else {
localtype = TYPE_lng;
+ if (digits > 64)
+ digits = 64;
}
for (n = types->h; n; n = n->next) {
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3231,6 +3231,9 @@ rel_unop(mvc *sql, sql_rel **rel, symbol
}
+#define is_addition(fname) (strcmp(fname, "sql_add") == 0)
+#define is_substraction(fname) (strcmp(fname, "sql_sub") == 0)
+
sql_exp *
rel_binop_(mvc *sql, sql_exp *l, sql_exp *r, sql_schema *s,
char *fname, int card)
@@ -3253,7 +3256,18 @@ rel_binop_(mvc *sql, sql_exp *l, sql_exp
}
if (!t1 || !t2)
return sql_error(sql, 01, "Cannot have a parameter (?) on both
sides of an expression");
-
+
+ if ((is_addition(fname) || is_substraction(fname)) && t1->type->eclass
== EC_NUM && t2->type->eclass == EC_NUM) {
+ sql_subtype ntp;
+
+ sql_find_numeric(&ntp, t1->type->localtype, t1->digits+1);
+ l = rel_check_type(sql, &ntp, l, type_equal);
+ sql_find_numeric(&ntp, t2->type->localtype, t2->digits+1);
+ r = rel_check_type(sql, &ntp, r, type_equal);
+ t1 = exp_subtype(l);
+ t2 = exp_subtype(r);
+ }
+
f = sql_bind_func(sql->sa, s, fname, t1, t2, type);
if (!f && is_commutative(fname)) {
f = sql_bind_func(sql->sa, s, fname, t2, t1, type);
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -4182,6 +4182,7 @@ interval_expression:
YYABORT;
} else {
/* count the number of digits in the input */
+/*
lng cpyval = i, inlen = 1;
cpyval /= qualifier2multiplier(ek);
@@ -4193,6 +4194,7 @@ interval_expression:
$$ = NULL;
YYABORT;
}
+*/
$$ = _newAtomNode( atom_int(SA, &t, i));
}
}
diff --git a/sql/test/ADT2006/Tests/woud.stable.out
b/sql/test/ADT2006/Tests/woud.stable.out
--- a/sql/test/ADT2006/Tests/woud.stable.out
+++ b/sql/test/ADT2006/Tests/woud.stable.out
@@ -62,7 +62,7 @@ Ready.
% 0, 0 # length
% sys. # table_name
% substring_murderdate # name
-% int # type
+% bigint # type
% 1 # length
% . # table_name
% L5 # name
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
---
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
+++
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
@@ -45,7 +45,7 @@ Ready.
# null AS SCOPE_TABLE
% ., .schemas, .tables, .columns, .columns,
.columns, .columns, ., ., ., ., .columns,
., ., ., ., ., ., . # table_name
% table_cat, table_schem, table_name, column_name, type_name,
column_size, decimal_digits, buffer_length, num_prec_radix, nullable,
remarks, column_def, sql_data_type, sql_datetime_sub,
char_octet_length, ordinal_position, scope_catalog, scope_schema,
scope_table # name
-% char, varchar, varchar, varchar, varchar,
int, int, tinyint, tinyint, char, char, varchar,
tinyint, tinyint, tinyint, int, char, char, char #
type
+% char, varchar, varchar, varchar, varchar,
int, int, tinyint, tinyint, char, char, varchar,
tinyint, tinyint, tinyint, bigint, char, char, char #
type
% 0, 3, 9, 12, 7, 4, 1, 1, 2, 0,
0, 0, 1, 1, 1, 2, 0, 0, 0 # length
[ NULL, "sys", "args", "id", "int", 32, 0, 0, 10,
NULL, NULL, NULL, 0, 0, 0, 1, NULL, NULL, NULL
]
[ NULL, "sys", "args", "func_id", "int", 32, 0, 0,
10, NULL, NULL, NULL, 0, 0, 0, 2, NULL, NULL,
NULL ]
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/custom_function_in_where.SF-937859.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/custom_function_in_where.SF-937859.stable.out
---
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/custom_function_in_where.SF-937859.stable.out
+++
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/custom_function_in_where.SF-937859.stable.out
@@ -21,7 +21,7 @@ Ready.
[ 4 ]
% sys. # table_name
% sql_sub_char_length_s # name
-% int # type
+% bigint # type
% 1 # length
[ 0 ]
[ 0 ]
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/huge_expression_and_column_name.SF-921173.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/huge_expression_and_column_name.SF-921173.stable.out
---
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/huge_expression_and_column_name.SF-921173.stable.out
+++
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/huge_expression_and_column_name.SF-921173.stable.out
@@ -28,7 +28,7 @@ Ready.
#select
1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1
% . # table_name
% sql_add_single_value # name
-% int # type
+% bigint # type
% 4 # length
[ 2001 ]
diff --git
a/sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
b/sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
--- a/sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
+++ b/sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
@@ -38,7 +38,7 @@ Ready.
[ 1 ]
% sys. # table_name
% sql_add_sql_neg_col2 # name
-% int # type
+% bigint # type
% 4 # length
[ 3000 ]
diff --git
a/sql/test/BugTracker-2009/Tests/Division_by_zero_error.SF-2791361.stable.out
b/sql/test/BugTracker-2009/Tests/Division_by_zero_error.SF-2791361.stable.out
---
a/sql/test/BugTracker-2009/Tests/Division_by_zero_error.SF-2791361.stable.out
+++
b/sql/test/BugTracker-2009/Tests/Division_by_zero_error.SF-2791361.stable.out
@@ -50,7 +50,7 @@ Ready.
#select case when (2 - 2) > 0 then (3 - 2)/(2 - 2) else 0 end as "test";
% . # table_name
% test # name
-% tinyint # type
+% smallint # type
% 1 # length
[ 0 ]
diff --git
a/sql/test/BugTracker-2009/Tests/Floating_point_exception.SF-2791356.stable.out
b/sql/test/BugTracker-2009/Tests/Floating_point_exception.SF-2791356.stable.out
---
a/sql/test/BugTracker-2009/Tests/Floating_point_exception.SF-2791356.stable.out
+++
b/sql/test/BugTracker-2009/Tests/Floating_point_exception.SF-2791356.stable.out
@@ -27,7 +27,7 @@ Ready.
[ 1 ]
% sys. # table_name
% isnull_>_sql_sub_bla1 # name
-% int # type
+% bigint # type
% 1 # length
[ 0 ]
diff --git a/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
b/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
--- a/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
+++ b/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
@@ -36,7 +36,7 @@ Ready.
[ 7, 5 ]
% . # table_name
% L14 # name
-% wrd # type
+% bigint # type
% 1 # length
[ 2 ]
[ 3 ]
diff --git a/sql/test/BugTracker-2009/Tests/push_select_down_crash.stable.out
b/sql/test/BugTracker-2009/Tests/push_select_down_crash.stable.out
--- a/sql/test/BugTracker-2009/Tests/push_select_down_crash.stable.out
+++ b/sql/test/BugTracker-2009/Tests/push_select_down_crash.stable.out
@@ -46,7 +46,7 @@ Ready.
# WHEN 'blob' THEN 2
% ., .schemas, .tables, .columns, ., .columns,
.columns, .columns, ., ., ., ., .columns,
., ., ., ., ., ., ., ., . # table_name
% TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, DATA_TYPE,
TYPE_NAME, COLUMN_SIZE, DECIMAL_DIGITS, BUFFER_LENGTH, NUM_PREC_RADIX,
NULLABLE, REMARKS, COLUMN_DEF, SQL_DATA_TYPE,
SQL_DATETIME_SUB, CHAR_OCTET_LENGTH, ORDINAL_POSITION,
SCOPE_CATALOG, SCOPE_SCHEMA, SCOPE_TABLE, SOURCE_DATA_TYPE,
IS_NULLABLE # name
-% char, varchar, varchar, varchar, smallint,
varchar, int, int, tinyint, tinyint, int,
varchar, varchar, tinyint, tinyint, tinyint,
int, varchar, varchar, varchar, smallint, varchar
# type
+% char, varchar, varchar, varchar, smallint,
varchar, int, int, tinyint, tinyint, int,
varchar, varchar, tinyint, tinyint, tinyint,
bigint, varchar, varchar, varchar, smallint, varchar
# type
% 4, 0, 0, 0, 1, 0, 1, 1, 1, 1,
1, 0, 0, 1, 1, 1, 1, 0, 0, 0,
1, 0 # length
# 18:36:16 >
diff --git
a/sql/test/BugTracker-2011/Tests/CASE_division_exception.Bug-2822.sql
b/sql/test/BugTracker-2011/Tests/CASE_division_exception.Bug-2822.sql
--- a/sql/test/BugTracker-2011/Tests/CASE_division_exception.Bug-2822.sql
+++ b/sql/test/BugTracker-2011/Tests/CASE_division_exception.Bug-2822.sql
@@ -1,4 +1,4 @@
CREATE TABLE bug_2822 (c INT);
INSERT INTO bug_2822 VALUES (0);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list