xref: /sqlite-3.40.0/test/e_blobbytes.test (revision a32536b4)
1# 2014 October 30
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15set testprefix e_blobbytes
16
17ifcapable !incrblob {
18  finish_test
19  return
20}
21
22do_execsql_test 1.0 {
23  CREATE TABLE q1(r INTEGER PRIMARY KEY, s TEXT);
24  WITH d(a, b) AS (
25    SELECT 0, ''
26      UNION ALL
27    SELECT a+1, b||'.' FROM d WHERE a<10000
28  )
29  INSERT INTO q1 SELECT * FROM d;
30}
31
32
33# EVIDENCE-OF: R-07796-55423 Returns the size in bytes of the BLOB
34# accessible via the successfully opened BLOB handle in its only
35# argument.
36#
37proc check_blob_size {tn rowid bytes} {
38  uplevel [list do_test $tn [subst -nocommands {
39    sqlite3_blob_open db main q1 s $rowid 0 B
40    set res [sqlite3_blob_bytes [set B]]
41    sqlite3_blob_close [set B]
42    set res
43  }] $bytes]
44}
45check_blob_size 1.1 43 43
46check_blob_size 1.2 391 391
47check_blob_size 1.3 6349 6349
48check_blob_size 1.4 2621 2621
49check_blob_size 1.5 7771 7771
50check_blob_size 1.6 7949 7949
51check_blob_size 1.7 4374 4374
52check_blob_size 1.8 2578 2578
53check_blob_size 1.9 7004 7004
54check_blob_size 1.10 2180 2180
55check_blob_size 1.11 3796 3796
56check_blob_size 1.12 7101 7101
57check_blob_size 1.13 7449 7449
58check_blob_size 1.14 7224 7224
59check_blob_size 1.15 3038 3038
60check_blob_size 1.16 1083 1083
61check_blob_size 1.17 5157 5157
62check_blob_size 1.18 6686 6686
63check_blob_size 1.19 6592 6592
64check_blob_size 1.20 0 0
65
66
67# EVIDENCE-OF: R-53088-19343 The incremental blob I/O routines can only
68# read or overwriting existing blob content; they cannot change the size
69# of a blob.
70#
71#   Also demonstrated in other e_blobXXX.test files.
72#
73do_test 2.1 {
74  sqlite3_blob_open db main q1 s 86 1 B
75  list [catch { sqlite3_blob_write $B 86 "1" 1 } msg] $msg
76} {1 SQLITE_ERROR}
77sqlite3_blob_close $B
78
79finish_test
80