Annotation of embedaddon/sqlite3/test/alias.test, revision 1.1.1.1

1.1       misho       1: # 2008 August 28
                      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: #
                     12: # This file implements regression tests for SQLite library.  The
                     13: # focus of this script is correct code generation of aliased result-set
                     14: # values.  See ticket #3343.
                     15: #
                     16: # $Id: alias.test,v 1.3 2009/04/23 13:22:44 drh Exp $
                     17: #
                     18: set testdir [file dirname $argv0]
                     19: source $testdir/tester.tcl
                     20: 
                     21: # Aliases are currently evaluated twice.  We might try to change this
                     22: # in the future.  But not now.
                     23: return
                     24: 
                     25: # A procedure to return a sequence of increasing integers.
                     26: #
                     27: namespace eval ::seq {
                     28:   variable counter 0
                     29:   proc value {args} {
                     30:     variable counter
                     31:     incr counter
                     32:     return $counter
                     33:   }
                     34:   proc reset {} {
                     35:     variable counter
                     36:     set counter 0
                     37:   }
                     38: }
                     39: 
                     40: 
                     41: do_test alias-1.1 {
                     42:   db function sequence ::seq::value
                     43:   db eval {
                     44:     CREATE TABLE t1(x);
                     45:     INSERT INTO t1 VALUES(9);
                     46:     INSERT INTO t1 VALUES(8);
                     47:     INSERT INTO t1 VALUES(7);
                     48:     SELECT x, sequence() FROM t1;
                     49:   }
                     50: } {9 1 8 2 7 3}
                     51: do_test alias-1.2 {
                     52:   ::seq::reset
                     53:   db eval {
                     54:     SELECT x, sequence() AS y FROM t1 WHERE y>0
                     55:   }
                     56: } {9 1 8 2 7 3}
                     57: do_test alias-1.3 {
                     58:   ::seq::reset
                     59:   db eval {
                     60:     SELECT x, sequence() AS y FROM t1 WHERE y>0 AND y<99
                     61:   }
                     62: } {9 1 8 2 7 3}
                     63: do_test alias-1.4 {
                     64:   ::seq::reset
                     65:   db eval {
                     66:     SELECT x, sequence() AS y FROM t1 WHERE y>0 AND y<99 AND y!=55
                     67:   }
                     68: } {9 1 8 2 7 3}
                     69: do_test alias-1.5 {
                     70:   ::seq::reset
                     71:   db eval {
                     72:     SELECT x, sequence() AS y FROM t1
                     73:      WHERE y>0 AND y<99 AND y!=55 AND y NOT IN (56,57,58)
                     74:        AND y NOT LIKE 'abc%' AND y%10==2
                     75:   }
                     76: } {8 2}
                     77: do_test alias-1.6 {
                     78:   ::seq::reset
                     79:   db eval {
                     80:     SELECT x, sequence() AS y FROM t1 WHERE y BETWEEN 0 AND 99
                     81:   }
                     82: } {9 1 8 2 7 3}
                     83: #do_test alias-1.7 {
                     84: #  ::seq::reset
                     85: #  db eval {
                     86: #    SELECT x, sequence() AS y FROM t1 WHERE y IN (55,66,3)
                     87: #  }
                     88: #} {7 3}
                     89: do_test alias-1.8 {
                     90:   ::seq::reset
                     91:   db eval {
                     92:     SELECT x, 1-sequence() AS y FROM t1 ORDER BY y
                     93:   }
                     94: } {7 -2 8 -1 9 0}
                     95: do_test alias-1.9 {
                     96:   ::seq::reset
                     97:   db eval {
                     98:     SELECT x, sequence() AS y FROM t1 ORDER BY -y
                     99:   }
                    100: } {7 3 8 2 9 1}
                    101: do_test alias-1.10 {
                    102:   ::seq::reset
                    103:   db eval {
                    104:     SELECT x, sequence() AS y FROM t1 ORDER BY x%2, y
                    105:   }
                    106: } {8 2 9 1 7 3}
                    107: 
                    108: unset -nocomplain random_int_list
                    109: set random_int_list [db eval {
                    110:    SELECT random()&2147483647 AS r FROM t1, t1, t1, t1 ORDER BY r
                    111: }]
                    112: do_test alias-1.11 {
                    113:   lsort -integer $::random_int_list
                    114: } $random_int_list
                    115: 
                    116: 
                    117: do_test alias-2.1 {
                    118:   db eval {
                    119:     SELECT 4 UNION SELECT 1 ORDER BY 1
                    120:   }
                    121: } {1 4}
                    122: do_test alias-2.2 {
                    123:   db eval {
                    124:     SELECT 4 UNION SELECT 1 UNION SELECT 9 ORDER BY 1
                    125:   }
                    126: } {1 4 9}
                    127: 
                    128: if 0 {
                    129:   # Aliases in the GROUP BY clause cause the expression to be evaluated
                    130:   # twice in the current implementation.  This might change in the future.
                    131:   #
                    132:   do_test alias-3.1 {
                    133:     ::seq::reset
                    134:     db eval {
                    135:       SELECT sequence(*) AS y, count(*) AS z FROM t1 GROUP BY y ORDER BY z, y
                    136:     }
                    137:   } {1 1 2 1 3 1}
                    138: }
                    139: 
                    140: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>