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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list