1fc23314aSdrh# 2005 August 18 2fc23314aSdrh# 3fc23314aSdrh# The author disclaims copyright to this source code. In place of 4fc23314aSdrh# a legal notice, here is a blessing: 5fc23314aSdrh# 6fc23314aSdrh# May you do good and not evil. 7fc23314aSdrh# May you find forgiveness for yourself and forgive others. 8fc23314aSdrh# May you share freely, never taking more than you give. 9fc23314aSdrh# 10fc23314aSdrh#************************************************************************* 11fc23314aSdrh# This file implements regression tests for SQLite library. The 12fc23314aSdrh# focus of this file is testing corner cases of the DEFAULT syntax 13fc23314aSdrh# on table definitions. 14fc23314aSdrh# 156ab3a2ecSdanielk1977# $Id: default.test,v 1.3 2009/02/19 14:39:25 danielk1977 Exp $ 16fc23314aSdrh# 17fc23314aSdrh 18fc23314aSdrhset testdir [file dirname $argv0] 19fc23314aSdrhsource $testdir/tester.tcl 20fc23314aSdrh 21fc23314aSdrhifcapable bloblit { 22fc23314aSdrh do_test default-1.1 { 23fc23314aSdrh execsql { 24fc23314aSdrh CREATE TABLE t1( 25fc23314aSdrh a INTEGER, 26fc23314aSdrh b BLOB DEFAULT x'6869' 27fc23314aSdrh ); 28fc23314aSdrh INSERT INTO t1(a) VALUES(1); 29fc23314aSdrh SELECT * from t1; 30fc23314aSdrh } 31fc23314aSdrh } {1 hi} 32fc23314aSdrh} 33fc23314aSdrhdo_test default-1.2 { 34fc23314aSdrh execsql { 35fc23314aSdrh CREATE TABLE t2( 36fc23314aSdrh x INTEGER, 37fc23314aSdrh y INTEGER DEFAULT NULL 38fc23314aSdrh ); 39fc23314aSdrh INSERT INTO t2(x) VALUES(1); 40fc23314aSdrh SELECT * FROM t2; 41fc23314aSdrh } 42fc23314aSdrh} {1 {}} 4385c23c61Sdrhdo_test default-1.3 { 4485c23c61Sdrh catchsql { 4585c23c61Sdrh CREATE TABLE t3( 4685c23c61Sdrh x INTEGER, 4785c23c61Sdrh y INTEGER DEFAULT (max(x,5)) 4885c23c61Sdrh ) 4985c23c61Sdrh } 5085c23c61Sdrh} {1 {default value of column [y] is not constant}} 51fc23314aSdrh 526ab3a2ecSdanielk1977ifcapable pragma { 536ab3a2ecSdanielk1977 do_test default-2.1 { 546ab3a2ecSdanielk1977 execsql { 556ab3a2ecSdanielk1977 CREATE TABLE t4(c DEFAULT 'abc'); 566ab3a2ecSdanielk1977 PRAGMA table_info(t4); 576ab3a2ecSdanielk1977 } 586ab3a2ecSdanielk1977 } {0 c {} 0 'abc' 0} 596ab3a2ecSdanielk1977 do_test default-2.2 { 606ab3a2ecSdanielk1977 execsql { 616ab3a2ecSdanielk1977 INSERT INTO t4 DEFAULT VALUES; 626ab3a2ecSdanielk1977 PRAGMA table_info(t4); 636ab3a2ecSdanielk1977 } 646ab3a2ecSdanielk1977 } {0 c {} 0 'abc' 0} 656ab3a2ecSdanielk1977} 666ab3a2ecSdanielk1977 67a0d6e3a5Sdrhdo_execsql_test default-3.1 { 68a0d6e3a5Sdrh CREATE TABLE t3( 69a0d6e3a5Sdrh a INTEGER PRIMARY KEY AUTOINCREMENT, 70a0d6e3a5Sdrh b INT DEFAULT 12345 UNIQUE NOT NULL CHECK( b>=0 AND b<99999 ), 71a0d6e3a5Sdrh c VARCHAR(123,456) DEFAULT 'hello' NOT NULL ON CONFLICT REPLACE, 72a0d6e3a5Sdrh d REAL, 73a0d6e3a5Sdrh e FLOATING POINT(5,10) DEFAULT 4.36, 74a0d6e3a5Sdrh f NATIONAL CHARACTER(15) COLLATE RTRIM, 75a0d6e3a5Sdrh g LONG INTEGER DEFAULT( 3600*12 ) 76a0d6e3a5Sdrh ); 77a0d6e3a5Sdrh INSERT INTO t3 VALUES(null, 5, 'row1', '5.25', 'xyz', 321, '432'); 78a0d6e3a5Sdrh SELECT a, typeof(a), b, typeof(b), c, typeof(c), 79a0d6e3a5Sdrh d, typeof(d), e, typeof(e), f, typeof(f), 80a0d6e3a5Sdrh g, typeof(g) FROM t3; 81a0d6e3a5Sdrh} {1 integer 5 integer row1 text 5.25 real xyz text 321 text 432 integer} 82a0d6e3a5Sdrhdo_execsql_test default-3.2 { 83a0d6e3a5Sdrh DELETE FROM t3; 84a0d6e3a5Sdrh INSERT INTO t3 DEFAULT VALUES; 85a0d6e3a5Sdrh SELECT * FROM t3; 86a0d6e3a5Sdrh} {2 12345 hello {} 4.36 {} 43200} 87a0d6e3a5Sdrhdo_execsql_test default-3.3 { 88a0d6e3a5Sdrh CREATE TABLE t300( 89a0d6e3a5Sdrh a INT DEFAULT 2147483647, 90a0d6e3a5Sdrh b INT DEFAULT 2147483648, 91a0d6e3a5Sdrh c INT DEFAULT +9223372036854775807, 92a0d6e3a5Sdrh d INT DEFAULT -2147483647, 93a0d6e3a5Sdrh e INT DEFAULT -2147483648, 94a0d6e3a5Sdrh f INT DEFAULT -9223372036854775808, 95a0d6e3a5Sdrh g INT DEFAULT (-(-9223372036854775808)), 96a0d6e3a5Sdrh h INT DEFAULT (-(-9223372036854775807)) 97a0d6e3a5Sdrh ); 98a0d6e3a5Sdrh INSERT INTO t300 DEFAULT VALUES; 99a0d6e3a5Sdrh SELECT * FROM t300; 100a0d6e3a5Sdrh} {2147483647 2147483648 9223372036854775807 -2147483647 -2147483648 -9223372036854775808 9.22337203685478e+18 9223372036854775807} 101a0d6e3a5Sdrh 102feada2dfSdrh# Do now allow bound parameters in new DEFAULT values. 103feada2dfSdrh# Silently convert bound parameters to NULL in DEFAULT causes 104feada2dfSdrh# in the sqlite_master table, for backwards compatibility. 105feada2dfSdrh# 106feada2dfSdrhdb close 107feada2dfSdrhforcedelete test.db 108feada2dfSdrhsqlite3 db test.db 109b7c2cf0aSdrhsqlite3_db_config db DEFENSIVE 0 110feada2dfSdrhdo_execsql_test default-4.0 { 111feada2dfSdrh CREATE TABLE t1(a TEXT, b TEXT DEFAULT(99)); 112feada2dfSdrh PRAGMA writable_schema=ON; 113feada2dfSdrh UPDATE sqlite_master SET sql='CREATE TABLE t1(a TEXT, b TEXT DEFAULT(:xyz))'; 114feada2dfSdrh} {} 115feada2dfSdrhdb close 116feada2dfSdrhsqlite3 db test.db 117feada2dfSdrhdo_execsql_test default-4.1 { 118feada2dfSdrh INSERT INTO t1(a) VALUES('xyzzy'); 119feada2dfSdrh SELECT a, quote(b) FROM t1; 120feada2dfSdrh} {xyzzy NULL} 121feada2dfSdrhdo_catchsql_test default-4.2 { 122feada2dfSdrh CREATE TABLE t2(a TEXT, b TEXT DEFAULT(:xyz)); 123feada2dfSdrh} {1 {default value of column [b] is not constant}} 124feada2dfSdrhdo_catchsql_test default-4.3 { 125feada2dfSdrh CREATE TABLE t2(a TEXT, b TEXT DEFAULT(abs(:xyz))); 126feada2dfSdrh} {1 {default value of column [b] is not constant}} 127feada2dfSdrhdo_catchsql_test default-4.4 { 128feada2dfSdrh CREATE TABLE t2(a TEXT, b TEXT DEFAULT(98+coalesce(5,:xyz))); 129feada2dfSdrh} {1 {default value of column [b] is not constant}} 130feada2dfSdrh 131*088489e8Sdrh# 2020-03-09 out-of-bounds memory access discovered by "Eternal Sakura" 132*088489e8Sdrh# and reported to chromium. 133*088489e8Sdrh# 134*088489e8Sdrhreset_db 135*088489e8Sdrhdo_catchsql_test default-5.1 { 136*088489e8Sdrh CREATE TABLE t1 (a,b DEFAULT(random() NOTNULL IN (RAISE(IGNORE),2,3))); 137*088489e8Sdrh INSERT INTO t1(a) VALUES(1); 138*088489e8Sdrh} {1 {RAISE() may only be used within a trigger-program}} 139*088489e8Sdrh 140fc23314aSdrhfinish_test 141