/ Hex Artifact Content
Login

Artifact a0f33669ba76632247c14718af32db939fa6de5cd13890798ad3f2a362cf7fe4:


0000: 23 20 32 30 31 35 2d 30 33 2d 32 35 0a 23 0a 23  # 2015-03-25.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 23  QLite library..#
01a0: 0a 23 20 54 68 65 20 66 6f 63 75 73 20 6f 66 20  .# The focus of 
01b0: 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20 6d  this script is m
01c0: 61 6b 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 63  aking multiple c
01d0: 61 6c 6c 73 20 74 6f 20 73 61 76 65 43 75 72 73  alls to saveCurs
01e0: 6f 72 50 6f 73 69 74 69 6f 6e 28 29 0a 23 20 61  orPosition().# a
01f0: 6e 64 20 72 65 73 74 6f 72 65 43 75 72 73 6f 72  nd restoreCursor
0200: 50 6f 73 69 74 69 6f 6e 28 29 20 77 68 65 6e 20  Position() when 
0210: 63 75 72 73 6f 72 73 20 68 61 76 65 20 65 53 74  cursors have eSt
0220: 61 74 65 3d 3d 43 55 52 53 4f 52 5f 53 4b 49 50  ate==CURSOR_SKIP
0230: 4e 45 58 54 0a 23 20 0a 0a 73 65 74 20 74 65 73  NEXT.# ..set tes
0240: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0250: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0260: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0270: 72 2e 74 63 6c 0a 0a 6c 6f 61 64 5f 73 74 61 74  r.tcl..load_stat
0280: 69 63 5f 65 78 74 65 6e 73 69 6f 6e 20 64 62 20  ic_extension db 
0290: 65 76 61 6c 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  eval.do_execsql_
02a0: 74 65 73 74 20 62 74 72 65 65 30 32 2d 31 30 30  test btree02-100
02b0: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
02c0: 45 20 74 31 28 61 20 54 45 58 54 2c 20 61 78 20  E t1(a TEXT, ax 
02d0: 49 4e 54 45 47 45 52 2c 20 62 20 49 4e 54 2c 20  INTEGER, b INT, 
02e0: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 61 78  PRIMARY KEY(a,ax
02f0: 29 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  )) WITHOUT ROWID
0300: 3b 0a 20 20 57 49 54 48 20 52 45 43 55 52 53 49  ;.  WITH RECURSI
0310: 56 45 20 63 28 69 29 20 41 53 20 28 56 41 4c 55  VE c(i) AS (VALU
0320: 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
0330: 53 45 4c 45 43 54 20 69 2b 31 20 46 52 4f 4d 20  SELECT i+1 FROM 
0340: 63 20 57 48 45 52 45 20 69 3c 31 30 29 0a 20 20  c WHERE i<10).  
0350: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0360: 28 61 2c 61 78 2c 62 29 20 53 45 4c 45 43 54 20  (a,ax,b) SELECT 
0370: 70 72 69 6e 74 66 28 27 25 30 32 78 27 2c 69 29  printf('%02x',i)
0380: 2c 20 72 61 6e 64 6f 6d 28 29 2c 20 69 20 46 52  , random(), i FR
0390: 4f 4d 20 63 3b 0a 20 20 43 52 45 41 54 45 20 49  OM c;.  CREATE I
03a0: 4e 44 45 58 20 74 31 61 20 4f 4e 20 74 31 28 61  NDEX t1a ON t1(a
03b0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
03c0: 45 20 74 32 28 78 2c 79 29 3b 0a 20 20 43 52 45  E t2(x,y);.  CRE
03d0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 63 6e 74  ATE TABLE t3(cnt
03e0: 29 3b 0a 20 20 57 49 54 48 20 52 45 43 55 52 53  );.  WITH RECURS
03f0: 49 56 45 20 63 28 69 29 20 41 53 20 28 56 41 4c  IVE c(i) AS (VAL
0400: 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c  UES(1) UNION ALL
0410: 20 53 45 4c 45 43 54 20 69 2b 31 20 46 52 4f 4d   SELECT i+1 FROM
0420: 20 63 20 57 48 45 52 45 20 69 3c 34 29 0a 20 20   c WHERE i<4).  
0430: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
0440: 28 63 6e 74 29 20 53 45 4c 45 43 54 20 69 20 46  (cnt) SELECT i F
0450: 52 4f 4d 20 63 3b 0a 20 20 53 45 4c 45 43 54 20  ROM c;.  SELECT 
0460: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
0470: 3b 0a 7d 20 7b 31 30 7d 0a 64 6f 5f 74 65 73 74  ;.} {10}.do_test
0480: 20 62 74 72 65 65 30 32 2d 31 31 30 20 7b 0a 20   btree02-110 {. 
0490: 20 64 62 20 65 76 61 6c 20 42 45 47 49 4e 0a 20   db eval BEGIN. 
04a0: 20 73 65 74 20 69 20 30 0a 20 20 64 62 20 65 76   set i 0.  db ev
04b0: 61 6c 20 7b 53 45 4c 45 43 54 20 61 2c 20 61 78  al {SELECT a, ax
04c0: 2c 20 62 2c 20 63 6e 74 20 46 52 4f 4d 20 74 31  , b, cnt FROM t1
04d0: 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 33 20 57   CROSS JOIN t3 W
04e0: 48 45 52 45 20 62 20 49 53 20 4e 4f 54 20 4e 55  HERE b IS NOT NU
04f0: 4c 4c 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 61  LL} {.    if {$a
0500: 3d 3d 22 22 7d 20 7b 73 65 74 20 61 20 30 7d 0a  ==""} {set a 0}.
0510: 20 20 20 20 69 66 20 7b 24 62 3d 3d 22 22 7d 20      if {$b==""} 
0520: 7b 73 65 74 20 62 20 30 7d 20 20 20 20 0a 20 20  {set b 0}    .  
0530: 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52    db eval {INSER
0540: 54 20 49 4e 54 4f 20 74 32 28 78 2c 79 29 20 56  T INTO t2(x,y) V
0550: 41 4c 55 45 53 28 24 62 2c 24 63 6e 74 29 7d 0a  ALUES($b,$cnt)}.
0560: 20 20 20 20 23 20 70 75 74 73 20 22 61 2c 62 2c      # puts "a,b,
0570: 63 6e 74 20 3d 20 28 24 61 2c 24 62 2c 24 63 6e  cnt = ($a,$b,$cn
0580: 74 29 22 0a 20 20 20 20 69 6e 63 72 20 69 0a 20  t)".    incr i. 
0590: 20 20 20 69 66 20 7b 24 69 25 32 3d 3d 31 7d 20     if {$i%2==1} 
05a0: 7b 0a 20 20 20 20 20 20 73 65 74 20 62 78 20 5b  {.      set bx [
05b0: 65 78 70 72 20 7b 24 62 2b 31 30 30 30 7d 5d 0a  expr {$b+1000}].
05c0: 20 20 20 20 20 20 23 20 70 75 74 73 20 22 49 4e        # puts "IN
05d0: 53 45 52 54 20 28 24 61 29 2c 24 62 78 22 0a 20  SERT ($a),$bx". 
05e0: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49 4e       db eval {IN
05f0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 61  SERT INTO t1(a,a
0600: 78 2c 62 29 20 56 41 4c 55 45 53 28 70 72 69 6e  x,b) VALUES(prin
0610: 74 66 28 27 28 25 73 29 27 2c 24 61 29 2c 72 61  tf('(%s)',$a),ra
0620: 6e 64 6f 6d 28 29 2c 24 62 78 29 7d 0a 20 20 20  ndom(),$bx)}.   
0630: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
0640: 23 20 70 75 74 73 20 22 44 45 4c 45 54 45 20 61  # puts "DELETE a
0650: 3d 24 61 22 0a 20 20 20 20 20 20 64 62 20 65 76  =$a".      db ev
0660: 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  al {DELETE FROM 
0670: 74 31 20 57 48 45 52 45 20 61 3d 24 61 7d 0a 20  t1 WHERE a=$a}. 
0680: 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c     }.    db eval
0690: 20 7b 43 4f 4d 4d 49 54 3b 20 42 45 47 49 4e 7d   {COMMIT; BEGIN}
06a0: 0a 20 20 7d 20 20 0a 20 20 64 62 20 6f 6e 65 20  .  }  .  db one 
06b0: 7b 43 4f 4d 4d 49 54 3b 20 53 45 4c 45 43 54 20  {COMMIT; SELECT 
06c0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
06d0: 3b 7d 0a 7d 20 7b 32 37 7d 0a 0a 66 69 6e 69 73  ;}.} {27}..finis
06e0: 68 5f 74 65 73 74 0a                             h_test.