| OLD | NEW | 
 | (Empty) | 
|    1 # 2001 September 15. |  | 
|    2 # |  | 
|    3 # The author disclaims copyright to this source code.  In place of |  | 
|    4 # a legal notice, here is a blessing: |  | 
|    5 # |  | 
|    6 #    May you do good and not evil. |  | 
|    7 #    May you find forgiveness for yourself and forgive others. |  | 
|    8 #    May you share freely, never taking more than you give. |  | 
|    9 # |  | 
|   10 #*********************************************************************** |  | 
|   11 # This file implements regression tests for SQLite library.  The |  | 
|   12 # focus of this file is testing the CREATE TABLE statement. |  | 
|   13 # |  | 
|   14 # $Id: sort.test,v 1.25 2005/11/14 22:29:06 drh Exp $ |  | 
|   15  |  | 
|   16 set testdir [file dirname $argv0] |  | 
|   17 source $testdir/tester.tcl |  | 
|   18  |  | 
|   19 # Create a bunch of data to sort against |  | 
|   20 # |  | 
|   21 do_test sort-1.0 { |  | 
|   22   execsql { |  | 
|   23     CREATE TABLE t1( |  | 
|   24        n int, |  | 
|   25        v varchar(10), |  | 
|   26        log int, |  | 
|   27        roman varchar(10), |  | 
|   28        flt real |  | 
|   29     ); |  | 
|   30     INSERT INTO t1 VALUES(1,'one',0,'I',3.141592653); |  | 
|   31     INSERT INTO t1 VALUES(2,'two',1,'II',2.15); |  | 
|   32     INSERT INTO t1 VALUES(3,'three',1,'III',4221.0); |  | 
|   33     INSERT INTO t1 VALUES(4,'four',2,'IV',-0.0013442); |  | 
|   34     INSERT INTO t1 VALUES(5,'five',2,'V',-11); |  | 
|   35     INSERT INTO t1 VALUES(6,'six',2,'VI',0.123); |  | 
|   36     INSERT INTO t1 VALUES(7,'seven',2,'VII',123.0); |  | 
|   37     INSERT INTO t1 VALUES(8,'eight',3,'VIII',-1.6); |  | 
|   38   } |  | 
|   39   execsql {SELECT count(*) FROM t1} |  | 
|   40 } {8} |  | 
|   41  |  | 
|   42 do_test sort-1.1 { |  | 
|   43   execsql {SELECT n FROM t1 ORDER BY n} |  | 
|   44 } {1 2 3 4 5 6 7 8} |  | 
|   45 do_test sort-1.1.1 { |  | 
|   46   execsql {SELECT n FROM t1 ORDER BY n ASC} |  | 
|   47 } {1 2 3 4 5 6 7 8} |  | 
|   48 do_test sort-1.1.1 { |  | 
|   49   execsql {SELECT ALL n FROM t1 ORDER BY n ASC} |  | 
|   50 } {1 2 3 4 5 6 7 8} |  | 
|   51 do_test sort-1.2 { |  | 
|   52   execsql {SELECT n FROM t1 ORDER BY n DESC} |  | 
|   53 } {8 7 6 5 4 3 2 1} |  | 
|   54 do_test sort-1.3a { |  | 
|   55   execsql {SELECT v FROM t1 ORDER BY v} |  | 
|   56 } {eight five four one seven six three two} |  | 
|   57 do_test sort-1.3b { |  | 
|   58   execsql {SELECT n FROM t1 ORDER BY v} |  | 
|   59 } {8 5 4 1 7 6 3 2} |  | 
|   60 do_test sort-1.4 { |  | 
|   61   execsql {SELECT n FROM t1 ORDER BY v DESC} |  | 
|   62 } {2 3 6 7 1 4 5 8} |  | 
|   63 do_test sort-1.5 { |  | 
|   64   execsql {SELECT flt FROM t1 ORDER BY flt} |  | 
|   65 } {-11.0 -1.6 -0.0013442 0.123 2.15 3.141592653 123.0 4221.0} |  | 
|   66 do_test sort-1.6 { |  | 
|   67   execsql {SELECT flt FROM t1 ORDER BY flt DESC} |  | 
|   68 } {4221.0 123.0 3.141592653 2.15 0.123 -0.0013442 -1.6 -11.0} |  | 
|   69 do_test sort-1.7 { |  | 
|   70   execsql {SELECT roman FROM t1 ORDER BY roman} |  | 
|   71 } {I II III IV V VI VII VIII} |  | 
|   72 do_test sort-1.8 { |  | 
|   73   execsql {SELECT n FROM t1 ORDER BY log, flt} |  | 
|   74 } {1 2 3 5 4 6 7 8} |  | 
|   75 do_test sort-1.8.1 { |  | 
|   76   execsql {SELECT n FROM t1 ORDER BY log asc, flt} |  | 
|   77 } {1 2 3 5 4 6 7 8} |  | 
|   78 do_test sort-1.8.2 { |  | 
|   79   execsql {SELECT n FROM t1 ORDER BY log, flt ASC} |  | 
|   80 } {1 2 3 5 4 6 7 8} |  | 
|   81 do_test sort-1.8.3 { |  | 
|   82   execsql {SELECT n FROM t1 ORDER BY log ASC, flt asc} |  | 
|   83 } {1 2 3 5 4 6 7 8} |  | 
|   84 do_test sort-1.9 { |  | 
|   85   execsql {SELECT n FROM t1 ORDER BY log, flt DESC} |  | 
|   86 } {1 3 2 7 6 4 5 8} |  | 
|   87 do_test sort-1.9.1 { |  | 
|   88   execsql {SELECT n FROM t1 ORDER BY log ASC, flt DESC} |  | 
|   89 } {1 3 2 7 6 4 5 8} |  | 
|   90 do_test sort-1.10 { |  | 
|   91   execsql {SELECT n FROM t1 ORDER BY log DESC, flt} |  | 
|   92 } {8 5 4 6 7 2 3 1} |  | 
|   93 do_test sort-1.11 { |  | 
|   94   execsql {SELECT n FROM t1 ORDER BY log DESC, flt DESC} |  | 
|   95 } {8 7 6 4 5 3 2 1} |  | 
|   96  |  | 
|   97 # These tests are designed to reach some hard-to-reach places |  | 
|   98 # inside the string comparison routines. |  | 
|   99 # |  | 
|  100 # (Later) The sorting behavior changed in 2.7.0.  But we will |  | 
|  101 # keep these tests.  You can never have too many test cases! |  | 
|  102 # |  | 
|  103 do_test sort-2.1.1 { |  | 
|  104   execsql { |  | 
|  105     UPDATE t1 SET v='x' || -flt; |  | 
|  106     UPDATE t1 SET v='x-2b' where v=='x-0.123'; |  | 
|  107     SELECT v FROM t1 ORDER BY v; |  | 
|  108   } |  | 
|  109 } {x-123.0 x-2.15 x-2b x-3.141592653 x-4221.0 x0.0013442 x1.6 x11.0} |  | 
|  110 do_test sort-2.1.2 { |  | 
|  111   execsql { |  | 
|  112     SELECT v FROM t1 ORDER BY substr(v,2,999); |  | 
|  113   } |  | 
|  114 } {x-123.0 x-2.15 x-2b x-3.141592653 x-4221.0 x0.0013442 x1.6 x11.0} |  | 
|  115 do_test sort-2.1.3 { |  | 
|  116   execsql { |  | 
|  117     SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0; |  | 
|  118   } |  | 
|  119 } {x-4221.0 x-123.0 x-3.141592653 x-2.15 x-2b x0.0013442 x1.6 x11.0} |  | 
|  120 do_test sort-2.1.4 { |  | 
|  121   execsql { |  | 
|  122     SELECT v FROM t1 ORDER BY substr(v,2,999) DESC; |  | 
|  123   } |  | 
|  124 } {x11.0 x1.6 x0.0013442 x-4221.0 x-3.141592653 x-2b x-2.15 x-123.0} |  | 
|  125 do_test sort-2.1.5 { |  | 
|  126   execsql { |  | 
|  127     SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0 DESC; |  | 
|  128   } |  | 
|  129 } {x11.0 x1.6 x0.0013442 x-2b x-2.15 x-3.141592653 x-123.0 x-4221.0} |  | 
|  130  |  | 
|  131 # This is a bug fix for 2.2.4. |  | 
|  132 # Strings are normally mapped to upper-case for a caseless comparison. |  | 
|  133 # But this can cause problems for characters in between 'Z' and 'a'. |  | 
|  134 # |  | 
|  135 do_test sort-3.1 { |  | 
|  136   execsql { |  | 
|  137     CREATE TABLE t2(a,b); |  | 
|  138     INSERT INTO t2 VALUES('AGLIENTU',1); |  | 
|  139     INSERT INTO t2 VALUES('AGLIE`',2); |  | 
|  140     INSERT INTO t2 VALUES('AGNA',3); |  | 
|  141     SELECT a, b FROM t2 ORDER BY a; |  | 
|  142   } |  | 
|  143 } {AGLIENTU 1 AGLIE` 2 AGNA 3} |  | 
|  144 do_test sort-3.2 { |  | 
|  145   execsql { |  | 
|  146     SELECT a, b FROM t2 ORDER BY a DESC; |  | 
|  147   } |  | 
|  148 } {AGNA 3 AGLIE` 2 AGLIENTU 1} |  | 
|  149 do_test sort-3.3 { |  | 
|  150   execsql { |  | 
|  151     DELETE FROM t2; |  | 
|  152     INSERT INTO t2 VALUES('aglientu',1); |  | 
|  153     INSERT INTO t2 VALUES('aglie`',2); |  | 
|  154     INSERT INTO t2 VALUES('agna',3); |  | 
|  155     SELECT a, b FROM t2 ORDER BY a; |  | 
|  156   } |  | 
|  157 } {aglie` 2 aglientu 1 agna 3} |  | 
|  158 do_test sort-3.4 { |  | 
|  159   execsql { |  | 
|  160     SELECT a, b FROM t2 ORDER BY a DESC; |  | 
|  161   } |  | 
|  162 } {agna 3 aglientu 1 aglie` 2} |  | 
|  163  |  | 
|  164 # Version 2.7.0 testing. |  | 
|  165 # |  | 
|  166 do_test sort-4.1 { |  | 
|  167   execsql { |  | 
|  168     INSERT INTO t1 VALUES(9,'x2.7',3,'IX',4.0e5); |  | 
|  169     INSERT INTO t1 VALUES(10,'x5.0e10',3,'X',-4.0e5); |  | 
|  170     INSERT INTO t1 VALUES(11,'x-4.0e9',3,'XI',4.1e4); |  | 
|  171     INSERT INTO t1 VALUES(12,'x01234567890123456789',3,'XII',-4.2e3); |  | 
|  172     SELECT n FROM t1 ORDER BY n; |  | 
|  173   } |  | 
|  174 } {1 2 3 4 5 6 7 8 9 10 11 12} |  | 
|  175 do_test sort-4.2 { |  | 
|  176   execsql { |  | 
|  177     SELECT n||'' FROM t1 ORDER BY 1; |  | 
|  178   } |  | 
|  179 } {1 10 11 12 2 3 4 5 6 7 8 9} |  | 
|  180 do_test sort-4.3 { |  | 
|  181   execsql { |  | 
|  182     SELECT n+0 FROM t1 ORDER BY 1; |  | 
|  183   } |  | 
|  184 } {1 2 3 4 5 6 7 8 9 10 11 12} |  | 
|  185 do_test sort-4.4 { |  | 
|  186   execsql { |  | 
|  187     SELECT n||'' FROM t1 ORDER BY 1 DESC; |  | 
|  188   } |  | 
|  189 } {9 8 7 6 5 4 3 2 12 11 10 1} |  | 
|  190 do_test sort-4.5 { |  | 
|  191   execsql { |  | 
|  192     SELECT n+0 FROM t1 ORDER BY 1 DESC; |  | 
|  193   } |  | 
|  194 } {12 11 10 9 8 7 6 5 4 3 2 1} |  | 
|  195 do_test sort-4.6 { |  | 
|  196   execsql { |  | 
|  197     SELECT v FROM t1 ORDER BY 1; |  | 
|  198   } |  | 
|  199 } {x-123.0 x-2.15 x-2b x-3.141592653 x-4.0e9 x-4221.0 x0.0013442 x01234567890123
     456789 x1.6 x11.0 x2.7 x5.0e10} |  | 
|  200 do_test sort-4.7 { |  | 
|  201   execsql { |  | 
|  202     SELECT v FROM t1 ORDER BY 1 DESC; |  | 
|  203   } |  | 
|  204 } {x5.0e10 x2.7 x11.0 x1.6 x01234567890123456789 x0.0013442 x-4221.0 x-4.0e9 x-3
     .141592653 x-2b x-2.15 x-123.0} |  | 
|  205 do_test sort-4.8 { |  | 
|  206   execsql { |  | 
|  207     SELECT substr(v,2,99) FROM t1 ORDER BY 1; |  | 
|  208   } |  | 
|  209 } {-123.0 -2.15 -2b -3.141592653 -4.0e9 -4221.0 0.0013442 01234567890123456789 1
     .6 11.0 2.7 5.0e10} |  | 
|  210 #do_test sort-4.9 { |  | 
|  211 #  execsql { |  | 
|  212 #    SELECT substr(v,2,99)+0.0 FROM t1 ORDER BY 1; |  | 
|  213 #  } |  | 
|  214 #} {-4000000000 -4221 -123 -3.141592653 -2.15 -2 0.0013442 1.6 2.7 11 5000000000
     0 1.23456789012346e+18} |  | 
|  215  |  | 
|  216 do_test sort-5.1 { |  | 
|  217   execsql { |  | 
|  218     create table t3(a,b); |  | 
|  219     insert into t3 values(5,NULL); |  | 
|  220     insert into t3 values(6,NULL); |  | 
|  221     insert into t3 values(3,NULL); |  | 
|  222     insert into t3 values(4,'cd'); |  | 
|  223     insert into t3 values(1,'ab'); |  | 
|  224     insert into t3 values(2,NULL); |  | 
|  225     select a from t3 order by b, a; |  | 
|  226   } |  | 
|  227 } {2 3 5 6 1 4} |  | 
|  228 do_test sort-5.2 { |  | 
|  229   execsql { |  | 
|  230     select a from t3 order by b, a desc; |  | 
|  231   } |  | 
|  232 } {6 5 3 2 1 4} |  | 
|  233 do_test sort-5.3 { |  | 
|  234   execsql { |  | 
|  235     select a from t3 order by b desc, a; |  | 
|  236   } |  | 
|  237 } {4 1 2 3 5 6} |  | 
|  238 do_test sort-5.4 { |  | 
|  239   execsql { |  | 
|  240     select a from t3 order by b desc, a desc; |  | 
|  241   } |  | 
|  242 } {4 1 6 5 3 2} |  | 
|  243  |  | 
|  244 do_test sort-6.1 { |  | 
|  245   execsql { |  | 
|  246     create index i3 on t3(b,a); |  | 
|  247     select a from t3 order by b, a; |  | 
|  248   } |  | 
|  249 } {2 3 5 6 1 4} |  | 
|  250 do_test sort-6.2 { |  | 
|  251   execsql { |  | 
|  252     select a from t3 order by b, a desc; |  | 
|  253   } |  | 
|  254 } {6 5 3 2 1 4} |  | 
|  255 do_test sort-6.3 { |  | 
|  256   execsql { |  | 
|  257     select a from t3 order by b desc, a; |  | 
|  258   } |  | 
|  259 } {4 1 2 3 5 6} |  | 
|  260 do_test sort-6.4 { |  | 
|  261   execsql { |  | 
|  262     select a from t3 order by b desc, a desc; |  | 
|  263   } |  | 
|  264 } {4 1 6 5 3 2} |  | 
|  265  |  | 
|  266 do_test sort-7.1 { |  | 
|  267   execsql { |  | 
|  268     CREATE TABLE t4( |  | 
|  269       a INTEGER, |  | 
|  270       b VARCHAR(30) |  | 
|  271     ); |  | 
|  272     INSERT INTO t4 VALUES(1,1); |  | 
|  273     INSERT INTO t4 VALUES(2,2); |  | 
|  274     INSERT INTO t4 VALUES(11,11); |  | 
|  275     INSERT INTO t4 VALUES(12,12); |  | 
|  276     SELECT a FROM t4 ORDER BY 1; |  | 
|  277   } |  | 
|  278 } {1 2 11 12} |  | 
|  279 do_test sort-7.2 { |  | 
|  280   execsql { |  | 
|  281     SELECT b FROM t4 ORDER BY 1 |  | 
|  282   } |  | 
|  283 } {1 11 12 2} |  | 
|  284  |  | 
|  285 # Omit tests sort-7.3 to sort-7.8 if view support was disabled at |  | 
|  286 # compilatation time. |  | 
|  287 ifcapable view { |  | 
|  288 do_test sort-7.3 { |  | 
|  289   execsql { |  | 
|  290     CREATE VIEW v4 AS SELECT * FROM t4; |  | 
|  291     SELECT a FROM v4 ORDER BY 1; |  | 
|  292   } |  | 
|  293 } {1 2 11 12} |  | 
|  294 do_test sort-7.4 { |  | 
|  295   execsql { |  | 
|  296     SELECT b FROM v4 ORDER BY 1; |  | 
|  297   } |  | 
|  298 } {1 11 12 2} |  | 
|  299  |  | 
|  300 ifcapable compound { |  | 
|  301 do_test sort-7.5 { |  | 
|  302   execsql { |  | 
|  303     SELECT a FROM t4 UNION SELECT a FROM v4 ORDER BY 1; |  | 
|  304   } |  | 
|  305 } {1 2 11 12} |  | 
|  306 do_test sort-7.6 { |  | 
|  307   execsql { |  | 
|  308     SELECT b FROM t4 UNION SELECT a FROM v4 ORDER BY 1; |  | 
|  309   } |  | 
|  310 } {1 2 11 12 1 11 12 2}  ;# text from t4.b and numeric from v4.a |  | 
|  311 do_test sort-7.7 { |  | 
|  312   execsql { |  | 
|  313     SELECT a FROM t4 UNION SELECT b FROM v4 ORDER BY 1; |  | 
|  314   } |  | 
|  315 } {1 2 11 12 1 11 12 2} ;# numeric from t4.a and text from v4.b |  | 
|  316 do_test sort-7.8 { |  | 
|  317   execsql { |  | 
|  318     SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1; |  | 
|  319   } |  | 
|  320 } {1 11 12 2} |  | 
|  321 } ;# ifcapable compound |  | 
|  322 } ;# ifcapable view |  | 
|  323  |  | 
|  324 #### Version 3 works differently here: |  | 
|  325 #do_test sort-7.9 { |  | 
|  326 #  execsql { |  | 
|  327 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE numeric; |  | 
|  328 #  } |  | 
|  329 #} {1 2 11 12} |  | 
|  330 #do_test sort-7.10 { |  | 
|  331 #  execsql { |  | 
|  332 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE integer; |  | 
|  333 #  } |  | 
|  334 #} {1 2 11 12} |  | 
|  335 #do_test sort-7.11 { |  | 
|  336 #  execsql { |  | 
|  337 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE text; |  | 
|  338 #  } |  | 
|  339 #} {1 11 12 2} |  | 
|  340 #do_test sort-7.12 { |  | 
|  341 #  execsql { |  | 
|  342 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE blob; |  | 
|  343 #  } |  | 
|  344 #} {1 11 12 2} |  | 
|  345 #do_test sort-7.13 { |  | 
|  346 #  execsql { |  | 
|  347 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE clob; |  | 
|  348 #  } |  | 
|  349 #} {1 11 12 2} |  | 
|  350 #do_test sort-7.14 { |  | 
|  351 #  execsql { |  | 
|  352 #    SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1 COLLATE varchar; |  | 
|  353 #  } |  | 
|  354 #} {1 11 12 2} |  | 
|  355  |  | 
|  356 # Ticket #297 |  | 
|  357 # |  | 
|  358 do_test sort-8.1 { |  | 
|  359   execsql { |  | 
|  360     CREATE TABLE t5(a real, b text); |  | 
|  361     INSERT INTO t5 VALUES(100,'A1'); |  | 
|  362     INSERT INTO t5 VALUES(100.0,'A2'); |  | 
|  363     SELECT * FROM t5 ORDER BY a, b; |  | 
|  364   } |  | 
|  365 } {100.0 A1 100.0 A2} |  | 
|  366  |  | 
|  367  |  | 
|  368 ifcapable {bloblit} { |  | 
|  369 # BLOBs should sort after TEXT |  | 
|  370 # |  | 
|  371 do_test sort-9.1 { |  | 
|  372   execsql { |  | 
|  373     CREATE TABLE t6(x, y); |  | 
|  374     INSERT INTO t6 VALUES(1,1); |  | 
|  375     INSERT INTO t6 VALUES(2,'1'); |  | 
|  376     INSERT INTO t6 VALUES(3,x'31'); |  | 
|  377     INSERT INTO t6 VALUES(4,NULL); |  | 
|  378     SELECT x FROM t6 ORDER BY y; |  | 
|  379   } |  | 
|  380 } {4 1 2 3} |  | 
|  381 do_test sort-9.2 { |  | 
|  382   execsql { |  | 
|  383     SELECT x FROM t6 ORDER BY y DESC; |  | 
|  384   } |  | 
|  385 } {3 2 1 4} |  | 
|  386 do_test sort-9.3 { |  | 
|  387   execsql { |  | 
|  388     SELECT x FROM t6 WHERE y<1 |  | 
|  389   } |  | 
|  390 } {} |  | 
|  391 do_test sort-9.4 { |  | 
|  392   execsql { |  | 
|  393     SELECT x FROM t6 WHERE y<'1' |  | 
|  394   } |  | 
|  395 } {1} |  | 
|  396 do_test sort-9.5 { |  | 
|  397   execsql { |  | 
|  398     SELECT x FROM t6 WHERE y<x'31' |  | 
|  399   } |  | 
|  400 } {1 2} |  | 
|  401 do_test sort-9.6 { |  | 
|  402   execsql { |  | 
|  403     SELECT x FROM t6 WHERE y>1 |  | 
|  404   } |  | 
|  405 } {2 3} |  | 
|  406 do_test sort-9.7 { |  | 
|  407   execsql { |  | 
|  408     SELECT x FROM t6 WHERE y>'1' |  | 
|  409   } |  | 
|  410 } {3} |  | 
|  411 } ;# endif bloblit |  | 
|  412  |  | 
|  413 # Ticket #1092 - ORDER BY on rowid fields. |  | 
|  414 do_test sort-10.1 { |  | 
|  415   execsql { |  | 
|  416     CREATE TABLE t7(c INTEGER PRIMARY KEY); |  | 
|  417     INSERT INTO t7 VALUES(1); |  | 
|  418     INSERT INTO t7 VALUES(2); |  | 
|  419     INSERT INTO t7 VALUES(3); |  | 
|  420     INSERT INTO t7 VALUES(4); |  | 
|  421   } |  | 
|  422 } {} |  | 
|  423 do_test sort-10.2 { |  | 
|  424   execsql { |  | 
|  425     SELECT c FROM t7 WHERE c<=3 ORDER BY c DESC; |  | 
|  426   } |  | 
|  427 } {3 2 1} |  | 
|  428 do_test sort-10.3 { |  | 
|  429   execsql { |  | 
|  430     SELECT c FROM t7 WHERE c<3 ORDER BY c DESC; |  | 
|  431   } |  | 
|  432 } {2 1} |  | 
|  433  |  | 
|  434 # ticket #1358.  Just because one table in a join gives a unique |  | 
|  435 # result does not mean they all do.  We cannot disable sorting unless |  | 
|  436 # all tables in the join give unique results. |  | 
|  437 # |  | 
|  438 do_test sort-11.1 { |  | 
|  439   execsql { |  | 
|  440     create table t8(a unique, b, c); |  | 
|  441     insert into t8 values(1,2,3); |  | 
|  442     insert into t8 values(2,3,4); |  | 
|  443     create table t9(x,y); |  | 
|  444     insert into t9 values(2,4); |  | 
|  445     insert into t9 values(2,3); |  | 
|  446     select y from t8, t9 where a=1 order by a, y; |  | 
|  447   } |  | 
|  448 } {3 4} |  | 
|  449  |  | 
|  450 # Trouble reported on the mailing list.  Check for overly aggressive |  | 
|  451 # (which is to say, incorrect) optimization of order-by with a rowid |  | 
|  452 # in a join. |  | 
|  453 # |  | 
|  454 do_test sort-12.1 { |  | 
|  455   execsql { |  | 
|  456     create table a (id integer primary key); |  | 
|  457     create table b (id integer primary key, aId integer, text); |  | 
|  458     insert into a values (1); |  | 
|  459     insert into b values (2, 1, 'xxx'); |  | 
|  460     insert into b values (1, 1, 'zzz'); |  | 
|  461     insert into b values (3, 1, 'yyy'); |  | 
|  462     select a.id, b.id, b.text from a join b on (a.id = b.aId) |  | 
|  463       order by a.id, b.text; |  | 
|  464   } |  | 
|  465 } {1 2 xxx 1 3 yyy 1 1 zzz} |  | 
|  466  |  | 
|  467 finish_test |  | 
| OLD | NEW |