Changeset: ba00c559f63c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba00c559f63c
Modified Files:
sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
sql/benchmarks/tpch/LOCKED/Tests/14.stable.out
sql/benchmarks/tpch/Tests/01-22.stable.out
sql/benchmarks/tpch/Tests/14.stable.out
sql/server/rel_bin.c
sql/server/rel_optimizer.c
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out
sql/test/BugTracker-2009/Tests/pow_operator.SF-2812721.sql
sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.err
sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.out
sql/test/BugTracker-2012/Tests/power_priority.Bug-2291.stable.out
sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
sql/test/mapi/Tests/php_monetdb.stable.out
Branch: default
Log Message:
fix operator precedence
^ no longer maps to power, but to binary xor
and ~ now maps to binery not.
diffs (truncated from 326 to 300 lines):
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -479,7 +479,7 @@ Ready.
% promo_revenue # name
% decimal # type
% 21 # length
-[ 15.48 ]
+[ 15.486545 ]
#select * from optimizer_stats() stats;
% .stats, .stats # table_name
% rewrite, count # name
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/14.stable.out
b/sql/benchmarks/tpch/LOCKED/Tests/14.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/14.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/14.stable.out
@@ -22,7 +22,7 @@ Ready.
% promo_revenue # name
% decimal # type
% 21 # length
-[ 15.48 ]
+[ 15.486545 ]
#select * from optimizer_stats() stats;
% .stats, .stats # table_name
% rewrite, count # name
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out
b/sql/benchmarks/tpch/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out
@@ -479,7 +479,7 @@ Ready.
% promo_revenue # name
% decimal # type
% 21 # length
-[ 15.48 ]
+[ 15.486545 ]
#select * from optimizer_stats() stats;
% .stats, .stats # table_name
% rewrite, count # name
diff --git a/sql/benchmarks/tpch/Tests/14.stable.out
b/sql/benchmarks/tpch/Tests/14.stable.out
--- a/sql/benchmarks/tpch/Tests/14.stable.out
+++ b/sql/benchmarks/tpch/Tests/14.stable.out
@@ -22,7 +22,7 @@ Ready.
% promo_revenue # name
% decimal # type
% 21 # length
-[ 15.48 ]
+[ 15.486545 ]
#select * from optimizer_stats() stats;
% .stats, .stats # table_name
% rewrite, count # name
diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -1875,6 +1875,8 @@ rel2bin_union( mvc *sql, sql_rel *rel, l
return sub;
}
+/* Both EXCEPT and INTERSECT need work, current versions aren't mergetable
save
+ * (bails out on the gen_group) */
static stmt *
rel2bin_except( mvc *sql, sql_rel *rel, list *refs)
{
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -3487,9 +3487,14 @@ exps_unique( list *exps )
if ((n = exps->h) != NULL) {
sql_exp *e = n->data;
-
- if (e && find_prop(e->p, PROP_HASHCOL))
- return 1;
+ prop *p;
+
+ /* TODO, check if ukey is complete */
+ if (e && (p = find_prop(e->p, PROP_HASHCOL)) != NULL) {
+ sql_ukey *k = p->value;
+ if (list_length(k->k.columns) <= 1)
+ return 1;
+ }
}
return 0;
}
@@ -3497,6 +3502,10 @@ exps_unique( list *exps )
static sql_rel *
rel_push_project_down_union(int *changes, mvc *sql, sql_rel *rel)
{
+ /* first remove distinct if allready unique */
+ if (rel->op == op_project && need_distinct(rel) && rel->exps &&
exps_unique(rel->exps))
+ set_nodistinct(rel);
+
if (rel->op == op_project && rel->l && rel->exps && !rel->r &&
!project_unsafe(rel)) {
int need_distinct = need_distinct(rel);
sql_rel *u = rel->l;
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
@@ -462,7 +462,7 @@ int yydebug=1;
%token <sval>
IDENT aTYPE ALIAS AGGR AGGR2 RANK sqlINT HEXADECIMAL INTNUM APPROXNUM
USING
- ALL ANY SOME GLOBAL CAST CONVERT
+ GLOBAL CAST CONVERT
CHARACTER VARYING LARGE OBJECT VARCHAR CLOB sqlTEXT BINARY sqlBLOB
sqlDECIMAL sqlFLOAT
TINYINT SMALLINT BIGINT sqlINTEGER
@@ -480,8 +480,7 @@ int yydebug=1;
%token UNCOMMITTED COMMITTED sqlREPEATABLE SERIALIZABLE DIAGNOSTICS sqlSIZE
%token <sval> ASYMMETRIC SYMMETRIC ORDER BY
-%token <sval> LIKE ILIKE BETWEEN
-%token <operation> sqlIN EXISTS ESCAPE HAVING sqlGROUP sqlNULL
+%token <operation> EXISTS ESCAPE HAVING sqlGROUP sqlNULL
%token <operation> FROM FOR MATCH
%token <operation> EXTRACT
@@ -508,20 +507,19 @@ int yydebug=1;
/* operators */
%left UNION EXCEPT INTERSECT CORRESPONDING UNIONJOIN
%left JOIN CROSS LEFT FULL RIGHT INNER NATURAL
-%left LIKE BETWEEN sqlIN WITH DATA
-%left <operation> OR
+%left WITH DATA
+%left <operation> '(' ')'
+%left <sval> FILTER_FUNC
+
+%left <operation> '='
+%left <operation> ALL ANY BETWEEN sqlIN LIKE ILIKE OR SOME
%left <operation> AND
%left <operation> NOT
-%left <operation> '(' ')'
%left <sval> COMPARISON /* <> < > <= >= */
-%left <sval> FILTER_FUNC
-%left <operation> '='
-%left <operation> '&' '|' '^' LEFT_SHIFT RIGHT_SHIFT
-%left <operation> '+' '-'
-%left <operation> '*'
-%left <operation> '/' '%'
-%left <operation> SUBSTRING CONCATSTRING POSITION
+%left <operation> '+' '-' '&' '|' '^' LEFT_SHIFT RIGHT_SHIFT CONCATSTRING
SUBSTRING POSITION
%right UMINUS
+%left <operation> '*' '/' '%'
+%left <operation> '~'
/* literal keyword tokens */
/*
@@ -3350,7 +3348,7 @@ simple_scalar_exp:
| scalar_exp '^' scalar_exp
{ dlist *l = L();
append_list(l,
- append_string(L(), sa_strdup(SA, "power")));
+ append_string(L(), sa_strdup(SA, "bit_xor")));
append_symbol(l, $1);
append_symbol(l, $3);
$$ = _symbol_create_list( SQL_BINOP, l ); }
@@ -3368,6 +3366,12 @@ simple_scalar_exp:
append_symbol(l, $1);
append_symbol(l, $3);
$$ = _symbol_create_list( SQL_BINOP, l ); }
+ | '~' scalar_exp
+ { dlist *l = L();
+ append_list(l,
+ append_string(L(), sa_strdup(SA, "bit_not")));
+ append_symbol(l, $2);
+ $$ = _symbol_create_list( SQL_BINOP, l ); }
| scalar_exp LEFT_SHIFT scalar_exp
{ dlist *l = L();
append_list(l,
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -802,12 +802,13 @@ int scanner_symbol(mvc * c, int cur)
lc->started = 1;
utf8_putchar(lc, next);
return scanner_token(lc, cur);
+ case '~': /* binary not */
+ case '^': /* binary xor */
+ case '&': /* binary and */
case '*':
case '?':
case '%':
- case '^':
case '+':
- case '&':
case '(':
case ')':
case ',':
@@ -857,7 +858,7 @@ int scanner_symbol(mvc * c, int cur)
cur = '.';
return number(c, cur);
}
- case '|':
+ case '|': /* binary or or string concat */
lc->started = 1;
cur = scanner_getc(lc);
if (cur == '|') {
diff --git
a/sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out
b/sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out
---
a/sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out
+++
b/sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out
@@ -27,15 +27,15 @@ Ready.
#select (4.4054292 - 4.40572025343667)^2 + (52.0903881 - 52.091375762174)^2;
% . # table_name
% sql_sub_single_value # name
-% double # type
-% 24 # length
-[ 1.060188673e-06 ]
+% decimal # type
+% 21 # length
+[ -3.99941117029739 ]
#select cast((4.4054292 - 4.40572025343667)^2 as double) + cast((52.0903881 -
52.091375762174)^2 as double);
% . # table_name
% sql_sub_single_value # name
% double # type
% 24 # length
-[ 1.060188673e-06 ]
+[ -3.99941117 ]
# 15:12:22 >
# 15:12:22 > Done.
diff --git a/sql/test/BugTracker-2009/Tests/pow_operator.SF-2812721.sql
b/sql/test/BugTracker-2009/Tests/pow_operator.SF-2812721.sql
--- a/sql/test/BugTracker-2009/Tests/pow_operator.SF-2812721.sql
+++ b/sql/test/BugTracker-2009/Tests/pow_operator.SF-2812721.sql
@@ -1,2 +1,2 @@
-select 2 ^ 2;
-select 2.8 ^ 2;
+select power(2,2);
+select power(2.8,2);
diff --git
a/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.err
b/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.err
---
a/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.err
+++
b/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.err
@@ -27,9 +27,15 @@ stderr of test 'now_results_in_illegal_a
# 12:53:46 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=budapest"
"--port=36456"
# 12:53:46 >
-MAPI = monetdb@budapest:36456
+MAPI = monetdb@niels:37920
QUERY = select now() + 1;
ERROR = !illegal argument
+MAPI = monetdb@niels:37920
+QUERY = select now() + interval '1' second - now();
+ERROR = !SELECT: no such binary operator 'sql_sub(timestamptz,timestamptz)'
+MAPI = monetdb@niels:37920
+QUERY = select now() - now();
+ERROR = !SELECT: no such binary operator 'sql_sub(timestamptz,timestamptz)'
# 12:53:46 >
# 12:53:46 > "Done."
diff --git
a/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.out
b/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.out
---
a/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.out
+++
b/sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.stable.out
@@ -47,8 +47,6 @@ Ready.
# 12:53:46 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=budapest"
"--port=36456"
# 12:53:46 >
-1 second #expected output of 2nd query
-0 #expected ouput of 3rd query
# 12:53:46 >
# 12:53:46 > "Done."
diff --git a/sql/test/BugTracker-2012/Tests/power_priority.Bug-2291.stable.out
b/sql/test/BugTracker-2012/Tests/power_priority.Bug-2291.stable.out
--- a/sql/test/BugTracker-2012/Tests/power_priority.Bug-2291.stable.out
+++ b/sql/test/BugTracker-2012/Tests/power_priority.Bug-2291.stable.out
@@ -49,9 +49,9 @@ Ready.
#select (4.4054292 - 4.40572025343667)^2 + (52.0903881 - 52.091375762174)^2;
% . # table_name
% sql_sub_single_value # name
-% double # type
-% 24 # length
-[ 1.060188673e-06 ]
+% decimal # type
+% 21 # length
+[ -0.00076334574955 ]
# 15:05:38 >
# 15:05:38 > "Done."
diff --git
a/sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
b/sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
---
a/sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
+++
b/sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
@@ -254,7 +254,7 @@ Ready.
[ 1 ]
#with Raw as (select a,b,c,count(*) as value from T where e<10 and c<50 group
by a,b,c) select Raw.*, row_number() over (partition by a order by value desc)
from Raw;
% sys.raw, sys.raw, sys.raw, sys.raw, . # table_name
-% a, b, c, value, row_number_a # name
+% a, b, c, value, row_number_value # name
% int, int, int, wrd, int # type
% 1, 1, 1, 1, 1 # length
[ 7, 7, 7, 1, 1 ]
diff --git a/sql/test/mapi/Tests/php_monetdb.stable.out
b/sql/test/mapi/Tests/php_monetdb.stable.out
--- a/sql/test/mapi/Tests/php_monetdb.stable.out
+++ b/sql/test/mapi/Tests/php_monetdb.stable.out
@@ -81,21 +81,21 @@ 2123 keys 2102 0 true 2
false 0
2130 idxs 2102 0 true 2 false 0
2135 triggers 2102 0 true 2 false 0
2146 objects 2102 0 true 2 false 0
-5018 tables 2000 SELECT * FROM (SELECT p.*, 0 AS "temporary" FROM
"sys"."_tables" AS p UNION ALL SELECT t.*, 1 AS "temporary" FROM
"tmp"."_tables" AS t) AS tables where tables.type < 2; 1 true 0
false 0
-5028 columns 2000 SELECT * FROM (SELECT p.* FROM "sys"."_columns" AS p
UNION ALL SELECT t.* FROM "tmp"."_columns" AS t) AS columns; 1 true
0 false 0
-5048 db_user_info 2000 0 true 0 false 0
-5056 users 2000 SELECT u."name" AS "name", ui."fullname",
ui."default_schema" FROM db_users() AS u LEFT JOIN "sys"."db_user_info" AS ui
ON u."name" = ui."name" ; 1 true 0 false 0
-5060 user_role 2000 0 true 0 false 0
-5063 auths 2000 0 true 0 false 0
-5067 privileges 2000 0 true 0 false 0
-5220 queryhistory 2000 0 true 0 false 0
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list