18ce10ba6Sdrh# 2003 June 21 28ce10ba6Sdrh# 38ce10ba6Sdrh# The author disclaims copyright to this source code. In place of 48ce10ba6Sdrh# a legal notice, here is a blessing: 58ce10ba6Sdrh# 68ce10ba6Sdrh# May you do good and not evil. 78ce10ba6Sdrh# May you find forgiveness for yourself and forgive others. 88ce10ba6Sdrh# May you share freely, never taking more than you give. 98ce10ba6Sdrh# 108ce10ba6Sdrh#*********************************************************************** 118ce10ba6Sdrh# This file implements regression tests for SQLite library. 128ce10ba6Sdrh# 138ce10ba6Sdrh# This file implements tests for miscellanous features that were 148ce10ba6Sdrh# left out of other test files. 158ce10ba6Sdrh# 16*dc2d94deSdrh# $Id: misc2.test,v 1.5 2003/07/27 17:16:08 drh Exp $ 178ce10ba6Sdrh 188ce10ba6Sdrhset testdir [file dirname $argv0] 198ce10ba6Sdrhsource $testdir/tester.tcl 208ce10ba6Sdrh 218ce10ba6Sdrh# Test for ticket #360 228ce10ba6Sdrh# 238ce10ba6Sdrhdo_test misc2-1.1 { 248ce10ba6Sdrh catchsql { 258ce10ba6Sdrh CREATE TABLE FOO(bar integer); 268ce10ba6Sdrh CREATE TRIGGER foo_insert BEFORE INSERT ON foo BEGIN 278ce10ba6Sdrh SELECT CASE WHEN (NOT new.bar BETWEEN 0 AND 20) 288ce10ba6Sdrh THEN raise(rollback, 'aiieee') END; 298ce10ba6Sdrh END; 308ce10ba6Sdrh INSERT INTO foo(bar) VALUES (1); 318ce10ba6Sdrh } 32dc339ee2Sdrh} {0 {}} 33dc339ee2Sdrhdo_test misc2-1.2 { 34dc339ee2Sdrh catchsql { 35dc339ee2Sdrh INSERT INTO foo(bar) VALUES (111); 36dc339ee2Sdrh } 378ce10ba6Sdrh} {1 aiieee} 38d60ccc6aSdrh 39d60ccc6aSdrh# Make sure ROWID works on a view and a subquery. Ticket #364 40d60ccc6aSdrh# 41d60ccc6aSdrhdo_test misc2-2.1 { 42d60ccc6aSdrh execsql { 43d60ccc6aSdrh CREATE TABLE t1(a,b,c); 44d60ccc6aSdrh INSERT INTO t1 VALUES(1,2,3); 45da808d56Sdrh CREATE TABLE t2(a,b,c); 46d60ccc6aSdrh INSERT INTO t2 VALUES(7,8,9); 47d60ccc6aSdrh SELECT rowid, * FROM (SELECT * FROM t1, t2); 48d60ccc6aSdrh } 49d60ccc6aSdrh} {{} 1 2 3 7 8 9} 50d60ccc6aSdrhdo_test misc2-2.2 { 51d60ccc6aSdrh execsql { 52d60ccc6aSdrh CREATE VIEW v1 AS SELECT * FROM t1, t2; 53d60ccc6aSdrh SELECT rowid, * FROM v1; 54d60ccc6aSdrh } 55d60ccc6aSdrh} {{} 1 2 3 7 8 9} 56da808d56Sdrh 57da808d56Sdrh# Check name binding precedence. Ticket #387 58da808d56Sdrh# 59da808d56Sdrhdo_test misc2-3.1 { 60da808d56Sdrh catchsql { 61da808d56Sdrh SELECT t1.b+t2.b AS a, t1.a, t2.a FROM t1, t2 WHERE a==10 62da808d56Sdrh } 63da808d56Sdrh} {1 {ambiguous column name: a}} 64*dc2d94deSdrh 65*dc2d94deSdrh# Make sure 32-bit integer overflow is handled properly in queries. 66*dc2d94deSdrh# ticket #408 67*dc2d94deSdrh# 68*dc2d94deSdrhdo_test misc2-4.1 { 69*dc2d94deSdrh execsql { 70*dc2d94deSdrh INSERT INTO t1 VALUES(4000000000,'a','b'); 71*dc2d94deSdrh SELECT a FROM t1 WHERE a>1; 72*dc2d94deSdrh } 73*dc2d94deSdrh} {4000000000} 74*dc2d94deSdrhdo_test misc2-4.2 { 75*dc2d94deSdrh execsql { 76*dc2d94deSdrh INSERT INTO t1 VALUES(2147483648,'b2','c2'); 77*dc2d94deSdrh INSERT INTO t1 VALUES(2147483647,'b3','c3'); 78*dc2d94deSdrh SELECT a FROM t1 WHERE a>2147483647; 79*dc2d94deSdrh } 80*dc2d94deSdrh} {4000000000 2147483648} 81*dc2d94deSdrhdo_test misc2-4.3 { 82*dc2d94deSdrh execsql { 83*dc2d94deSdrh SELECT a FROM t1 WHERE a<2147483648; 84*dc2d94deSdrh } 85*dc2d94deSdrh} {1 2147483647} 86*dc2d94deSdrhdo_test misc2-4.4 { 87*dc2d94deSdrh execsql { 88*dc2d94deSdrh SELECT a FROM t1 WHERE a<=2147483648; 89*dc2d94deSdrh } 90*dc2d94deSdrh} {1 2147483648 2147483647} 91*dc2d94deSdrhdo_test misc2-4.5 { 92*dc2d94deSdrh execsql { 93*dc2d94deSdrh SELECT a FROM t1 WHERE a<10000000000; 94*dc2d94deSdrh } 95*dc2d94deSdrh} {1 4000000000 2147483648 2147483647} 96*dc2d94deSdrhdo_test misc2-4.6 { 97*dc2d94deSdrh execsql { 98*dc2d94deSdrh SELECT a FROM t1 WHERE a<1000000000000 ORDER BY 1; 99*dc2d94deSdrh } 100*dc2d94deSdrh} {1 2147483647 2147483648 4000000000} 101