Changeset: 40142a50428c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=40142a50428c
Modified Files:
sql/server/rel_select.c
sql/test/subquery/Tests/subquery3.sql
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery3.stable.out
sql/test/subquery/Tests/subquery4.sql
Branch: default
Log Message:
Allow ordering by constants other than integers. Also added another query with
wrong results
diffs (93 lines):
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
@@ -4316,8 +4316,6 @@ rel_order_by(sql_query *query, sql_rel *
/* do not cache this query */
if (e)
scanner_reset_key(&sql->scanner);
- } else if (e->type == e_atom) {
- return sql_error(sql, 02,
SQLSTATE(42000) "order not of type SQL_COLUMN");
}
} else if (e && exp_card(e) > rel->card) {
if (exp_name(e))
@@ -4325,6 +4323,8 @@ rel_order_by(sql_query *query, sql_rel *
else
return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query
results without an aggregate function");
}
+ if (e && !exp_name(e))
+ exp_label(sql->sa, e, ++sql->label);
if (e && rel && is_project(rel->op)) {
sql_exp *found =
exps_find_exp(rel->exps, e);
@@ -4352,7 +4352,7 @@ rel_order_by(sql_query *query, sql_rel *
set_direction(e, direction);
append(exps, e);
} else {
- return sql_error(sql, 02, SQLSTATE(42000) "order not of
type SQL_COLUMN");
+ return sql_error(sql, 02, SQLSTATE(42000) "SELECT:
order not of type SQL_COLUMN");
}
}
if (is_sql_orderby(f) && or != rel)
diff --git a/sql/test/subquery/Tests/subquery3.sql
b/sql/test/subquery/Tests/subquery3.sql
--- a/sql/test/subquery/Tests/subquery3.sql
+++ b/sql/test/subquery/Tests/subquery3.sql
@@ -551,6 +551,12 @@ SELECT
(SELECT i2.i FROM (VALUES (i1.i, i1.i), (i1.i, i1.i)) as i2(i))
FROM integers i1; --error, more than one row returned by a subquery used as an
expression
+SELECT i FROM integers ORDER BY (SELECT true);
+ -- 1
+ -- 2
+ -- 3
+ -- NULL
+
/* We shouldn't allow the following internal functions/procedures to be called
from regular queries */
--SELECT "identity"(col1) FROM another_T;
--SELECT "rowid"(col1) FROM another_T;
diff --git a/sql/test/subquery/Tests/subquery3.stable.err
b/sql/test/subquery/Tests/subquery3.stable.err
--- a/sql/test/subquery/Tests/subquery3.stable.err
+++ b/sql/test/subquery/Tests/subquery3.stable.err
@@ -275,12 +275,6 @@ ERROR = !SELECT: identifier 'col0' unkno
CODE = 42000
MAPI = (monetdb) /var/tmp/mtest-139585/.s.monetdb.31629
QUERY = SELECT
- (SELECT outt FROM evilfunction((SELECT col1)))
- FROM another_T; --error, more than one row returned by a subquery used
as an expression
-ERROR = !zero_or_one: cardinality violation, scalar expression expected
-CODE = M0M29
-MAPI = (monetdb) /var/tmp/mtest-139585/.s.monetdb.31629
-QUERY = SELECT
(SELECT outt FROM evilfunction((SELECT col1 FROM
tbl_ProductSales)))
FROM another_T; --error, more than one row returned by a subquery used
as an expression
ERROR = !zero_or_one: cardinality violation, scalar expression expected
diff --git a/sql/test/subquery/Tests/subquery3.stable.out
b/sql/test/subquery/Tests/subquery3.stable.out
--- a/sql/test/subquery/Tests/subquery3.stable.out
+++ b/sql/test/subquery/Tests/subquery3.stable.out
@@ -504,6 +504,15 @@ stdout of test 'subquery3` in directory
[ 1 ]
[ 1 ]
[ 1 ]
+#SELECT i FROM integers ORDER BY (SELECT true);
+% sys.integers # table_name
+% i # name
+% int # type
+% 1 # length
+[ 1 ]
+[ 2 ]
+[ 3 ]
+[ NULL ]
#DROP FUNCTION evilfunction(INT);
#DROP TABLE tbl_ProductSales;
#DROP TABLE another_T;
diff --git a/sql/test/subquery/Tests/subquery4.sql
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -36,6 +36,8 @@ SELECT
(SELECT 1,1 UNION ALL SELECT 2,2)
FROM integers i1; --error, subquery must return only one column
+SELECT i FROM integers i1 ORDER BY (SELECT 1 UNION ALL SELECT 2); --error,
more than one row returned by a subquery used as an expression
+
SELECT
(SELECT 1 UNION ALL SELECT 2)
FROM integers i1; --error, more than one row returned by a subquery used as an
expression
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list