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

Reply via email to