• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 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#
12# $Id: tkt2332.test,v 1.4 2007/09/12 17:01:45 danielk1977 Exp $
13#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17
18ifcapable !incrblob||!tclvar {
19  finish_test
20  return
21}
22
23do_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
64# Free memory:
65unset ::blobstr
66
67finish_test
68