000001 # 2014 October 30
000002 #
000003 # The author disclaims copyright to this source code. In place of
000004 # a legal notice, here is a blessing:
000005 #
000006 # May you do good and not evil.
000007 # May you find forgiveness for yourself and forgive others.
000008 # May you share freely, never taking more than you give.
000009 #
000010 #***********************************************************************
000011 #
000012
000013 set testdir [file dirname $argv0]
000014 source $testdir/tester.tcl
000015 set testprefix e_blobbytes
000016
000017 ifcapable !incrblob {
000018 finish_test
000019 return
000020 }
000021
000022 do_execsql_test 1.0 {
000023 CREATE TABLE q1(r INTEGER PRIMARY KEY, s TEXT);
000024 WITH d(a, b) AS (
000025 SELECT 0, ''
000026 UNION ALL
000027 SELECT a+1, b||'.' FROM d WHERE a<10000
000028 )
000029 INSERT INTO q1 SELECT * FROM d;
000030 }
000031
000032
000033 # EVIDENCE-OF: R-07796-55423 Returns the size in bytes of the BLOB
000034 # accessible via the successfully opened BLOB handle in its only
000035 # argument.
000036 #
000037 proc check_blob_size {tn rowid bytes} {
000038 uplevel [list do_test $tn [subst -nocommands {
000039 sqlite3_blob_open db main q1 s $rowid 0 B
000040 set res [sqlite3_blob_bytes [set B]]
000041 sqlite3_blob_close [set B]
000042 set res
000043 }] $bytes]
000044 }
000045 check_blob_size 1.1 43 43
000046 check_blob_size 1.2 391 391
000047 check_blob_size 1.3 6349 6349
000048 check_blob_size 1.4 2621 2621
000049 check_blob_size 1.5 7771 7771
000050 check_blob_size 1.6 7949 7949
000051 check_blob_size 1.7 4374 4374
000052 check_blob_size 1.8 2578 2578
000053 check_blob_size 1.9 7004 7004
000054 check_blob_size 1.10 2180 2180
000055 check_blob_size 1.11 3796 3796
000056 check_blob_size 1.12 7101 7101
000057 check_blob_size 1.13 7449 7449
000058 check_blob_size 1.14 7224 7224
000059 check_blob_size 1.15 3038 3038
000060 check_blob_size 1.16 1083 1083
000061 check_blob_size 1.17 5157 5157
000062 check_blob_size 1.18 6686 6686
000063 check_blob_size 1.19 6592 6592
000064 check_blob_size 1.20 0 0
000065
000066
000067 # EVIDENCE-OF: R-53088-19343 The incremental blob I/O routines can only
000068 # read or overwriting existing blob content; they cannot change the size
000069 # of a blob.
000070 #
000071 # Also demonstrated in other e_blobXXX.test files.
000072 #
000073 do_test 2.1 {
000074 sqlite3_blob_open db main q1 s 86 1 B
000075 list [catch { sqlite3_blob_write $B 86 "1" 1 } msg] $msg
000076 } {1 SQLITE_ERROR}
000077 sqlite3_blob_close $B
000078
000079 finish_test