/ Hex Artifact Content
Login

Artifact 2f4f8c80d4fc63fe74ba51f63028ea432f37445a:


0000: 23 20 32 30 30 37 20 4d 61 79 20 30 32 0a 23 0a  # 2007 May 02.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20  ***.# This file 
0170: 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65  implements regre
0180: 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20  ssion tests for 
0190: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01a0: 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66 20   The.# focus of 
01b0: 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 65 73  this file is tes
01c0: 74 69 6e 67 20 6f 66 20 74 68 65 20 7a 65 72 6f  ting of the zero
01d0: 2d 66 69 6c 6c 65 64 20 62 6c 6f 62 20 66 75 6e  -filled blob fun
01e0: 63 74 69 6f 6e 61 6c 69 74 79 0a 23 20 69 6e 63  ctionality.# inc
01f0: 6c 75 64 69 6e 67 20 74 68 65 20 73 71 6c 69 74  luding the sqlit
0200: 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62  e3_bind_zeroblob
0210: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 75  (), sqlite3_resu
0220: 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 2c 0a 23  lt_zeroblob(),.#
0230: 20 61 6e 64 20 74 68 65 20 62 75 69 6c 74 2d 69   and the built-i
0240: 6e 20 7a 65 72 6f 62 6c 6f 62 28 29 20 53 51 4c  n zeroblob() SQL
0250: 20 66 75 6e 63 74 69 6f 6e 2e 0a 23 0a 23 20 24   function..#.# $
0260: 49 64 3a 20 7a 65 72 6f 62 6c 6f 62 2e 74 65 73  Id: zeroblob.tes
0270: 74 2c 76 20 31 2e 31 31 20 32 30 30 38 2f 30 36  t,v 1.11 2008/06
0280: 2f 31 32 20 31 38 3a 30 35 3a 34 30 20 64 72 68  /12 18:05:40 drh
0290: 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74   Exp $..set test
02a0: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
02b0: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
02c0: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
02d0: 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20  .tcl..ifcapable 
02e0: 21 69 6e 63 72 62 6c 6f 62 20 7b 0a 20 20 66 69  !incrblob {.  fi
02f0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
0300: 72 6e 0a 7d 0a 0a 23 20 57 68 65 6e 20 7a 65 72  rn.}..# When zer
0310: 6f 62 6c 6f 62 28 29 20 69 73 20 75 73 65 64 20  oblob() is used 
0320: 66 6f 72 20 74 68 65 20 6c 61 73 74 20 66 69 65  for the last fie
0330: 6c 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20  ld of a column, 
0340: 74 68 65 6e 20 74 68 65 0a 23 20 63 6f 6e 74 65  then the.# conte
0350: 6e 74 20 6f 66 20 74 68 65 20 7a 65 72 6f 62 6c  nt of the zerobl
0360: 6f 62 20 69 73 20 6e 65 76 65 72 20 69 6e 73 74  ob is never inst
0370: 61 6e 74 69 61 74 65 64 20 6f 6e 20 74 68 65 20  antiated on the 
0380: 56 44 42 45 20 73 74 61 63 6b 2e 0a 23 20 42 75  VDBE stack..# Bu
0390: 74 20 69 74 20 64 6f 65 73 20 67 65 74 20 69 6e  t it does get in
03a0: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
03b0: 64 61 74 61 62 61 73 65 20 63 6f 72 72 65 63 74  database correct
03c0: 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 7a 65  ly..#.do_test ze
03d0: 72 6f 62 6c 6f 62 2d 31 2e 31 20 7b 0a 20 20 65  roblob-1.1 {.  e
03e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
03f0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0400: 2c 63 2c 64 29 3b 0a 20 20 7d 0a 20 20 73 65 74  ,c,d);.  }.  set
0410: 20 3a 3a 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62   ::sqlite3_max_b
0420: 6c 6f 62 73 69 7a 65 20 30 0a 20 20 65 78 65 63  lobsize 0.  exec
0430: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
0440: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0450: 32 2c 33 2c 34 2c 7a 65 72 6f 62 6c 6f 62 28 31  2,3,4,zeroblob(1
0460: 30 30 30 30 29 29 3b 0a 20 20 7d 0a 20 20 73 65  0000));.  }.  se
0470: 74 20 3a 3a 73 71 6c 69 74 65 33 5f 6d 61 78 5f  t ::sqlite3_max_
0480: 62 6c 6f 62 73 69 7a 65 0a 7d 20 7b 31 30 7d 0a  blobsize.} {10}.
0490: 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62  do_test zeroblob
04a0: 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.2 {.  execsql
04b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c 65   {.    SELECT le
04c0: 6e 67 74 68 28 64 29 20 46 52 4f 4d 20 74 31 0a  ngth(d) FROM t1.
04d0: 20 20 7d 0a 7d 20 7b 31 30 30 30 30 7d 0a 0a 23    }.} {10000}..#
04e0: 20 49 66 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 63   If a non-NULL c
04f0: 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77 73 20 74 68  olumn follows th
0500: 65 20 7a 65 72 6f 62 6c 6f 62 2c 20 74 68 65 6e  e zeroblob, then
0510: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
0520: 23 20 74 68 65 20 7a 65 72 6f 62 6c 6f 62 20 6d  # the zeroblob m
0530: 75 73 74 20 62 65 20 69 6e 73 74 61 6e 74 69 61  ust be instantia
0540: 74 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 7a  ted..#.do_test z
0550: 65 72 6f 62 6c 6f 62 2d 31 2e 33 20 7b 0a 20 20  eroblob-1.3 {.  
0560: 73 65 74 20 3a 3a 73 71 6c 69 74 65 33 5f 6d 61  set ::sqlite3_ma
0570: 78 5f 62 6c 6f 62 73 69 7a 65 20 30 0a 20 20 65  x_blobsize 0.  e
0580: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
0590: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
05a0: 45 53 28 33 2c 34 2c 7a 65 72 6f 62 6c 6f 62 28  ES(3,4,zeroblob(
05b0: 31 30 30 30 30 29 2c 35 29 3b 0a 20 20 7d 0a 20  10000),5);.  }. 
05c0: 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 33 5f 6d   set ::sqlite3_m
05d0: 61 78 5f 62 6c 6f 62 73 69 7a 65 0a 7d 20 7b 31  ax_blobsize.} {1
05e0: 30 30 31 30 7d 0a 64 6f 5f 74 65 73 74 20 7a 65  0010}.do_test ze
05f0: 72 6f 62 6c 6f 62 2d 31 2e 34 20 7b 0a 20 20 65  roblob-1.4 {.  e
0600: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0610: 45 43 54 20 6c 65 6e 67 74 68 28 63 29 2c 20 6c  ECT length(c), l
0620: 65 6e 67 74 68 28 64 29 20 46 52 4f 4d 20 74 31  ength(d) FROM t1
0630: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 30 30 20  .  }.} {1 10000 
0640: 31 30 30 30 30 20 31 7d 0a 0a 23 20 4d 75 6c 74  10000 1}..# Mult
0650: 69 70 6c 65 20 7a 65 72 6f 62 6c 6f 62 73 20 63  iple zeroblobs c
0660: 61 6e 20 61 70 70 65 61 72 20 61 74 20 74 68 65  an appear at the
0670: 20 65 6e 64 20 6f 66 20 72 65 63 6f 72 64 2e 20   end of record. 
0680: 20 4e 6f 20 69 6e 73 74 61 6e 74 69 61 74 69 6f   No instantiatio
0690: 6e 0a 23 20 6f 66 20 74 68 65 20 62 6c 6f 62 20  n.# of the blob 
06a0: 63 6f 6e 74 65 6e 74 20 6f 63 63 75 72 73 20 6f  content occurs o
06b0: 6e 20 74 68 65 20 73 74 61 63 6b 2e 0a 23 0a 64  n the stack..#.d
06c0: 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d  o_test zeroblob-
06d0: 31 2e 35 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71  1.5 {.  set ::sq
06e0: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
06f0: 7a 65 20 30 0a 20 20 65 78 65 63 73 71 6c 20 7b  ze 0.  execsql {
0700: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0710: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 35 2c 7a   t1 VALUES(4,5,z
0720: 65 72 6f 62 6c 6f 62 28 31 30 30 30 30 29 2c 7a  eroblob(10000),z
0730: 65 72 6f 62 6c 6f 62 28 31 30 30 30 30 29 29 3b  eroblob(10000));
0740: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 73 71 6c  .  }.  set ::sql
0750: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0760: 65 0a 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74  e.} {11}.do_test
0770: 20 7a 65 72 6f 62 6c 6f 62 2d 31 2e 36 20 7b 0a   zeroblob-1.6 {.
0780: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0790: 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 63 29  SELECT length(c)
07a0: 2c 20 6c 65 6e 67 74 68 28 64 29 20 46 52 4f 4d  , length(d) FROM
07b0: 20 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30   t1.  }.} {1 100
07c0: 30 30 20 31 30 30 30 30 20 31 20 31 30 30 30 30  00 10000 1 10000
07d0: 20 31 30 30 30 30 7d 0a 0a 23 20 4e 55 4c 4c 73   10000}..# NULLs
07e0: 20 63 61 6e 20 66 6f 6c 6c 6f 77 20 74 68 65 20   can follow the 
07f0: 7a 65 72 6f 62 6c 6f 62 28 29 20 6f 72 20 62 65  zeroblob() or be
0800: 20 69 6e 74 65 72 6d 69 78 65 64 20 77 69 74 68   intermixed with
0810: 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6e 64 0a 23   zeroblobs and.#
0820: 20 6e 6f 20 69 6e 73 74 61 6e 74 69 61 74 69 6f   no instantiatio
0830: 6e 20 6f 66 20 74 68 65 20 7a 65 72 6f 62 6c 6f  n of the zeroblo
0840: 62 73 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65  bs occurs on the
0850: 20 73 74 61 63 6b 2e 0a 23 0a 64 6f 5f 74 65 73   stack..#.do_tes
0860: 74 20 7a 65 72 6f 62 6c 6f 62 2d 31 2e 37 20 7b  t zeroblob-1.7 {
0870: 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 33  .  set ::sqlite3
0880: 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 30 0a  _max_blobsize 0.
0890: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
08a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
08b0: 41 4c 55 45 53 28 35 2c 7a 65 72 6f 62 6c 6f 62  ALUES(5,zeroblob
08c0: 28 31 30 30 30 30 29 2c 4e 55 4c 4c 2c 7a 65 72  (10000),NULL,zer
08d0: 6f 62 6c 6f 62 28 31 30 30 30 30 29 29 3b 0a 20  oblob(10000));. 
08e0: 20 7d 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74   }.  set ::sqlit
08f0: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 0a  e3_max_blobsize.
0900: 7d 20 7b 31 30 7d 0a 64 6f 5f 74 65 73 74 20 7a  } {10}.do_test z
0910: 65 72 6f 62 6c 6f 62 2d 31 2e 38 20 7b 0a 20 20  eroblob-1.8 {.  
0920: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0930: 4c 45 43 54 20 6c 65 6e 67 74 68 28 62 29 2c 20  LECT length(b), 
0940: 6c 65 6e 67 74 68 28 64 29 20 46 52 4f 4d 20 74  length(d) FROM t
0950: 31 20 57 48 45 52 45 20 61 3d 35 0a 20 20 7d 0a  1 WHERE a=5.  }.
0960: 7d 20 7b 31 30 30 30 30 20 31 30 30 30 30 7d 0a  } {10000 10000}.
0970: 0a 23 20 43 6f 6d 70 61 72 69 73 6f 6e 73 20 61  .# Comparisons a
0980: 67 61 69 6e 73 74 20 7a 65 72 6f 62 6c 6f 62 73  gainst zeroblobs
0990: 20 77 6f 72 6b 2e 0a 23 0a 64 6f 5f 74 65 73 74   work..#.do_test
09a0: 20 7a 65 72 6f 62 6c 6f 62 2d 32 2e 31 20 7b 0a   zeroblob-2.1 {.
09b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
09c0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
09d0: 20 57 48 45 52 45 20 62 3d 7a 65 72 6f 62 6c 6f   WHERE b=zeroblo
09e0: 62 28 31 30 30 30 30 29 0a 20 20 7d 0a 7d 20 7b  b(10000).  }.} {
09f0: 35 7d 0a 0a 23 20 43 6f 6d 70 61 72 69 73 6f 6e  5}..# Comparison
0a00: 73 20 61 67 61 69 6e 73 74 20 7a 65 72 6f 62 6c  s against zerobl
0a10: 6f 62 73 20 77 6f 72 6b 20 65 76 65 6e 20 77 68  obs work even wh
0a20: 65 6e 20 69 6e 64 65 78 65 64 2e 0a 23 0a 64 6f  en indexed..#.do
0a30: 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 32  _test zeroblob-2
0a40: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0a50: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
0a60: 58 20 69 31 5f 31 20 4f 4e 20 74 31 28 62 29 3b  X i1_1 ON t1(b);
0a70: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0a80: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 7a 65  OM t1 WHERE b=ze
0a90: 72 6f 62 6c 6f 62 28 31 30 30 30 30 29 3b 0a 20  roblob(10000);. 
0aa0: 20 7d 0a 7d 20 7b 35 7d 0a 0a 23 20 44 49 53 54   }.} {5}..# DIST
0ab0: 49 4e 43 54 20 77 6f 72 6b 73 20 66 6f 72 20 7a  INCT works for z
0ac0: 65 72 6f 62 6c 6f 62 73 0a 23 0a 69 66 63 61 70  eroblobs.#.ifcap
0ad0: 61 62 6c 65 20 62 6c 6f 62 6c 69 74 26 26 73 75  able bloblit&&su
0ae0: 62 71 75 65 72 79 26 26 63 6f 6d 70 6f 75 6e 64  bquery&&compound
0af0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 7a 65 72   {.  do_test zer
0b00: 6f 62 6c 6f 62 2d 33 2e 31 20 7b 0a 20 20 20 20  oblob-3.1 {.    
0b10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
0b20: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 44 49 53  SELECT count(DIS
0b30: 54 49 4e 43 54 20 61 29 20 46 52 4f 4d 20 28 0a  TINCT a) FROM (.
0b40: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 78          SELECT x
0b50: 27 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  '000000000000000
0b60: 30 30 30 30 30 27 20 41 53 20 61 0a 20 20 20 20  00000' AS a.    
0b70: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
0b80: 20 20 20 20 20 20 53 45 4c 45 43 54 20 7a 65 72        SELECT zer
0b90: 6f 62 6c 6f 62 28 31 30 29 20 41 53 20 61 0a 20  oblob(10) AS a. 
0ba0: 20 20 20 20 20 29 0a 20 20 20 20 7d 0a 20 20 7d       ).    }.  }
0bb0: 20 7b 31 7d 0a 7d 0a 0a 23 20 43 6f 6e 63 61 74   {1}.}..# Concat
0bc0: 65 6e 74 61 74 69 6f 6e 20 77 6f 72 6b 73 20 77  entation works w
0bd0: 69 74 68 20 7a 65 72 6f 62 6c 6f 62 0a 23 0a 69  ith zeroblob.#.i
0be0: 66 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74  fcapable bloblit
0bf0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 7a 65 72   {.  do_test zer
0c00: 6f 62 6c 6f 62 2d 34 2e 31 20 7b 0a 20 20 20 20  oblob-4.1 {.    
0c10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
0c20: 53 45 4c 45 43 54 20 68 65 78 28 7a 65 72 6f 62  SELECT hex(zerob
0c30: 6c 6f 62 28 32 29 20 7c 7c 20 78 27 36 31 27 29  lob(2) || x'61')
0c40: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 30 30 30  .    }.  } {0000
0c50: 36 31 7d 0a 7d 0a 0a 23 20 43 68 65 63 6b 20 76  61}.}..# Check v
0c60: 61 72 69 6f 75 73 20 43 41 53 54 28 2e 2e 2e 29  arious CAST(...)
0c70: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 7a   operations on z
0c80: 65 72 6f 62 6c 6f 62 2e 0a 23 0a 64 6f 5f 74 65  eroblob..#.do_te
0c90: 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 35 2e 31 20  st zeroblob-5.1 
0ca0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0cb0: 20 20 53 45 4c 45 43 54 20 43 41 53 54 20 28 7a    SELECT CAST (z
0cc0: 65 72 6f 62 6c 6f 62 28 31 30 30 29 20 41 53 20  eroblob(100) AS 
0cd0: 52 45 41 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 2e  REAL);.  }.} {0.
0ce0: 30 7d 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62  0}.do_test zerob
0cf0: 6c 6f 62 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  lob-5.2 {.  exec
0d00: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0d10: 20 43 41 53 54 20 28 7a 65 72 6f 62 6c 6f 62 28   CAST (zeroblob(
0d20: 31 30 30 29 20 41 53 20 49 4e 54 45 47 45 52 29  100) AS INTEGER)
0d30: 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  ;.  }.} {0}.do_t
0d40: 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 35 2e 33  est zeroblob-5.3
0d50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0d60: 20 20 20 53 45 4c 45 43 54 20 43 41 53 54 20 28     SELECT CAST (
0d70: 7a 65 72 6f 62 6c 6f 62 28 31 30 30 29 20 41 53  zeroblob(100) AS
0d80: 20 54 45 58 54 29 3b 0a 20 20 7d 0a 7d 20 7b 7b   TEXT);.  }.} {{
0d90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62  }}.do_test zerob
0da0: 6c 6f 62 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63  lob-5.4 {.  exec
0db0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0dc0: 20 43 41 53 54 28 7a 65 72 6f 62 6c 6f 62 28 31   CAST(zeroblob(1
0dd0: 30 30 29 20 41 53 20 42 4c 4f 42 29 3b 0a 20 20  00) AS BLOB);.  
0de0: 7d 0a 7d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45  }.} [execsql {SE
0df0: 4c 45 43 54 20 7a 65 72 6f 62 6c 6f 62 28 31 30  LECT zeroblob(10
0e00: 30 29 7d 5d 0a 20 20 0a 0a 23 20 43 68 65 63 6b  0)}].  ..# Check
0e10: 20 66 6f 72 20 6d 61 6c 69 63 69 6f 75 73 20 75   for malicious u
0e20: 73 65 20 6f 66 20 7a 65 72 6f 62 6c 6f 62 2e 20  se of zeroblob. 
0e30: 20 4d 61 6b 65 20 73 75 72 65 20 6e 6f 74 68 69   Make sure nothi
0e40: 6e 67 20 63 72 61 73 68 65 73 2e 0a 23 0a 64 6f  ng crashes..#.do
0e50: 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 36  _test zeroblob-6
0e60: 2e 31 2e 31 20 7b 20 0a 20 20 65 78 65 63 73 71  .1.1 { .  execsq
0e70: 6c 20 7b 73 65 6c 65 63 74 20 7a 65 72 6f 62 6c  l {select zerobl
0e80: 6f 62 28 2d 31 29 7d 20 0a 7d 20 7b 7b 7d 7d 20  ob(-1)} .} {{}} 
0e90: 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f  .do_test zeroblo
0ea0: 62 2d 36 2e 31 2e 32 20 7b 20 0a 20 20 65 78 65  b-6.1.2 { .  exe
0eb0: 63 73 71 6c 20 7b 73 65 6c 65 63 74 20 7a 65 72  csql {select zer
0ec0: 6f 62 6c 6f 62 28 2d 31 30 29 7d 20 0a 7d 20 7b  oblob(-10)} .} {
0ed0: 7b 7d 7d 20 0a 64 6f 5f 74 65 73 74 20 7a 65 72  {}} .do_test zer
0ee0: 6f 62 6c 6f 62 2d 36 2e 31 2e 33 20 7b 20 0a 20  oblob-6.1.3 { . 
0ef0: 20 65 78 65 63 73 71 6c 20 7b 73 65 6c 65 63 74   execsql {select
0f00: 20 7a 65 72 6f 62 6c 6f 62 28 2d 31 30 30 29 7d   zeroblob(-100)}
0f10: 20 0a 7d 20 7b 7b 7d 7d 20 0a 64 6f 5f 74 65 73   .} {{}} .do_tes
0f20: 74 20 7a 65 72 6f 62 6c 6f 62 2d 36 2e 32 20 7b  t zeroblob-6.2 {
0f30: 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 73 65 6c   .  execsql {sel
0f40: 65 63 74 20 6c 65 6e 67 74 68 28 7a 65 72 6f 62  ect length(zerob
0f50: 6c 6f 62 28 2d 31 29 29 7d 20 0a 7d 20 7b 30 7d  lob(-1))} .} {0}
0f60: 20 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c   .do_test zerobl
0f70: 6f 62 2d 36 2e 33 20 7b 20 0a 20 20 65 78 65 63  ob-6.3 { .  exec
0f80: 73 71 6c 20 7b 73 65 6c 65 63 74 20 7a 65 72 6f  sql {select zero
0f90: 62 6c 6f 62 28 2d 31 29 7c 31 7d 20 0a 7d 20 7b  blob(-1)|1} .} {
0fa0: 31 7d 20 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f  1} .do_test zero
0fb0: 62 6c 6f 62 2d 36 2e 34 20 7b 20 0a 20 20 63 61  blob-6.4 { .  ca
0fc0: 74 63 68 73 71 6c 20 7b 73 65 6c 65 63 74 20 6c  tchsql {select l
0fd0: 65 6e 67 74 68 28 7a 65 72 6f 62 6c 6f 62 28 32  ength(zeroblob(2
0fe0: 31 34 37 34 38 33 36 34 38 29 29 7d 20 0a 7d 20  147483648))} .} 
0ff0: 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c  {1 {string or bl
1000: 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 20 0a 64 6f  ob too big}} .do
1010: 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 36  _test zeroblob-6
1020: 2e 35 20 7b 20 0a 20 20 63 61 74 63 68 73 71 6c  .5 { .  catchsql
1030: 20 7b 73 65 6c 65 63 74 20 7a 65 72 6f 62 6c 6f   {select zeroblo
1040: 62 28 32 31 34 37 34 38 33 36 34 38 29 7d 20 0a  b(2147483648)} .
1050: 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20  } {1 {string or 
1060: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 64  blob too big}}.d
1070: 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d  o_test zeroblob-
1080: 36 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.6 {.  execsql 
1090: 7b 73 65 6c 65 63 74 20 68 65 78 28 7a 65 72 6f  {select hex(zero
10a0: 62 6c 6f 62 28 2d 31 29 29 7d 0a 7d 20 7b 7b 7d  blob(-1))}.} {{}
10b0: 7d 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c  }.do_test zerobl
10c0: 6f 62 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73  ob-6.7 {.  execs
10d0: 71 6c 20 7b 73 65 6c 65 63 74 20 74 79 70 65 6f  ql {select typeo
10e0: 66 28 7a 65 72 6f 62 6c 6f 62 28 2d 31 29 29 7d  f(zeroblob(-1))}
10f0: 0a 7d 20 7b 62 6c 6f 62 7d 0a 0a 23 20 54 65 73  .} {blob}..# Tes
1100: 74 20 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28  t bind_zeroblob(
1110: 29 0a 23 0a 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ).#.sqlite3_memo
1120: 72 79 5f 68 69 67 68 77 61 74 65 72 20 31 0a 75  ry_highwater 1.u
1130: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1140: 20 6d 65 6d 75 73 65 64 0a 73 65 74 20 6d 65 6d   memused.set mem
1150: 75 73 65 64 20 5b 73 71 6c 69 74 65 33 5f 6d 65  used [sqlite3_me
1160: 6d 6f 72 79 5f 75 73 65 64 5d 0a 64 6f 5f 74 65  mory_used].do_te
1170: 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 37 2e 31 20  st zeroblob-7.1 
1180: 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b  {.  set ::STMT [
1190: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
11a0: 24 3a 3a 44 42 20 22 53 45 4c 45 43 54 20 6c 65  $::DB "SELECT le
11b0: 6e 67 74 68 28 3f 29 22 20 2d 31 20 44 55 4d 4d  ngth(?)" -1 DUMM
11c0: 59 5d 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74  Y].  set ::sqlit
11d0: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
11e0: 30 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  0.  sqlite3_bind
11f0: 5f 7a 65 72 6f 62 6c 6f 62 20 24 3a 3a 53 54 4d  _zeroblob $::STM
1200: 54 20 31 20 34 35 30 30 30 30 0a 20 20 73 71 6c  T 1 450000.  sql
1210: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
1220: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
1230: 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c 6f  .do_test zeroblo
1240: 62 2d 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  b-7.2 {.  sqlite
1250: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 3a 3a  3_column_int $::
1260: 53 54 4d 54 20 30 0a 7d 20 7b 34 35 30 30 30 30  STMT 0.} {450000
1270: 7d 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c  }.do_test zerobl
1280: 6f 62 2d 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74  ob-7.3 {.  sqlit
1290: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53  e3_finalize $::S
12a0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
12b0: 7d 0a 64 6f 5f 74 65 73 74 20 7a 65 72 6f 62 6c  }.do_test zerobl
12c0: 6f 62 2d 37 2e 34 20 7b 0a 20 20 73 65 74 20 3a  ob-7.4 {.  set :
12d0: 3a 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  :sqlite3_max_blo
12e0: 62 73 69 7a 65 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  bsize.} {0}.do_t
12f0: 65 73 74 20 7a 65 72 6f 62 6c 6f 62 2d 37 2e 35  est zeroblob-7.5
1300: 20 7b 0a 20 20 65 78 70 72 20 7b 5b 73 71 6c 69   {.  expr {[sqli
1310: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
1320: 61 74 65 72 5d 3c 24 3a 3a 6d 65 6d 75 73 65 64  ater]<$::memused
1330: 2b 31 30 30 30 30 7d 0a 7d 20 7b 31 7d 0a 0a 23  +10000}.} {1}..#
1340: 20 54 65 73 74 20 74 68 61 74 20 4d 61 6b 65 52   Test that MakeR
1350: 65 63 6f 72 64 20 63 61 6e 20 68 61 6e 64 6c 65  ecord can handle
1360: 20 61 20 76 61 6c 75 65 20 77 69 74 68 20 73 6f   a value with so
1370: 6d 65 20 72 65 61 6c 20 63 6f 6e 74 65 6e 74 0a  me real content.
1380: 23 20 61 6e 64 20 61 20 7a 65 72 6f 2d 62 6c 6f  # and a zero-blo
1390: 62 20 74 61 69 6c 2e 0a 23 0a 64 6f 5f 74 65 73  b tail..#.do_tes
13a0: 74 20 7a 65 72 6f 62 6c 6f 62 2d 38 2e 31 20 7b  t zeroblob-8.1 {
13b0: 0a 20 20 6c 6c 65 6e 67 74 68 20 5b 65 78 65 63  .  llength [exec
13c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
13d0: 20 27 68 65 6c 6c 6f 27 20 41 53 20 61 2c 20 7a   'hello' AS a, z
13e0: 65 72 6f 62 6c 6f 62 28 31 30 29 20 61 73 20 62  eroblob(10) as b
13f0: 20 66 72 6f 6d 20 74 31 20 4f 52 44 45 52 20 42   from t1 ORDER B
1400: 59 20 61 2c 20 62 3b 0a 20 20 7d 5d 0a 7d 20 7b  Y a, b;.  }].} {
1410: 38 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  8}...finish_test
1420: 0a                                               .