blob: 2d09dda6e3aae1ffcdcfd19f24d7bbbdcb3a6304 [file] [log] [blame]
danielk197744e6c8d2007-05-03 13:11:32 +00001# 2007 May 3
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#
danielk19774152e672007-09-12 17:01:45 +000012# $Id: tkt2332.test,v 1.4 2007/09/12 17:01:45 danielk1977 Exp $
danielk197744e6c8d2007-05-03 13:11:32 +000013#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17
danielk19774152e672007-09-12 17:01:45 +000018ifcapable !incrblob||!tclvar {
danielk197732a0d8b2007-05-04 19:03:02 +000019 finish_test
20 return
21}
22
danielk197744e6c8d2007-05-03 13:11:32 +000023do_test tkt2332.1 {
24 execsql {
25 CREATE TABLE blobs (k INTEGER PRIMARY KEY, v BLOB);
26 PRAGMA cache_size = 100;
27 }
28} {}
29
30set ::iKey 1
31foreach Len [list 10000 100000 1000000] {
32 do_test tkt2332.$Len.1 {
33 set val "[expr rand()][expr rand()][expr rand()][expr rand()][expr rand()]"
34 set ::blobstr [string range \
35 [string repeat $val [expr ($Len/[string length $val])+1]] 0 [expr $Len-1]
36 ]
37
38 db eval { INSERT INTO blobs VALUES($::iKey, zeroblob($Len)) }
39 } {}
40
41 do_test tkt2332.$Len.2 {
42 execsql {
43 SELECT length(v) FROM blobs WHERE k = $::iKey;
44 }
45 } $Len
46
47 do_test tkt2332.$Len.3 {
48 set ::fd [db incrblob blobs v $::iKey]
49 puts -nonewline $::fd $::blobstr
50 close $::fd
51 } {}
52
53 do_test tkt2332.$Len.4 {
54 execsql { SELECT length(v) FROM blobs WHERE k = $::iKey; }
55 } $Len
56
57 do_test tkt2332.$Len.5 {
58 lindex [execsql {SELECT v FROM blobs WHERE k = $::iKey}] 0
59 } $::blobstr
60
61 incr ::iKey
62}
63
danielk19778cbadb02007-05-03 16:31:26 +000064# Free memory:
65unset ::blobstr
66
danielk197744e6c8d2007-05-03 13:11:32 +000067finish_test