| Index: third_party/sqlite/src/test/e_select.test
|
| diff --git a/third_party/sqlite/src/test/e_select.test b/third_party/sqlite/src/test/e_select.test
|
| index 79e334ce304d62e739fd3bb560db04b961428653..89d61b53bc575f02e1ba3245e408d263358e73b6 100644
|
| --- a/third_party/sqlite/src/test/e_select.test
|
| +++ b/third_party/sqlite/src/test/e_select.test
|
| @@ -16,6 +16,11 @@
|
| set testdir [file dirname $argv0]
|
| source $testdir/tester.tcl
|
|
|
| +ifcapable !compound {
|
| + finish_test
|
| + return
|
| +}
|
| +
|
| do_execsql_test e_select-1.0 {
|
| CREATE TABLE t1(a, b);
|
| INSERT INTO t1 VALUES('a', 'one');
|
| @@ -78,7 +83,7 @@ proc do_join_test {tn select res} {
|
| # The following tests check that all paths on the syntax diagrams on
|
| # the lang_select.html page may be taken.
|
| #
|
| -# EVIDENCE-OF: R-18428-22111 -- syntax diagram join-constraint
|
| +# -- syntax diagram join-constraint
|
| #
|
| do_join_test e_select-0.1.1 {
|
| SELECT count(*) FROM t1 %JOIN% t2 ON (t1.a=t2.a)
|
| @@ -96,7 +101,7 @@ do_catchsql_test e_select-0.1.5 {
|
| SELECT count(*) FROM t1, t2 USING (a) ON (t1.a=t2.a)
|
| } {1 {near "ON": syntax error}}
|
|
|
| -# EVIDENCE-OF: R-44854-11739 -- syntax diagram select-core
|
| +# -- syntax diagram select-core
|
| #
|
| # 0: SELECT ...
|
| # 1: SELECT DISTINCT ...
|
| @@ -221,7 +226,7 @@ do_select_tests e_select-0.2 {
|
| }
|
|
|
|
|
| -# EVIDENCE-OF: R-23316-20169 -- syntax diagram result-column
|
| +# -- syntax diagram result-column
|
| #
|
| do_select_tests e_select-0.3 {
|
| 1 "SELECT * FROM t1" {a one b two c three}
|
| @@ -231,9 +236,9 @@ do_select_tests e_select-0.3 {
|
| 5 "SELECT 'x'||a||'x' AS alias FROM t1" {xax xbx xcx}
|
| }
|
|
|
| -# EVIDENCE-OF: R-41233-21397 -- syntax diagram join-source
|
| +# -- syntax diagram join-source
|
| #
|
| -# EVIDENCE-OF: R-45040-11121 -- syntax diagram join-op
|
| +# -- syntax diagram join-op
|
| #
|
| do_select_tests e_select-0.4 {
|
| 1 "SELECT t1.rowid FROM t1" {1 2 3}
|
| @@ -258,7 +263,7 @@ do_select_tests e_select-0.4 {
|
| 16 "SELECT t1.rowid FROM t1 CROSS JOIN t3" {1 1 2 2 3 3}
|
| }
|
|
|
| -# EVIDENCE-OF: R-56911-63533 -- syntax diagram compound-operator
|
| +# -- syntax diagram compound-operator
|
| #
|
| do_select_tests e_select-0.5 {
|
| 1 "SELECT rowid FROM t1 UNION ALL SELECT rowid+2 FROM t4" {1 2 3 3 4}
|
| @@ -267,7 +272,7 @@ do_select_tests e_select-0.5 {
|
| 4 "SELECT rowid FROM t1 EXCEPT SELECT rowid+2 FROM t4" {1 2}
|
| }
|
|
|
| -# EVIDENCE-OF: R-60388-27458 -- syntax diagram ordering-term
|
| +# -- syntax diagram ordering-term
|
| #
|
| do_select_tests e_select-0.6 {
|
| 1 "SELECT b||a FROM t1 ORDER BY b||a" {onea threec twob}
|
| @@ -276,7 +281,7 @@ do_select_tests e_select-0.6 {
|
| 4 "SELECT b||a FROM t1 ORDER BY (b||a) DESC" {twob threec onea}
|
| }
|
|
|
| -# EVIDENCE-OF: R-36494-33519 -- syntax diagram select-stmt
|
| +# -- syntax diagram select-stmt
|
| #
|
| do_select_tests e_select-0.7 {
|
| 1 "SELECT * FROM t1" {a one b two c three}
|
| @@ -328,9 +333,9 @@ do_select_tests e_select-1.1 {
|
| 6 "SELECT count(*) WHERE 1" {1}
|
| }
|
|
|
| -# EVIDENCE-OF: R-48114-33255 If there is only a single table in the
|
| -# join-source following the FROM clause, then the input data used by the
|
| -# SELECT statement is the contents of the named table.
|
| +# EVIDENCE-OF: R-45424-07352 If there is only a single table or subquery
|
| +# in the FROM clause, then the input data used by the SELECT statement
|
| +# is the contents of the named table.
|
| #
|
| # The results of the SELECT queries suggest that they are operating on the
|
| # contents of the table 'xx'.
|
| @@ -352,10 +357,10 @@ do_select_tests e_select-1.2 {
|
| 3 "SELECT sum(x), sum(y) FROM xx" {-17.89 -16.87}
|
| }
|
|
|
| -# EVIDENCE-OF: R-23593-12456 If there is more than one table specified
|
| -# as part of the join-source following the FROM keyword, then the
|
| -# contents of each named table are joined into a single dataset for the
|
| -# simple SELECT statement to operate on.
|
| +# EVIDENCE-OF: R-28355-09804 If there is more than one table or subquery
|
| +# in FROM clause then the contents of all tables and/or subqueries are
|
| +# joined into a single dataset for the simple SELECT statement to
|
| +# operate on.
|
| #
|
| # There are more detailed tests for subsequent requirements that add
|
| # more detail to this idea. We just add a single test that shows that
|
| @@ -378,10 +383,10 @@ do_select_tests e_select-1.3 {
|
| # of cartesian joins in the SELECT documentation is consistent with SQLite.
|
| # In doing so, we test the following three requirements as a side-effect:
|
| #
|
| -# EVIDENCE-OF: R-46122-14930 If the join-op is "CROSS JOIN", "INNER
|
| -# JOIN", "JOIN" or a comma (",") and there is no ON or USING clause,
|
| -# then the result of the join is simply the cartesian product of the
|
| -# left and right-hand datasets.
|
| +# EVIDENCE-OF: R-49872-03192 If the join-operator is "CROSS JOIN",
|
| +# "INNER JOIN", "JOIN" or a comma (",") and there is no ON or USING
|
| +# clause, then the result of the join is simply the cartesian product of
|
| +# the left and right-hand datasets.
|
| #
|
| # The tests are built on this assertion. Really, they test that the output
|
| # of a CROSS JOIN, JOIN, INNER JOIN or "," join matches the expected result
|
| @@ -390,8 +395,8 @@ do_select_tests e_select-1.3 {
|
| # EVIDENCE-OF: R-46256-57243 There is no difference between the "INNER
|
| # JOIN", "JOIN" and "," join operators.
|
| #
|
| -# EVIDENCE-OF: R-07544-24155 The "CROSS JOIN" join operator produces the
|
| -# same data as the "INNER JOIN", "JOIN" and "," operators
|
| +# EVIDENCE-OF: R-25071-21202 The "CROSS JOIN" join operator produces the
|
| +# same result as the "INNER JOIN", "JOIN" and "," operators
|
| #
|
| # All tests are run 4 times, with the only difference in each run being
|
| # which of the 4 equivalent cartesian product join operators are used.
|
| @@ -445,24 +450,24 @@ do_join_test e_select-1.4.1.4 {
|
| # left-hand and right-hand datasets.
|
| #
|
| do_join_test e_select-1.4.2.1 {
|
| - SELECT * FROM x2 %JOIN% x3
|
| + SELECT * FROM x2 %JOIN% x3 ORDER BY +c, +f
|
| } [list -60.06 {} {} -39.24 {} encompass -1 \
|
| - -60.06 {} {} presenting 51 reformation dignified \
|
| - -60.06 {} {} conducting -87.24 37.56 {} \
|
| - -60.06 {} {} coldest -96 dramatists 82.3 \
|
| -60.06 {} {} alerting {} -93.79 {} \
|
| + -60.06 {} {} coldest -96 dramatists 82.3 \
|
| + -60.06 {} {} conducting -87.24 37.56 {} \
|
| + -60.06 {} {} presenting 51 reformation dignified \
|
| -58 {} 1.21 -39.24 {} encompass -1 \
|
| - -58 {} 1.21 presenting 51 reformation dignified \
|
| - -58 {} 1.21 conducting -87.24 37.56 {} \
|
| - -58 {} 1.21 coldest -96 dramatists 82.3 \
|
| -58 {} 1.21 alerting {} -93.79 {} \
|
| + -58 {} 1.21 coldest -96 dramatists 82.3 \
|
| + -58 {} 1.21 conducting -87.24 37.56 {} \
|
| + -58 {} 1.21 presenting 51 reformation dignified \
|
| ]
|
| # TODO: Come back and add a few more like the above.
|
|
|
| -# EVIDENCE-OF: R-20659-43267 In other words, if the left-hand dataset
|
| -# consists of Nlhs rows of Mlhs columns, and the right-hand dataset of
|
| -# Nrhs rows of Mrhs columns, then the cartesian product is a dataset of
|
| -# Nlhs.Nrhs rows, each containing Mlhs+Mrhs columns.
|
| +# EVIDENCE-OF: R-18439-38548 In other words, if the left-hand dataset
|
| +# consists of Nleft rows of Mleft columns, and the right-hand dataset of
|
| +# Nright rows of Mright columns, then the cartesian product is a dataset
|
| +# of Nleft×Nright rows, each containing Mleft+Mright columns.
|
| #
|
| # x1, x2 (Nlhs=3, Nrhs=2) (Mlhs=2, Mrhs=3)
|
| do_join_test e_select-1.4.3.1 {
|
| @@ -508,11 +513,10 @@ do_select_tests e_select-1.4.5 [list \
|
| 4 { SELECT * FROM t1 AS y INNER JOIN t1 AS x } $t1_cross_t1 \
|
| ]
|
|
|
| -
|
| -# EVIDENCE-OF: R-22775-56496 If there is an ON clause specified, then
|
| -# the ON expression is evaluated for each row of the cartesian product
|
| -# as a boolean expression. All rows for which the expression evaluates
|
| -# to false are excluded from the dataset.
|
| +# EVIDENCE-OF: R-38465-03616 If there is an ON clause then the ON
|
| +# expression is evaluated for each row of the cartesian product as a
|
| +# boolean expression. Only rows for which the expression evaluates to
|
| +# true are included from the dataset.
|
| #
|
| foreach {tn select res} [list \
|
| 1 { SELECT * FROM t1 %JOIN% t2 ON (1) } $t1_cross_t2 \
|
| @@ -535,9 +539,9 @@ foreach {tn select res} [list \
|
| do_join_test e_select-1.3.$tn $select $res
|
| }
|
|
|
| -# EVIDENCE-OF: R-63358-54862 If there is a USING clause specified as
|
| -# part of the join-constraint, then each of the column names specified
|
| -# must exist in the datasets to both the left and right of the join-op.
|
| +# EVIDENCE-OF: R-49933-05137 If there is a USING clause then each of the
|
| +# column names specified must exist in the datasets to both the left and
|
| +# right of the join-operator.
|
| #
|
| do_select_tests e_select-1.4 -error {
|
| cannot join using column %s - column not present in both tables
|
| @@ -547,10 +551,10 @@ do_select_tests e_select-1.4 -error {
|
| 3 { SELECT * FROM t3, (SELECT a AS b, b AS c FROM t1) USING (a) } "a"
|
| }
|
|
|
| -# EVIDENCE-OF: R-55987-04584 For each pair of namesake columns, the
|
| +# EVIDENCE-OF: R-22776-52830 For each pair of named columns, the
|
| # expression "lhs.X = rhs.X" is evaluated for each row of the cartesian
|
| -# product as a boolean expression. All rows for which one or more of the
|
| -# expressions evaluates to false are excluded from the result set.
|
| +# product as a boolean expression. Only rows for which all such
|
| +# expressions evaluates to true are included from the result set.
|
| #
|
| do_select_tests e_select-1.5 {
|
| 1 { SELECT * FROM t1, t3 USING (a) } {a one 1 b two 2}
|
| @@ -561,8 +565,8 @@ do_select_tests e_select-1.5 {
|
| # USING clause, the normal rules for handling affinities, collation
|
| # sequences and NULL values in comparisons apply.
|
| #
|
| -# EVIDENCE-OF: R-35466-18578 The column from the dataset on the
|
| -# left-hand side of the join operator is considered to be on the
|
| +# EVIDENCE-OF: R-38422-04402 The column from the dataset on the
|
| +# left-hand side of the join-operator is considered to be on the
|
| # left-hand side of the comparison operator (=) for the purposes of
|
| # collation sequence and affinity precedence.
|
| #
|
| @@ -617,10 +621,9 @@ foreach {tn select res} {
|
| } {
|
| do_join_test e_select-1.7.$tn $select $res
|
| }
|
| -
|
| -# EVIDENCE-OF: R-41434-12448 If the join-op is a "LEFT JOIN" or "LEFT
|
| -# OUTER JOIN", then after the ON or USING filtering clauses have been
|
| -# applied, an extra row is added to the output for each row in the
|
| +# EVIDENCE-OF: R-42531-52874 If the join-operator is a "LEFT JOIN" or
|
| +# "LEFT OUTER JOIN", then after the ON or USING filtering clauses have
|
| +# been applied, an extra row is added to the output for each row in the
|
| # original left-hand input dataset that corresponds to no rows at all in
|
| # the composite dataset (if any).
|
| #
|
| @@ -655,8 +658,8 @@ do_select_tests e_select-1.9 {
|
| 2b "SELECT * FROM t7 LEFT JOIN t8 USING (a)" {x ex 24 abc 24 y why 25 {} {}}
|
| }
|
|
|
| -# EVIDENCE-OF: R-01809-52134 If the NATURAL keyword is added to any of
|
| -# the join-ops, then an implicit USING clause is added to the
|
| +# EVIDENCE-OF: R-04932-55942 If the NATURAL keyword is in the
|
| +# join-operator then an implicit USING clause is added to the
|
| # join-constraints. The implicit USING clause contains each of the
|
| # column names that appear in both the left and right-hand input
|
| # datasets.
|
| @@ -729,10 +732,10 @@ do_execsql_test e_select-3.0 {
|
| INSERT INTO x2 VALUES(7, 'mistrusted', 'standardized');
|
| } {}
|
|
|
| -# EVIDENCE-OF: R-06999-14330 If a WHERE clause is specified, the WHERE
|
| +# EVIDENCE-OF: R-60775-64916 If a WHERE clause is specified, the WHERE
|
| # expression is evaluated for each row in the input data as a boolean
|
| -# expression. All rows for which the WHERE clause expression evaluates
|
| -# to false are excluded from the dataset before continuing.
|
| +# expression. Only rows for which the WHERE clause expression evaluates
|
| +# to true are included from the dataset before continuing.
|
| #
|
| do_execsql_test e_select-3.1.1 { SELECT k FROM x1 WHERE x } {3}
|
| do_execsql_test e_select-3.1.2 { SELECT k FROM x1 WHERE y } {3 5 6}
|
| @@ -800,7 +803,7 @@ do_select_tests e_select-4.1 {
|
|
|
| 6 "SELECT count(*), * FROM z1" {6 63 born -26}
|
| 7 "SELECT max(a), * FROM z1" {63 63 born -26}
|
| - 8 "SELECT *, min(a) FROM z1" {63 born -26 -5}
|
| + 8 "SELECT *, min(a) FROM z1" {-5 {} 75 -5}
|
|
|
| 9 "SELECT *,* FROM z1,z2 LIMIT 1" {
|
| 51.65 -59.58 belfries {} 21 51.65 -59.58 belfries {} 21
|
| @@ -810,8 +813,8 @@ do_select_tests e_select-4.1 {
|
| }
|
| }
|
|
|
| -# EVIDENCE-OF: R-61869-22578 It is an error to use a "*" or "alias.*"
|
| -# expression in any context other than than a result expression list.
|
| +# EVIDENCE-OF: R-38023-18396 It is an error to use a "*" or "alias.*"
|
| +# expression in any context other than a result expression list.
|
| #
|
| # EVIDENCE-OF: R-44324-41166 It is also an error to use a "*" or
|
| # "alias.*" expression in a simple SELECT query that does not have a
|
| @@ -1004,12 +1007,12 @@ do_execsql_test e_select-4.9.0 {
|
| INSERT INTO b3 VALUES('dEF', 'dEF');
|
| } {}
|
|
|
| -# EVIDENCE-OF: R-57754-57109 If the SELECT statement is an aggregate
|
| +# EVIDENCE-OF: R-07284-35990 If the SELECT statement is an aggregate
|
| # query with a GROUP BY clause, then each of the expressions specified
|
| # as part of the GROUP BY clause is evaluated for each row of the
|
| # dataset. Each row is then assigned to a "group" based on the results;
|
| # rows for which the results of evaluating the GROUP BY expressions are
|
| -# the same are assigned to the same group.
|
| +# the same get assigned to the same group.
|
| #
|
| # These tests also show that the following is not untrue:
|
| #
|
| @@ -1018,10 +1021,10 @@ do_execsql_test e_select-4.9.0 {
|
| #
|
| do_select_tests e_select-4.9 {
|
| 1 "SELECT group_concat(one), two FROM b1 GROUP BY two" {
|
| - 4,5 f 1 o 7,6 s 3,2 t
|
| + /#,# f 1 o #,# s #,# t/
|
| }
|
| 2 "SELECT group_concat(one), sum(one) FROM b1 GROUP BY (one>4)" {
|
| - 1,4,3,2 10 5,7,6 18
|
| + 1,2,3,4 10 5,6,7 18
|
| }
|
| 3 "SELECT group_concat(one) FROM b1 GROUP BY (two>'o'), one%2" {
|
| 4 1,5 2,6 3,7
|
| @@ -1035,7 +1038,7 @@ do_select_tests e_select-4.9 {
|
| # values are considered equal.
|
| #
|
| do_select_tests e_select-4.10 {
|
| - 1 "SELECT group_concat(y) FROM b2 GROUP BY x" {0,1 3 2,4}
|
| + 1 "SELECT group_concat(y) FROM b2 GROUP BY x" {/#,# 3 #,#/}
|
| 2 "SELECT count(*) FROM b2 GROUP BY CASE WHEN y<4 THEN NULL ELSE 0 END" {4 1}
|
| }
|
|
|
| @@ -1221,8 +1224,8 @@ do_select_tests e_select-5.1 {
|
| # EVIDENCE-OF: R-08861-34280 If the simple SELECT is a SELECT ALL, then
|
| # the entire set of result rows are returned by the SELECT.
|
| #
|
| -# EVIDENCE-OF: R-47911-02086 If neither ALL or DISTINCT are present,
|
| -# then the behaviour is as if ALL were specified.
|
| +# EVIDENCE-OF: R-01256-01950 If neither ALL or DISTINCT are present,
|
| +# then the behavior is as if ALL were specified.
|
| #
|
| # EVIDENCE-OF: R-14442-41305 If the simple SELECT is a SELECT DISTINCT,
|
| # then duplicate rows are removed from the set of result rows before it
|
| @@ -1238,8 +1241,8 @@ do_select_tests e_select-5 {
|
| 3.1 "SELECT x FROM h2" {One Two Three Four one two three four}
|
| 3.2 "SELECT x FROM h1, h2 ON (x=b)" {One one Four four}
|
|
|
| - 4.1 "SELECT DISTINCT x FROM h2" {four one three two}
|
| - 4.2 "SELECT DISTINCT x FROM h1, h2 ON (x=b)" {four one}
|
| + 4.1 "SELECT DISTINCT x FROM h2" {One Two Three Four}
|
| + 4.2 "SELECT DISTINCT x FROM h1, h2 ON (x=b)" {One Four}
|
| }
|
|
|
| # EVIDENCE-OF: R-02054-15343 For the purposes of detecting duplicate
|
| @@ -1253,11 +1256,11 @@ do_select_tests e_select-5.5 {
|
| # sequence to compare text values with apply.
|
| #
|
| do_select_tests e_select-5.6 {
|
| - 1 "SELECT DISTINCT b FROM h1" {I IV four i iv one}
|
| - 2 "SELECT DISTINCT b COLLATE nocase FROM h1" {four i iv one}
|
| - 3 "SELECT DISTINCT x FROM h2" {four one three two}
|
| + 1 "SELECT DISTINCT b FROM h1" {one I i four IV iv}
|
| + 2 "SELECT DISTINCT b COLLATE nocase FROM h1" {one I four IV}
|
| + 3 "SELECT DISTINCT x FROM h2" {One Two Three Four}
|
| 4 "SELECT DISTINCT x COLLATE binary FROM h2" {
|
| - Four One Three Two four one three two
|
| + One Two Three Four one two three four
|
| }
|
| }
|
|
|
| @@ -1368,8 +1371,9 @@ foreach {tn select op1 op2} {
|
| do_catchsql_test e_select-7.2.$tn $select [list 1 $err]
|
| }
|
|
|
| -# EVIDENCE-OF: R-22874-32655 ORDER BY and LIMIT clauses may only occur
|
| -# at the end of the entire compound SELECT.
|
| +# EVIDENCE-OF: R-45440-25633 ORDER BY and LIMIT clauses may only occur
|
| +# at the end of the entire compound SELECT, and then only if the final
|
| +# element of the compound is not a VALUES clause.
|
| #
|
| foreach {tn select} {
|
| 1 "SELECT * FROM j1 UNION ALL SELECT * FROM j2,j3 ORDER BY a"
|
| @@ -1381,6 +1385,7 @@ foreach {tn select} {
|
|
|
| 7 "SELECT * FROM j1 UNION SELECT * FROM j2,j3 ORDER BY a"
|
| 8 "SELECT count(*) FROM j1 UNION SELECT max(e) FROM j2 ORDER BY 1"
|
| + 8b "VALUES('8b') UNION SELECT max(e) FROM j2 ORDER BY 1"
|
| 9 "SELECT count(*), * FROM j1 UNION SELECT *,* FROM j2 ORDER BY 1,2,3"
|
| 10 "SELECT * FROM j1 UNION SELECT * FROM j2,j3 LIMIT 10"
|
| 11 "SELECT * FROM j1 UNION SELECT * FROM j2,j3 LIMIT 10 OFFSET 5"
|
| @@ -1402,6 +1407,14 @@ foreach {tn select} {
|
| } {
|
| do_test e_select-7.3.$tn { catch {execsql $select} msg } 0
|
| }
|
| +foreach {tn select} {
|
| + 50 "SELECT * FROM j1 ORDER BY 1 UNION ALL SELECT * FROM j2,j3"
|
| + 51 "SELECT * FROM j1 LIMIT 1 UNION ALL SELECT * FROM j2,j3"
|
| + 52 "SELECT count(*) FROM j1 UNION ALL VALUES(11) ORDER BY 1"
|
| + 53 "SELECT count(*) FROM j1 UNION ALL VALUES(11) LIMIT 1"
|
| +} {
|
| + do_test e_select-7.3.$tn { catch {execsql $select} msg } 1
|
| +}
|
|
|
| # EVIDENCE-OF: R-08531-36543 A compound SELECT created using UNION ALL
|
| # operator returns all the rows from the SELECT to the left of the UNION
|
| @@ -1740,12 +1753,12 @@ do_select_tests e_select-8.4 {
|
| 1 2 7 1 2 8 1 4 93 1 5 -1
|
| }
|
| 8 "SELECT z, x FROM d1 ORDER BY 2" {
|
| - 3 1 8 1 7 1 -20 1
|
| - 93 1 -1 1 -1 2 93 2
|
| + /# 1 # 1 # 1 # 1
|
| + # 1 # 1 # 2 # 2/
|
| }
|
| 9 "SELECT z, x FROM d1 ORDER BY 1" {
|
| - -20 1 -1 2 -1 1 3 1
|
| - 7 1 8 1 93 2 93 1
|
| + /-20 1 -1 # -1 # 3 1
|
| + 7 1 8 1 93 # 93 #/
|
| }
|
| }
|
|
|
| @@ -1761,16 +1774,16 @@ do_select_tests e_select-8.5 {
|
| 94 94 9 8 4 0 0 -19
|
| }
|
| 3 "SELECT z AS x, x AS z FROM d1 ORDER BY z" {
|
| - 3 1 8 1 7 1 -20 1 93 1 -1 1 -1 2 93 2
|
| + /# 1 # 1 # 1 # 1 # 1 # 1 # 2 # 2/
|
| }
|
| 4 "SELECT z AS x, x AS z FROM d1 ORDER BY x" {
|
| - -20 1 -1 2 -1 1 3 1 7 1 8 1 93 2 93 1
|
| + /-20 1 -1 # -1 # 3 1 7 1 8 1 93 # 93 #/
|
| }
|
| }
|
|
|
| -# EVIDENCE-OF: R-27923-38747 Otherwise, if the ORDER BY expression is
|
| -# any other expression, it is evaluated and the the returned value used
|
| -# to order the output rows.
|
| +# EVIDENCE-OF: R-65068-27207 Otherwise, if the ORDER BY expression is
|
| +# any other expression, it is evaluated and the returned value used to
|
| +# order the output rows.
|
| #
|
| # EVIDENCE-OF: R-03421-57988 If the SELECT statement is a simple SELECT,
|
| # then an ORDER BY may contain any arbitrary expressions.
|
|
|