diff options
| author | Cy Schubert <cy@FreeBSD.org> | 2022-01-05 19:24:29 +0000 |
|---|---|---|
| committer | Cy Schubert <cy@FreeBSD.org> | 2022-01-05 19:24:29 +0000 |
| commit | 9b0b0740be1f3d3751d366f3bb2952090a9dc505 (patch) | |
| tree | 596fd97301bf8c0581936cf70bf5f2d58bdb6b80 /test/incrblob4.test | |
| parent | 0511e356f5e2106928ee352ee974d1470c860a9a (diff) | |
Diffstat (limited to 'test/incrblob4.test')
| -rw-r--r-- | test/incrblob4.test | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/test/incrblob4.test b/test/incrblob4.test new file mode 100644 index 000000000000..dbff8eb7d58c --- /dev/null +++ b/test/incrblob4.test @@ -0,0 +1,109 @@ +# 2012 March 23 +# +# 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. +# +#*********************************************************************** +# +# +set testdir [file dirname $argv0] +source $testdir/tester.tcl +ifcapable {!incrblob} { finish_test ; return } +set testprefix incrblob4 + +proc create_t1 {} { + execsql { + PRAGMA page_size = 1024; + CREATE TABLE t1(k INTEGER PRIMARY KEY, v); + } +} + +proc populate_t1 {} { + set data [list a b c d e f g h i j k l m n o p q r s t u v w x y z] + foreach d $data { + set blob [string repeat $d 900] + execsql { INSERT INTO t1(v) VALUES($blob) } + } +} + + +do_test 1.1 { + create_t1 + populate_t1 +} {} + +do_test 1.2 { + set blob [db incrblob t1 v 5] + read $blob 10 +} {eeeeeeeeee} + +do_test 1.3 { + execsql { DELETE FROM t1 } + populate_t1 +} {} + + + +do_test 2.1 { + reset_db + create_t1 + populate_t1 +} {} + +do_test 2.2 { + set blob [db incrblob t1 v 10] + read $blob 10 +} {jjjjjjjjjj} + +do_test 2.3 { + set new [string repeat % 900] + execsql { DELETE FROM t1 WHERE k=10 } + execsql { DELETE FROM t1 WHERE k=9 } + execsql { INSERT INTO t1(v) VALUES($new) } +} {} + + + +do_test 3.1 { + reset_db + create_t1 + populate_t1 +} {} + +do_test 3.2 { + set blob [db incrblob t1 v 20] + read $blob 10 +} {tttttttttt} + +do_test 3.3 { + set new [string repeat % 900] + execsql { UPDATE t1 SET v = $new WHERE k = 20 } + execsql { DELETE FROM t1 WHERE k=19 } + execsql { INSERT INTO t1(v) VALUES($new) } +} {} + +#------------------------------------------------------------------------- +# Test that it is not possible to DROP a table with an incremental blob +# cursor open on it. +# +do_execsql_test 4.1 { + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + INSERT INTO t2 VALUES(456, '0123456789'); +} +do_test 4.2 { + set blob [db incrblob -readonly t2 b 456] + read $blob 5 +} {01234} +do_catchsql_test 4.3 { + DROP TABLE t2 +} {1 {database table is locked}} +do_test 4.4 { + sqlite3_extended_errcode db +} {SQLITE_LOCKED} +close $blob + +finish_test |
