📄 misc5.test
字号:
# 2005 Mar 16## The author disclaims copyright to this source code. In place of# a legal notice, here is a blessing:## May you do good and not evil.# May you find forgiveness for yourself and forgive others.# May you share freely, never taking more than you give.##***********************************************************************# This file implements regression tests for SQLite library.## This file implements tests for miscellanous features that were# left out of other test files.## $Id: misc5.test,v 1.16 2007/01/03 23:37:29 drh Exp $set testdir [file dirname $argv0]source $testdir/tester.tcl# Build records using the MakeRecord opcode such that the size of the # header is at the transition point in the size of a varint.## This test causes an assertion failure or a buffer overrun in version# 3.1.5 and earlier.#for {set i 120} {$i<140} {incr i} { do_test misc5-1.$i { catchsql {DROP TABLE t1} set sql1 {CREATE TABLE t1} set sql2 {INSERT INTO t1 VALUES} set sep ( for {set j 0} {$j<$i} {incr j} { append sql1 ${sep}a$j append sql2 ${sep}$j set sep , } append sql1 {);} append sql2 {);} execsql $sql1$sql2 } {}}# Make sure large integers are stored correctly.#ifcapable conflict { do_test misc5-2.1 { execsql { create table t2(x unique); insert into t2 values(1); insert or ignore into t2 select x*2 from t2; insert or ignore into t2 select x*4 from t2; insert or ignore into t2 select x*16 from t2; insert or ignore into t2 select x*256 from t2; insert or ignore into t2 select x*65536 from t2; insert or ignore into t2 select x*2147483648 from t2; insert or ignore into t2 select x-1 from t2; insert or ignore into t2 select x+1 from t2; insert or ignore into t2 select -x from t2; select count(*) from t2; } } 371} else { do_test misc5-2.1 { execsql { BEGIN; create table t2(x unique); create table t2_temp(x); insert into t2_temp values(1); insert into t2_temp select x*2 from t2_temp; insert into t2_temp select x*4 from t2_temp; insert into t2_temp select x*16 from t2_temp; insert into t2_temp select x*256 from t2_temp; insert into t2_temp select x*65536 from t2_temp; insert into t2_temp select x*2147483648 from t2_temp; insert into t2_temp select x-1 from t2_temp; insert into t2_temp select x+1 from t2_temp; insert into t2_temp select -x from t2_temp; INSERT INTO t2 SELECT DISTINCT(x) FROM t2_temp; DROP TABLE t2_temp; COMMIT; select count(*) from t2; } } 371}do_test misc5-2.2 { execsql { select x from t2 order by x; }} \"-4611686018427387905\-4611686018427387904\-4611686018427387903\-2305843009213693953\-2305843009213693952\-2305843009213693951\-1152921504606846977\-1152921504606846976\-1152921504606846975\-576460752303423489\-576460752303423488\-576460752303423487\-288230376151711745\-288230376151711744\-288230376151711743\-144115188075855873\-144115188075855872\-144115188075855871\-72057594037927937\-72057594037927936\-72057594037927935\-36028797018963969\-36028797018963968\-36028797018963967\-18014398509481985\-18014398509481984\-18014398509481983\-9007199254740993\-9007199254740992\-9007199254740991\-4503599627370497\-4503599627370496\-4503599627370495\-2251799813685249\-2251799813685248\-2251799813685247\-1125899906842625\-1125899906842624\-1125899906842623\-562949953421313\-562949953421312\-562949953421311\-281474976710657\-281474976710656\-281474976710655\-140737488355329\-140737488355328\-140737488355327\-70368744177665\-70368744177664\-70368744177663\-35184372088833\-35184372088832\-35184372088831\-17592186044417\-17592186044416\-17592186044415\-8796093022209\-8796093022208\-8796093022207\-4398046511105\-4398046511104\-4398046511103\-2199023255553\-2199023255552\-2199023255551\-1099511627777\-1099511627776\-1099511627775\-549755813889\-549755813888\-549755813887\-274877906945\-274877906944\-274877906943\-137438953473\-137438953472\-137438953471\-68719476737\-68719476736\-68719476735\-34359738369\-34359738368\-34359738367\-17179869185\-17179869184\-17179869183\-8589934593\-8589934592\-8589934591\-4294967297\-4294967296\-4294967295\-2147483649\-2147483648\-2147483647\-1073741825\-1073741824\-1073741823\-536870913\-536870912\-536870911\-268435457\-268435456\-268435455\-134217729\-134217728\-134217727\-67108865\-67108864\-67108863\-33554433\-33554432\-33554431\-16777217\-16777216\-16777215\-8388609\-8388608\-8388607\-4194305\-4194304\-4194303\-2097153\-2097152\-2097151\-1048577\-1048576\-1048575\-524289\-524288\-524287\-262145\-262144\-262143\-131073\-131072\-131071\-65537\-65536\-65535\-32769\-32768\-32767\-16385\-16384\-16383\-8193\-8192\-8191\-4097\-4096\-4095\-2049\-2048\-2047\-1025\-1024\-1023\-513\-512\-511\-257\-256\-255\-129\-128\-127\-65\-64\-63\-33\-32\-31\-17\-16\-15\-9\-8\-7\-5\-4\-3\-2\-1\0\1\2\3\4\5\7\8\9\15\16\17\31\32\33\63\64\65\127\128\129\255\256\257\511\512\513\1023\1024\1025\2047\2048\2049\4095\4096\4097\8191\8192\8193\16383\16384\16385\32767\32768\32769\65535\65536\65537\131071\131072\131073\262143\262144\262145\524287\524288\524289\1048575\1048576\1048577\2097151\2097152\2097153\4194303\4194304\4194305\8388607\8388608\8388609\16777215\16777216\16777217\33554431\33554432\33554433\67108863\67108864\67108865\134217727\134217728\134217729\268435455\268435456\268435457\536870911\536870912\536870913\1073741823\1073741824\1073741825\2147483647\2147483648\2147483649\4294967295\4294967296\4294967297\8589934591\8589934592\8589934593\17179869183\17179869184\17179869185\34359738367\34359738368\34359738369\68719476735\68719476736\68719476737\137438953471\137438953472\137438953473\274877906943\274877906944\274877906945\549755813887\549755813888\549755813889\1099511627775\1099511627776\1099511627777\2199023255551\2199023255552\2199023255553\4398046511103\4398046511104\4398046511105\8796093022207\8796093022208\8796093022209\17592186044415\17592186044416\17592186044417\35184372088831\35184372088832\35184372088833\70368744177663\70368744177664\70368744177665\140737488355327\140737488355328\140737488355329\281474976710655\281474976710656\281474976710657\562949953421311\562949953421312\562949953421313\1125899906842623\1125899906842624\1125899906842625\2251799813685247\2251799813685248\2251799813685249\4503599627370495\4503599627370496\4503599627370497\9007199254740991\9007199254740992\9007199254740993\18014398509481983\18014398509481984\18014398509481985\36028797018963967\36028797018963968\36028797018963969\72057594037927935\72057594037927936\72057594037927937\144115188075855871\144115188075855872\144115188075855873\288230376151711743\288230376151711744\288230376151711745\576460752303423487\576460752303423488\576460752303423489\1152921504606846975\1152921504606846976\1152921504606846977\2305843009213693951\2305843009213693952\2305843009213693953\4611686018427387903\4611686018427387904\4611686018427387905"# Ticket #1210. Do proper reference counting of Table structures# so that deeply nested SELECT statements can be flattened correctly.#ifcapable subquery { do_test misc5-3.1 { execsql { CREATE TABLE songs(songid, artist, timesplayed); INSERT INTO songs VALUES(1,'one',1); INSERT INTO songs VALUES(2,'one',2); INSERT INTO songs VALUES(3,'two',3); INSERT INTO songs VALUES(4,'three',5); INSERT INTO songs VALUES(5,'one',7); INSERT INTO songs VALUES(6,'two',11); SELECT DISTINCT artist FROM ( SELECT DISTINCT artist FROM songs WHERE songid IN ( SELECT songid FROM songs WHERE LOWER(artist) = ( SELECT DISTINCT LOWER(artist) FROM ( SELECT DISTINCT artist,sum(timesplayed) AS total FROM songs GROUP BY LOWER(artist) ORDER BY total DESC LIMIT 10 ) WHERE artist <> '' ) ) ) ORDER BY LOWER(artist) ASC; } } {two}}# Ticket #1370. Do not overwrite small files (less than 1024 bytes)# when trying to open them as a database.#do_test misc5-4.1 { db close file delete -force test.db set fd [open test.db w] puts $fd "This is not really a database" close $fd sqlite3 db test.db catchsql { CREATE TABLE t1(a,b,c); }} {1 {file is encrypted or is not a database}}# Ticket #1371. Allow floating point numbers of the form .N or N.#do_test misc5-5.1 { execsql {SELECT .1 }} 0.1do_test misc5-5.2 { execsql {SELECT 2. }} 2.0do_test misc5-5.3 { execsql {SELECT 3.e0 }} 3.0do_test misc5-5.4 { execsql {SELECT .4e+1}} 4.0# Ticket #1582. Ensure that an unknown table in a LIMIT clause applied to# a UNION ALL query causes an error, not a crash.#db closefile delete -force test.dbsqlite3 db test.dbifcapable subquery&&compound { do_test misc5-6.1 { catchsql { SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_master LIMIT (SELECT count(*) FROM blah); } } {1 {no such table: blah}} do_test misc5-6.2 { execsql { CREATE TABLE logs(msg TEXT, timestamp INTEGER, dbtime TEXT); } catchsql { SELECT * FROM logs WHERE logs.id >= (SELECT head FROM logs_base) UNION ALL SELECT * FROM logs LIMIT (SELECT lmt FROM logs_base) ; } } {1 {no such column: logs.id}}}# Overflow the lemon parser stack by providing an overly complex# expression. Make sure that the overflow is detected and reported.#do_test misc5-7.1 { execsql {CREATE TABLE t1(x)} set sql "INSERT INTO t1 VALUES(" set tail "" for {set i 0} {$i<200} {incr i} { append sql "(1+" append tail ")" } append sql 2$tail catchsql $sql} {1 {parser stack overflow}}# Check the MISUSE return from sqlitee3_busy_timeout#do_test misc5-8.1-misuse { set DB [sqlite3_connection_pointer db] db close sqlite3_busy_timeout $DB 1000} SQLITE_MISUSEsqlite3 db test.db# Ticket #1911#do_test misc5-9.1 { execsql { SELECT name, type FROM sqlite_master WHERE name IS NULL UNION SELECT type, name FROM sqlite_master WHERE type IS NULL ORDER BY 1, 2, 1, 2, 1, 2 }} {}do_test misc5-9.2 { execsql { SELECT name, type FROM sqlite_master WHERE name IS NULL UNION SELECT type, name FROM sqlite_master WHERE type IS NULL ORDER BY 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 }} {}# Ticket #1912. Make the tokenizer require a space after a numeric# literal.#do_test misc5-10.1 { catchsql { SELECT 123abc }} {1 {unrecognized token: "123abc"}}do_test misc5-10.2 { catchsql { SELECT 1*123.4e5ghi; }} {1 {unrecognized token: "123.4e5ghi"}}finish_test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -