/ Hex Artifact Content
Login

Artifact 27e41ed540b2f9b056c2e77e9bddc1b875358507:


0000: 23 20 32 30 31 36 20 4d 61 72 63 68 20 33 0a 23  # 2016 March 3.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you 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 2a 0a 0a 73 65 74 20 74 65 73 74 64 69  ****..set testdi
0170: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0180: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0190: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
01a0: 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65 66 69  cl.set testprefi
01b0: 78 20 74 65 6d 70 64 62 32 0a 0a 64 62 20 63 6c  x tempdb2..db cl
01c0: 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62 20 22  ose.sqlite3 db "
01d0: 22 0a 0a 70 72 6f 63 20 69 6e 74 32 73 74 72 20  "..proc int2str 
01e0: 7b 69 7d 20 7b 20 73 74 72 69 6e 67 20 72 61 6e  {i} { string ran
01f0: 67 65 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  ge [string repea
0200: 74 20 22 24 69 2e 22 20 34 35 30 5d 20 30 20 38  t "$i." 450] 0 8
0210: 39 39 20 7d 0a 64 62 20 66 75 6e 63 20 69 6e 74  99 }.db func int
0220: 32 73 74 72 20 69 6e 74 32 73 74 72 0a 0a 23 2d  2str int2str..#-
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 20 31 2e  --------.#.#  1.
0280: 31 3a 20 57 72 69 74 65 20 61 20 62 69 67 20 74  1: Write a big t
0290: 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 74 68  ransaction to th
02a0: 65 20 64 62 2e 20 4f 6e 65 20 73 6f 20 6c 61 72  e db. One so lar
02b0: 67 65 20 74 68 61 74 20 69 74 20 66 6f 72 63 65  ge that it force
02c0: 73 0a 23 20 20 20 20 20 20 20 74 68 65 20 66 69  s.#       the fi
02d0: 6c 65 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  le to be created
02e0: 20 61 6e 64 20 74 68 65 20 63 61 63 68 65 20 66   and the cache f
02f0: 6c 75 73 68 65 64 20 74 6f 20 64 69 73 6b 20 6f  lushed to disk o
0300: 6e 20 43 4f 4d 4d 49 54 2e 0a 23 0a 23 20 20 31  n COMMIT..#.#  1
0310: 2e 32 3a 20 57 72 69 74 65 20 61 20 73 6d 61 6c  .2: Write a smal
0320: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  l transaction - 
0330: 6f 6e 65 20 73 6d 61 6c 6c 20 65 6e 6f 75 67 68  one small enough
0340: 20 74 68 61 74 20 69 74 20 72 65 6d 61 69 6e 73   that it remains
0350: 20 69 6e 0a 23 20 20 20 20 20 20 20 6d 65 6d 6f   in.#       memo
0360: 72 79 20 6f 6e 20 43 4f 4d 4d 49 54 2e 20 41 6c  ry on COMMIT. Al
0370: 6c 20 74 68 65 20 70 61 67 65 73 20 6f 66 20 74  l the pages of t
0380: 61 62 6c 65 20 5b 74 31 5d 20 61 72 65 20 6e 6f  able [t1] are no
0390: 77 20 64 69 72 74 79 2e 0a 23 0a 23 20 20 31 2e  w dirty..#.#  1.
03a0: 33 3a 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f  3: Delete the co
03b0: 6e 74 65 6e 74 73 20 6f 66 20 5b 74 31 5d 2e 20  ntents of [t1]. 
03c0: 54 68 69 73 20 6d 6f 76 65 73 20 61 6c 6c 20 6f  This moves all o
03d0: 66 20 69 74 73 20 6c 65 61 76 65 73 20 74 6f 20  f its leaves to 
03e0: 74 68 65 0a 23 20 20 20 20 20 20 20 66 72 65 65  the.#       free
03f0: 2d 6c 69 73 74 20 61 6e 64 20 63 61 75 73 65 73  -list and causes
0400: 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
0410: 20 74 6f 20 63 61 6c 6c 20 50 61 67 65 72 44 6f   to call PagerDo
0420: 6e 74 57 72 69 74 65 28 29 20 6f 6e 0a 23 20 20  ntWrite() on.#  
0430: 20 20 20 20 20 65 61 63 68 20 6f 66 20 74 68 65       each of the
0440: 6d 2e 0a 23 0a 23 20 20 20 20 20 20 20 54 68 65  m..#.#       The
0450: 6e 20 64 6f 20 61 20 62 69 67 20 75 70 64 61 74  n do a big updat
0460: 65 20 6f 6e 20 74 61 62 6c 65 20 5b 74 32 5d 2e  e on table [t2].
0470: 20 53 6f 20 62 69 67 20 74 68 61 74 20 74 68 65   So big that the
0480: 20 66 6f 72 6d 65 72 20 6c 65 61 76 65 73 0a 23   former leaves.#
0490: 20 20 20 20 20 20 20 6f 66 20 5b 74 31 5d 20 61         of [t1] a
04a0: 72 65 20 66 6f 72 63 65 64 20 6f 75 74 20 6f 66  re forced out of
04b0: 20 74 68 65 20 63 61 63 68 65 2e 20 54 68 65 6e   the cache. Then
04c0: 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 20 74   roll back the t
04d0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23 20 20 20  ransaction..#   
04e0: 20 20 20 20 49 66 20 74 68 65 20 50 61 67 65 72      If the Pager
04f0: 44 6f 6e 74 57 72 69 74 65 28 29 20 63 61 6c 6c  DontWrite() call
0500: 73 20 61 72 65 20 68 6f 6e 6f 75 72 65 64 20 61  s are honoured a
0510: 6e 64 20 74 68 65 20 64 61 74 61 20 69 73 20 6e  nd the data is n
0520: 6f 74 20 77 72 69 74 74 65 6e 0a 23 20 20 20 20  ot written.#    
0530: 20 20 20 74 6f 20 64 69 73 6b 2c 20 74 68 65 20     to disk, the 
0540: 75 70 64 61 74 65 20 6d 61 64 65 20 69 6e 20 74  update made in t
0550: 65 73 74 20 31 2e 32 20 77 69 6c 6c 20 62 65 20  est 1.2 will be 
0560: 6c 6f 73 74 20 61 74 20 74 68 69 73 20 70 6f 69  lost at this poi
0570: 6e 74 2e 20 4f 72 2c 20 69 66 0a 23 20 20 20 20  nt. Or, if.#    
0580: 20 20 20 74 68 65 79 20 61 72 65 20 69 67 6e 6f     they are igno
0590: 72 65 64 20 28 61 73 20 74 68 65 79 20 73 68 6f  red (as they sho
05a0: 75 6c 64 20 62 65 20 66 6f 72 20 74 65 6d 70 20  uld be for temp 
05b0: 64 61 74 61 62 61 73 65 73 29 2c 20 74 68 65 20  databases), the 
05c0: 75 70 64 61 74 65 0a 23 20 20 20 20 20 20 20 77  update.#       w
05d0: 69 6c 6c 20 62 65 20 73 61 66 65 6c 79 20 77 72  ill be safely wr
05e0: 69 74 74 65 6e 20 6f 75 74 20 74 6f 20 64 69 73  itten out to dis
05f0: 6b 20 62 65 66 6f 72 65 20 74 68 65 20 63 61 63  k before the cac
0600: 68 65 20 65 6e 74 72 69 65 73 20 61 72 65 0a 23  he entries are.#
0610: 20 20 20 20 20 20 20 64 69 73 63 61 72 64 65 64         discarded
0620: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
0630: 65 73 74 20 31 2e 31 20 7b 0a 20 20 50 52 41 47  est 1.1 {.  PRAG
0640: 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d 31 30 32  MA page_size=102
0650: 34 3b 0a 20 20 50 52 41 47 4d 41 20 63 61 63 68  4;.  PRAGMA cach
0660: 65 5f 73 69 7a 65 3d 35 30 3b 0a 0a 20 20 42 45  e_size=50;..  BE
0670: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
0680: 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47  TABLE t1(a INTEG
0690: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
06a0: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
06b0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
06c0: 20 69 6e 74 32 73 74 72 28 31 29 29 3b 0a 20 20   int2str(1));.  
06d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
06e0: 20 56 41 4c 55 45 53 28 32 2c 20 69 6e 74 32 73   VALUES(2, int2s
06f0: 74 72 28 31 29 29 3b 0a 20 20 20 20 49 4e 53 45  tr(1));.    INSE
0700: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0710: 53 28 33 2c 20 69 6e 74 32 73 74 72 28 31 29 29  S(3, int2str(1))
0720: 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  ;..    CREATE TA
0730: 42 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45 52  BLE t2(a INTEGER
0740: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29   PRIMARY KEY, b)
0750: 3b 0a 20 20 20 20 57 49 54 48 20 63 28 78 29 20  ;.    WITH c(x) 
0760: 41 53 20 28 20 56 41 4c 55 45 53 28 31 29 20 55  AS ( VALUES(1) U
0770: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
0780: 78 2b 31 20 46 52 4f 4d 20 63 20 57 48 45 52 45  x+1 FROM c WHERE
0790: 20 78 3c 31 30 30 20 29 20 0a 20 20 20 20 49 4e   x<100 ) .    IN
07a0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
07b0: 45 43 54 20 78 2c 20 69 6e 74 32 73 74 72 28 78  ECT x, int2str(x
07c0: 29 20 46 52 4f 4d 20 63 3b 0a 20 20 43 4f 4d 4d  ) FROM c;.  COMM
07d0: 49 54 3b 0a 0a 20 20 50 52 41 47 4d 41 20 6c 6f  IT;..  PRAGMA lo
07e0: 63 6b 5f 73 74 61 74 75 73 3b 0a 7d 20 7b 6d 61  ck_status;.} {ma
07f0: 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70  in unlocked temp
0800: 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 65 78 65   closed}..do_exe
0810: 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 20 7b 0a  csql_test 1.2 {.
0820: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
0830: 62 3d 69 6e 74 32 73 74 72 28 32 29 3b 0a 20 20  b=int2str(2);.  
0840: 53 45 4c 45 43 54 20 62 3d 69 6e 74 32 73 74 72  SELECT b=int2str
0850: 28 32 29 20 46 52 4f 4d 20 74 31 0a 7d 20 7b 31  (2) FROM t1.} {1
0860: 20 31 20 31 7d 0a 0a 64 6f 5f 65 78 65 63 73 71   1 1}..do_execsq
0870: 6c 5f 74 65 73 74 20 31 2e 33 20 7b 0a 20 20 42  l_test 1.3 {.  B
0880: 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45  EGIN;.    DELETE
0890: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 55 50   FROM t1;.    UP
08a0: 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 69 6e  DATE t2 SET b=in
08b0: 74 32 73 74 72 28 61 2b 31 29 3b 0a 20 20 52 4f  t2str(a+1);.  RO
08c0: 4c 4c 42 41 43 4b 3b 0a 7d 0a 0a 64 6f 5f 65 78  LLBACK;.}..do_ex
08d0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 34 20 7b  ecsql_test 1.4 {
08e0: 0a 20 20 53 45 4c 45 43 54 20 62 3d 69 6e 74 32  .  SELECT b=int2
08f0: 73 74 72 28 32 29 20 46 52 4f 4d 20 74 31 0a 7d  str(2) FROM t1.}
0900: 20 7b 31 20 31 20 31 7d 0a 0a 66 69 6e 69 73 68   {1 1 1}..finish
0910: 5f 74 65 73 74 0a                                _test.