/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact aef273dd1cee84cc92407469e6bd1b3cdcb76908:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 49  is testing the I
01d0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
01e0: 0a 23 0a 23 20 24 49 64 3a 20 69 6e 73 65 72 74  .#.# $Id: insert
01f0: 2e 74 65 73 74 2c 76 20 31 2e 33 31 20 32 30 30  .test,v 1.31 200
0200: 37 2f 30 34 2f 30 35 20 31 31 3a 32 35 3a 35 39  7/04/05 11:25:59
0210: 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20   drh Exp $..set 
0220: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0230: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0240: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0250: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 72 79 20  ster.tcl..# Try 
0260: 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 61  to insert into a
0270: 20 6e 6f 6e 2d 65 78 69 73 74 61 6e 74 20 74 61   non-existant ta
0280: 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69  ble..#.do_test i
0290: 6e 73 65 72 74 2d 31 2e 31 20 7b 0a 20 20 73 65  nsert-1.1 {.  se
02a0: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
02b0: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
02c0: 20 74 65 73 74 31 20 56 41 4c 55 45 53 28 31 2c   test1 VALUES(1,
02d0: 32 2c 33 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  2,3)}} msg].  la
02e0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
02f0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
0300: 3a 20 74 65 73 74 31 7d 7d 0a 0a 23 20 54 72 79  : test1}}..# Try
0310: 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 20   to insert into 
0320: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 23 0a  sqlite_master.#.
0330: 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 31  do_test insert-1
0340: 2e 32 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .2 {.  set v [ca
0350: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 49 4e  tch {execsql {IN
0360: 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65  SERT INTO sqlite
0370: 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28 31  _master VALUES(1
0380: 2c 32 2c 33 2c 34 29 7d 7d 20 6d 73 67 5d 0a 20  ,2,3,4)}} msg]. 
0390: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
03a0: 7d 20 7b 31 20 7b 74 61 62 6c 65 20 73 71 6c 69  } {1 {table sqli
03b0: 74 65 5f 6d 61 73 74 65 72 20 6d 61 79 20 6e 6f  te_master may no
03c0: 74 20 62 65 20 6d 6f 64 69 66 69 65 64 7d 7d 0a  t be modified}}.
03d0: 0a 23 20 54 72 79 20 74 6f 20 69 6e 73 65 72 74  .# Try to insert
03e0: 20 74 68 65 20 77 72 6f 6e 67 20 6e 75 6d 62 65   the wrong numbe
03f0: 72 20 6f 66 20 65 6e 74 72 69 65 73 2e 0a 23 0a  r of entries..#.
0400: 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 31  do_test insert-1
0410: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
0420: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
0430: 74 31 28 6f 6e 65 20 69 6e 74 2c 20 74 77 6f 20  t1(one int, two 
0440: 69 6e 74 2c 20 74 68 72 65 65 20 69 6e 74 29 7d  int, three int)}
0450: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0460: 7b 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54  {execsql {INSERT
0470: 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41 4c 55   INTO test1 VALU
0480: 45 53 28 31 2c 32 29 7d 7d 20 6d 73 67 5d 0a 20  ES(1,2)}} msg]. 
0490: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
04a0: 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 65 73 74  } {1 {table test
04b0: 31 20 68 61 73 20 33 20 63 6f 6c 75 6d 6e 73 20  1 has 3 columns 
04c0: 62 75 74 20 32 20 76 61 6c 75 65 73 20 77 65 72  but 2 values wer
04d0: 65 20 73 75 70 70 6c 69 65 64 7d 7d 0a 64 6f 5f  e supplied}}.do_
04e0: 74 65 73 74 20 69 6e 73 65 72 74 2d 31 2e 33 62  test insert-1.3b
04f0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0500: 68 20 7b 65 78 65 63 73 71 6c 20 7b 49 4e 53 45  h {execsql {INSE
0510: 52 54 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41  RT INTO test1 VA
0520: 4c 55 45 53 28 31 2c 32 2c 33 2c 34 29 7d 7d 20  LUES(1,2,3,4)}} 
0530: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0540: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 61 62 6c   $msg.} {1 {tabl
0550: 65 20 74 65 73 74 31 20 68 61 73 20 33 20 63 6f  e test1 has 3 co
0560: 6c 75 6d 6e 73 20 62 75 74 20 34 20 76 61 6c 75  lumns but 4 valu
0570: 65 73 20 77 65 72 65 20 73 75 70 70 6c 69 65 64  es were supplied
0580: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65 72  }}.do_test inser
0590: 74 2d 31 2e 33 63 20 7b 0a 20 20 73 65 74 20 76  t-1.3c {.  set v
05a0: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
05b0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65   {INSERT INTO te
05c0: 73 74 31 28 6f 6e 65 2c 74 77 6f 29 20 56 41 4c  st1(one,two) VAL
05d0: 55 45 53 28 31 2c 32 2c 33 2c 34 29 7d 7d 20 6d  UES(1,2,3,4)}} m
05e0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
05f0: 24 6d 73 67 0a 7d 20 7b 31 20 7b 34 20 76 61 6c  $msg.} {1 {4 val
0600: 75 65 73 20 66 6f 72 20 32 20 63 6f 6c 75 6d 6e  ues for 2 column
0610: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65  s}}.do_test inse
0620: 72 74 2d 31 2e 33 64 20 7b 0a 20 20 73 65 74 20  rt-1.3d {.  set 
0630: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0640: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
0650: 65 73 74 31 28 6f 6e 65 2c 74 77 6f 29 20 56 41  est1(one,two) VA
0660: 4c 55 45 53 28 31 29 7d 7d 20 6d 73 67 5d 0a 20  LUES(1)}} msg]. 
0670: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0680: 7d 20 7b 31 20 7b 31 20 76 61 6c 75 65 73 20 66  } {1 {1 values f
0690: 6f 72 20 32 20 63 6f 6c 75 6d 6e 73 7d 7d 0a 0a  or 2 columns}}..
06a0: 23 20 54 72 79 20 74 6f 20 69 6e 73 65 72 74 20  # Try to insert 
06b0: 69 6e 74 6f 20 61 20 6e 6f 6e 2d 65 78 69 73 74  into a non-exist
06c0: 61 6e 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 20  ant column of a 
06d0: 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  table..#.do_test
06e0: 20 69 6e 73 65 72 74 2d 31 2e 34 20 7b 0a 20 20   insert-1.4 {.  
06f0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
0700: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
0710: 54 4f 20 74 65 73 74 31 28 6f 6e 65 2c 66 6f 75  TO test1(one,fou
0720: 72 29 20 56 41 4c 55 45 53 28 31 2c 32 29 7d 7d  r) VALUES(1,2)}}
0730: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0740: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 61 62  v $msg.} {1 {tab
0750: 6c 65 20 74 65 73 74 31 20 68 61 73 20 6e 6f 20  le test1 has no 
0760: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 66 6f 75  column named fou
0770: 72 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  r}}..# Make sure
0780: 20 74 68 65 20 69 6e 73 65 72 74 73 20 61 63 74   the inserts act
0790: 75 61 6c 6c 79 20 68 61 70 70 65 6e 0a 23 0a 64  ually happen.#.d
07a0: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 31 2e  o_test insert-1.
07b0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  5 {.  execsql {I
07c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31  NSERT INTO test1
07d0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a   VALUES(1,2,3)}.
07e0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
07f0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 7d 0a  T * FROM test1}.
0800: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {1 2 3}.do_tes
0810: 74 20 69 6e 73 65 72 74 2d 31 2e 35 62 20 7b 0a  t insert-1.5b {.
0820: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
0830: 54 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41 4c  T INTO test1 VAL
0840: 55 45 53 28 34 2c 35 2c 36 29 7d 0a 20 20 65 78  UES(4,5,6)}.  ex
0850: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
0860: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
0870: 20 42 59 20 6f 6e 65 7d 0a 7d 20 7b 31 20 32 20   BY one}.} {1 2 
0880: 33 20 34 20 35 20 36 7d 0a 64 6f 5f 74 65 73 74  3 4 5 6}.do_test
0890: 20 69 6e 73 65 72 74 2d 31 2e 35 63 20 7b 0a 20   insert-1.5c {. 
08a0: 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54   execsql {INSERT
08b0: 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41 4c 55   INTO test1 VALU
08c0: 45 53 28 37 2c 38 2c 39 29 7d 0a 20 20 65 78 65  ES(7,8,9)}.  exe
08d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
08e0: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
08f0: 42 59 20 6f 6e 65 7d 0a 7d 20 7b 31 20 32 20 33  BY one}.} {1 2 3
0900: 20 34 20 35 20 36 20 37 20 38 20 39 7d 0a 0a 64   4 5 6 7 8 9}..d
0910: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 31 2e  o_test insert-1.
0920: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  6 {.  execsql {D
0930: 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 31  ELETE FROM test1
0940: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  }.  execsql {INS
0950: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 28 6f  ERT INTO test1(o
0960: 6e 65 2c 74 77 6f 29 20 56 41 4c 55 45 53 28 31  ne,two) VALUES(1
0970: 2c 32 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  ,2)}.  execsql {
0980: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
0990: 73 74 31 20 4f 52 44 45 52 20 42 59 20 6f 6e 65  st1 ORDER BY one
09a0: 7d 0a 7d 20 7b 31 20 32 20 7b 7d 7d 0a 64 6f 5f  }.} {1 2 {}}.do_
09b0: 74 65 73 74 20 69 6e 73 65 72 74 2d 31 2e 36 62  test insert-1.6b
09c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   {.  execsql {IN
09d0: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 28  SERT INTO test1(
09e0: 74 77 6f 2c 74 68 72 65 65 29 20 56 41 4c 55 45  two,three) VALUE
09f0: 53 28 35 2c 36 29 7d 0a 20 20 65 78 65 63 73 71  S(5,6)}.  execsq
0a00: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0a10: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
0a20: 6f 6e 65 7d 0a 7d 20 7b 7b 7d 20 35 20 36 20 31  one}.} {{} 5 6 1
0a30: 20 32 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 69   2 {}}.do_test i
0a40: 6e 73 65 72 74 2d 31 2e 36 63 20 7b 0a 20 20 65  nsert-1.6c {.  e
0a50: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
0a60: 4e 54 4f 20 74 65 73 74 31 28 74 68 72 65 65 2c  NTO test1(three,
0a70: 6f 6e 65 29 20 56 41 4c 55 45 53 28 37 2c 38 29  one) VALUES(7,8)
0a80: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
0a90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
0aa0: 20 4f 52 44 45 52 20 42 59 20 6f 6e 65 7d 0a 7d   ORDER BY one}.}
0ab0: 20 7b 7b 7d 20 35 20 36 20 31 20 32 20 7b 7d 20   {{} 5 6 1 2 {} 
0ac0: 38 20 7b 7d 20 37 7d 0a 0a 23 20 41 20 74 61 62  8 {} 7}..# A tab
0ad0: 6c 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65  le to use for te
0ae0: 73 74 69 6e 67 20 64 65 66 61 75 6c 74 20 76 61  sting default va
0af0: 6c 75 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 69  lues.#.do_test i
0b00: 6e 73 65 72 74 2d 32 2e 31 20 7b 0a 20 20 65 78  nsert-2.1 {.  ex
0b10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0b20: 54 45 20 54 41 42 4c 45 20 74 65 73 74 32 28 0a  TE TABLE test2(.
0b30: 20 20 20 20 20 20 66 31 20 69 6e 74 20 64 65 66        f1 int def
0b40: 61 75 6c 74 20 2d 31 31 31 2c 20 0a 20 20 20 20  ault -111, .    
0b50: 20 20 66 32 20 72 65 61 6c 20 64 65 66 61 75 6c    f2 real defaul
0b60: 74 20 2b 34 2e 33 32 2c 0a 20 20 20 20 20 20 66  t +4.32,.      f
0b70: 33 20 69 6e 74 20 64 65 66 61 75 6c 74 20 2b 32  3 int default +2
0b80: 32 32 2c 0a 20 20 20 20 20 20 66 34 20 69 6e 74  22,.      f4 int
0b90: 20 64 65 66 61 75 6c 74 20 37 2e 38 39 0a 20 20   default 7.89.  
0ba0: 20 20 29 0a 20 20 7d 0a 20 20 65 78 65 63 73 71    ).  }.  execsq
0bb0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 66 72 6f 6d  l {SELECT * from
0bc0: 20 74 65 73 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f   test2}.} {}.do_
0bd0: 74 65 73 74 20 69 6e 73 65 72 74 2d 32 2e 32 20  test insert-2.2 
0be0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  {.  execsql {INS
0bf0: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 32 28 66  ERT INTO test2(f
0c00: 31 2c 66 33 29 20 56 41 4c 55 45 53 28 2b 31 30  1,f3) VALUES(+10
0c10: 2c 2d 31 30 29 7d 0a 20 20 65 78 65 63 73 71 6c  ,-10)}.  execsql
0c20: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0c30: 74 65 73 74 32 7d 0a 7d 20 7b 31 30 20 34 2e 33  test2}.} {10 4.3
0c40: 32 20 2d 31 30 20 37 2e 38 39 7d 0a 64 6f 5f 74  2 -10 7.89}.do_t
0c50: 65 73 74 20 69 6e 73 65 72 74 2d 32 2e 33 20 7b  est insert-2.3 {
0c60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45  .  execsql {INSE
0c70: 52 54 20 49 4e 54 4f 20 74 65 73 74 32 28 66 32  RT INTO test2(f2
0c80: 2c 66 34 29 20 56 41 4c 55 45 53 28 31 2e 32 33  ,f4) VALUES(1.23
0c90: 2c 2d 33 2e 34 35 29 7d 0a 20 20 65 78 65 63 73  ,-3.45)}.  execs
0ca0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
0cb0: 4d 20 74 65 73 74 32 20 57 48 45 52 45 20 66 31  M test2 WHERE f1
0cc0: 3d 3d 2d 31 31 31 7d 0a 7d 20 7b 2d 31 31 31 20  ==-111}.} {-111 
0cd0: 31 2e 32 33 20 32 32 32 20 2d 33 2e 34 35 7d 0a  1.23 222 -3.45}.
0ce0: 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 32  do_test insert-2
0cf0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0d00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74  INSERT INTO test
0d10: 32 28 66 31 2c 66 32 2c 66 34 29 20 56 41 4c 55  2(f1,f2,f4) VALU
0d20: 45 53 28 37 37 2c 2b 31 2e 32 33 2c 33 2e 34 35  ES(77,+1.23,3.45
0d30: 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  )}.  execsql {SE
0d40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
0d50: 32 20 57 48 45 52 45 20 66 31 3d 3d 37 37 7d 0a  2 WHERE f1==77}.
0d60: 7d 20 7b 37 37 20 31 2e 32 33 20 32 32 32 20 33  } {77 1.23 222 3
0d70: 2e 34 35 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73  .45}.do_test ins
0d80: 65 72 74 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65  ert-2.10 {.  exe
0d90: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
0da0: 54 41 42 4c 45 20 74 65 73 74 32 3b 0a 20 20 20  TABLE test2;.   
0db0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65   CREATE TABLE te
0dc0: 73 74 32 28 0a 20 20 20 20 20 20 66 31 20 69 6e  st2(.      f1 in
0dd0: 74 20 64 65 66 61 75 6c 74 20 31 31 31 2c 20 0a  t default 111, .
0de0: 20 20 20 20 20 20 66 32 20 72 65 61 6c 20 64 65        f2 real de
0df0: 66 61 75 6c 74 20 2d 34 2e 33 32 2c 0a 20 20 20  fault -4.32,.   
0e00: 20 20 20 66 33 20 74 65 78 74 20 64 65 66 61 75     f3 text defau
0e10: 6c 74 20 68 69 2c 0a 20 20 20 20 20 20 66 34 20  lt hi,.      f4 
0e20: 74 65 78 74 20 64 65 66 61 75 6c 74 20 27 61 62  text default 'ab
0e30: 63 2d 31 32 33 27 2c 0a 20 20 20 20 20 20 66 35  c-123',.      f5
0e40: 20 76 61 72 63 68 61 72 28 31 30 29 0a 20 20 20   varchar(10).   
0e50: 20 29 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c   ).  }.  execsql
0e60: 20 7b 53 45 4c 45 43 54 20 2a 20 66 72 6f 6d 20   {SELECT * from 
0e70: 74 65 73 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  test2}.} {}.do_t
0e80: 65 73 74 20 69 6e 73 65 72 74 2d 32 2e 31 31 20  est insert-2.11 
0e90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  {.  execsql {INS
0ea0: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 32 28 66  ERT INTO test2(f
0eb0: 32 2c 66 34 29 20 56 41 4c 55 45 53 28 2d 32 2e  2,f4) VALUES(-2.
0ec0: 32 32 2c 27 68 69 21 27 29 7d 0a 20 20 65 78 65  22,'hi!')}.  exe
0ed0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
0ee0: 52 4f 4d 20 74 65 73 74 32 7d 0a 7d 20 7b 31 31  ROM test2}.} {11
0ef0: 31 20 2d 32 2e 32 32 20 68 69 20 68 69 21 20 7b  1 -2.22 hi hi! {
0f00: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65 72  }}.do_test inser
0f10: 74 2d 32 2e 31 32 20 7b 0a 20 20 65 78 65 63 73  t-2.12 {.  execs
0f20: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
0f30: 74 65 73 74 32 28 66 31 2c 66 35 29 20 56 41 4c  test2(f1,f5) VAL
0f40: 55 45 53 28 31 2c 27 78 79 7a 7a 79 27 29 7d 0a  UES(1,'xyzzy')}.
0f50: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0f60: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 32 20 4f  T * FROM test2 O
0f70: 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31  RDER BY f1}.} {1
0f80: 20 2d 34 2e 33 32 20 68 69 20 61 62 63 2d 31 32   -4.32 hi abc-12
0f90: 33 20 78 79 7a 7a 79 20 31 31 31 20 2d 32 2e 32  3 xyzzy 111 -2.2
0fa0: 32 20 68 69 20 68 69 21 20 7b 7d 7d 0a 0a 23 20  2 hi hi! {}}..# 
0fb0: 44 6f 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  Do additional in
0fc0: 73 65 72 74 73 20 77 69 74 68 20 64 65 66 61 75  serts with defau
0fd0: 6c 74 20 76 61 6c 75 65 73 2c 20 62 75 74 20 74  lt values, but t
0fe0: 68 69 73 20 74 69 6d 65 0a 23 20 6f 6e 20 61 20  his time.# on a 
0ff0: 74 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 69  table that has i
1000: 6e 64 69 63 65 73 2e 20 20 49 6e 20 70 61 72 74  ndices.  In part
1010: 69 63 75 6c 61 72 20 77 65 20 77 61 6e 74 20 74  icular we want t
1020: 6f 20 76 65 72 69 66 79 0a 23 20 74 68 61 74 20  o verify.# that 
1030: 74 68 65 20 63 6f 72 72 65 63 74 20 64 65 66 61  the correct defa
1040: 75 6c 74 20 76 61 6c 75 65 73 20 61 72 65 20 69  ult values are i
1050: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
1060: 20 69 6e 64 69 63 65 73 2e 0a 23 0a 64 6f 5f 74   indices..#.do_t
1070: 65 73 74 20 69 6e 73 65 72 74 2d 33 2e 31 20 7b  est insert-3.1 {
1080: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1090: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73   DELETE FROM tes
10a0: 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  t2;.    CREATE I
10b0: 4e 44 45 58 20 69 6e 64 65 78 39 20 4f 4e 20 74  NDEX index9 ON t
10c0: 65 73 74 32 28 66 31 2c 66 32 29 3b 0a 20 20 20  est2(f1,f2);.   
10d0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 6e   CREATE INDEX in
10e0: 64 65 78 74 20 4f 4e 20 74 65 73 74 32 28 66 34  dext ON test2(f4
10f0: 2c 66 35 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  ,f5);.    SELECT
1100: 20 2a 20 66 72 6f 6d 20 74 65 73 74 32 3b 0a 20   * from test2;. 
1110: 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 55 70 64 61 74   }.} {}..# Updat
1120: 65 20 66 6f 72 20 73 71 6c 69 74 65 33 20 76 33  e for sqlite3 v3
1130: 3a 0a 23 20 43 68 61 6e 67 65 20 74 68 65 20 31  :.# Change the 1
1140: 31 31 20 74 6f 20 27 31 31 31 27 20 69 6e 20 74  11 to '111' in t
1150: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f  he following two
1160: 20 74 65 73 74 20 63 61 73 65 73 2c 20 62 65 63   test cases, bec
1170: 61 75 73 65 0a 23 20 74 68 65 20 64 65 66 61 75  ause.# the defau
1180: 6c 74 20 76 61 6c 75 65 20 69 73 20 62 65 69 6e  lt value is bein
1190: 67 20 69 6e 73 65 72 74 65 64 20 61 73 20 61 20  g inserted as a 
11a0: 73 74 72 69 6e 67 2e 20 54 4f 44 4f 3a 20 49 74  string. TODO: It
11b0: 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 2e 0a 64   shouldn't be..d
11c0: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 33 2e  o_test insert-3.
11d0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  2 {.  execsql {I
11e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 32  NSERT INTO test2
11f0: 28 66 32 2c 66 34 29 20 56 41 4c 55 45 53 28 2d  (f2,f4) VALUES(-
1200: 33 2e 33 33 2c 27 68 75 6d 27 29 7d 0a 20 20 65  3.33,'hum')}.  e
1210: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1220: 20 46 52 4f 4d 20 74 65 73 74 32 20 57 48 45 52   FROM test2 WHER
1230: 45 20 66 31 3d 27 31 31 31 27 20 41 4e 44 20 66  E f1='111' AND f
1240: 32 3d 2d 33 2e 33 33 7d 0a 7d 20 7b 31 31 31 20  2=-3.33}.} {111 
1250: 2d 33 2e 33 33 20 68 69 20 68 75 6d 20 7b 7d 7d  -3.33 hi hum {}}
1260: 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d  .do_test insert-
1270: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
1280: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73  {INSERT INTO tes
1290: 74 32 28 66 31 2c 66 32 2c 66 35 29 20 56 41 4c  t2(f1,f2,f5) VAL
12a0: 55 45 53 28 32 32 2c 2d 34 2e 34 34 2c 27 77 68  UES(22,-4.44,'wh
12b0: 61 6d 27 29 7d 0a 20 20 65 78 65 63 73 71 6c 20  am')}.  execsql 
12c0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
12d0: 65 73 74 32 20 57 48 45 52 45 20 66 31 3d 27 31  est2 WHERE f1='1
12e0: 31 31 27 20 41 4e 44 20 66 32 3d 2d 33 2e 33 33  11' AND f2=-3.33
12f0: 7d 0a 7d 20 7b 31 31 31 20 2d 33 2e 33 33 20 68  }.} {111 -3.33 h
1300: 69 20 68 75 6d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  i hum {}}.do_tes
1310: 74 20 69 6e 73 65 72 74 2d 33 2e 34 20 7b 0a 20  t insert-3.4 {. 
1320: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1330: 20 2a 20 46 52 4f 4d 20 74 65 73 74 32 20 57 48   * FROM test2 WH
1340: 45 52 45 20 66 31 3d 32 32 20 41 4e 44 20 66 32  ERE f1=22 AND f2
1350: 3d 2d 34 2e 34 34 7d 0a 7d 20 7b 32 32 20 2d 34  =-4.44}.} {22 -4
1360: 2e 34 34 20 68 69 20 61 62 63 2d 31 32 33 20 77  .44 hi abc-123 w
1370: 68 61 6d 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b  ham}.ifcapable {
1380: 72 65 69 6e 64 65 78 7d 20 7b 0a 20 20 64 6f 5f  reindex} {.  do_
1390: 74 65 73 74 20 69 6e 73 65 72 74 2d 33 2e 35 20  test insert-3.5 
13a0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 52 45  {.    execsql RE
13b0: 49 4e 44 45 58 0a 20 20 7d 20 7b 7d 0a 7d 0a 69  INDEX.  } {}.}.i
13c0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 69  ntegrity_check i
13d0: 6e 73 65 72 74 2d 33 2e 35 0a 0a 23 20 54 65 73  nsert-3.5..# Tes
13e0: 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
13f0: 20 69 6e 20 74 68 65 20 56 41 4c 55 45 53 20 63   in the VALUES c
1400: 6c 61 75 73 65 0a 23 0a 64 6f 5f 74 65 73 74 20  lause.#.do_test 
1410: 69 6e 73 65 72 74 2d 34 2e 31 20 7b 0a 20 20 65  insert-4.1 {.  e
1420: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
1430: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62  ATE TABLE t3(a,b
1440: 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,c);.    INSERT 
1450: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31  INTO t3 VALUES(1
1460: 2b 32 2b 33 2c 34 2c 35 29 3b 0a 20 20 20 20 53  +2+3,4,5);.    S
1470: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b  ELECT * FROM t3;
1480: 0a 20 20 7d 0a 7d 20 7b 36 20 34 20 35 7d 0a 64  .  }.} {6 4 5}.d
1490: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 34 2e  o_test insert-4.
14a0: 32 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20  2 {.  ifcapable 
14b0: 73 75 62 71 75 65 72 79 20 7b 0a 20 20 20 20 65  subquery {.    e
14c0: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
14d0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 28 53  NTO t3 VALUES((S
14e0: 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f  ELECT max(a) FRO
14f0: 4d 20 74 33 29 2b 31 2c 35 2c 36 29 3b 7d 0a 20  M t3)+1,5,6);}. 
1500: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
1510: 74 20 6d 61 78 61 20 5b 65 78 65 63 73 71 6c 20  t maxa [execsql 
1520: 7b 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46  {SELECT max(a) F
1530: 52 4f 4d 20 74 33 7d 5d 0a 20 20 20 20 65 78 65  ROM t3}].    exe
1540: 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  csql "INSERT INT
1550: 4f 20 74 33 20 56 41 4c 55 45 53 28 24 6d 61 78  O t3 VALUES($max
1560: 61 2b 31 2c 35 2c 36 29 3b 22 0a 20 20 7d 0a 20  a+1,5,6);".  }. 
1570: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1580: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
1590: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
15a0: 7d 20 7b 36 20 34 20 35 20 37 20 35 20 36 7d 0a  } {6 4 5 7 5 6}.
15b0: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
15c0: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 69  ry {.  do_test i
15d0: 6e 73 65 72 74 2d 34 2e 33 20 7b 0a 20 20 20 20  nsert-4.3 {.    
15e0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
15f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
1600: 56 41 4c 55 45 53 28 28 53 45 4c 45 43 54 20 6d  VALUES((SELECT m
1610: 61 78 28 61 29 20 46 52 4f 4d 20 74 33 29 2b 31  ax(a) FROM t3)+1
1620: 2c 74 33 2e 61 2c 36 29 3b 0a 20 20 20 20 20 20  ,t3.a,6);.      
1630: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
1640: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 20   ORDER BY a;.   
1650: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75   }.  } {1 {no su
1660: 63 68 20 63 6f 6c 75 6d 6e 3a 20 74 33 2e 61 7d  ch column: t3.a}
1670: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65  }.}.do_test inse
1680: 72 74 2d 34 2e 34 20 7b 0a 20 20 69 66 63 61 70  rt-4.4 {.  ifcap
1690: 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a  able subquery {.
16a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53      execsql {INS
16b0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
16c0: 45 53 28 28 53 45 4c 45 43 54 20 62 20 46 52 4f  ES((SELECT b FRO
16d0: 4d 20 74 33 20 57 48 45 52 45 20 61 3d 30 29 2c  M t3 WHERE a=0),
16e0: 36 2c 37 29 3b 7d 0a 20 20 7d 20 65 6c 73 65 20  6,7);}.  } else 
16f0: 7b 0a 20 20 20 20 73 65 74 20 62 20 5b 65 78 65  {.    set b [exe
1700: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 62 20 46  csql {SELECT b F
1710: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 20 3d  ROM t3 WHERE a =
1720: 20 30 7d 5d 0a 20 20 20 20 69 66 20 7b 24 62 3d   0}].    if {$b=
1730: 3d 22 22 7d 20 7b 73 65 74 20 62 20 4e 55 4c 4c  =""} {set b NULL
1740: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 49  }.    execsql "I
1750: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
1760: 4c 55 45 53 28 24 62 2c 36 2c 37 29 3b 22 0a 20  LUES($b,6,7);". 
1770: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
1780: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1790: 20 74 33 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   t3 ORDER BY a;.
17a0: 20 20 7d 0a 7d 20 7b 7b 7d 20 36 20 37 20 36 20    }.} {{} 6 7 6 
17b0: 34 20 35 20 37 20 35 20 36 7d 0a 64 6f 5f 74 65  4 5 7 5 6}.do_te
17c0: 73 74 20 69 6e 73 65 72 74 2d 34 2e 35 20 7b 0a  st insert-4.5 {.
17d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
17e0: 53 45 4c 45 43 54 20 62 2c 63 20 46 52 4f 4d 20  SELECT b,c FROM 
17f0: 74 33 20 57 48 45 52 45 20 61 20 49 53 20 4e 55  t3 WHERE a IS NU
1800: 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 36 20 37 7d 0a  LL;.  }.} {6 7}.
1810: 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 34  do_test insert-4
1820: 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .6 {.  catchsql 
1830: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1840: 4f 20 74 33 20 56 41 4c 55 45 53 28 6e 6f 74 61  O t3 VALUES(nota
1850: 66 75 6e 63 28 32 2c 33 29 2c 32 2c 33 29 3b 0a  func(2,3),2,3);.
1860: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63    }.} {1 {no suc
1870: 68 20 66 75 6e 63 74 69 6f 6e 3a 20 6e 6f 74 61  h function: nota
1880: 66 75 6e 63 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  func}}.do_test i
1890: 6e 73 65 72 74 2d 34 2e 37 20 7b 0a 20 20 65 78  nsert-4.7 {.  ex
18a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
18b0: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
18c0: 53 28 6d 69 6e 28 31 2c 32 2c 33 29 2c 6d 61 78  S(min(1,2,3),max
18d0: 28 31 2c 32 2c 33 29 2c 39 39 29 3b 0a 20 20 20  (1,2,3),99);.   
18e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
18f0: 33 20 57 48 45 52 45 20 63 3d 39 39 3b 0a 20 20  3 WHERE c=99;.  
1900: 7d 0a 7d 20 7b 31 20 33 20 39 39 7d 0a 0a 23 20  }.} {1 3 99}..# 
1910: 54 65 73 74 20 74 68 65 20 61 62 69 6c 69 74 79  Test the ability
1920: 20 74 6f 20 69 6e 73 65 72 74 20 66 72 6f 6d 20   to insert from 
1930: 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1940: 65 20 69 6e 74 6f 20 69 74 73 65 6c 66 2e 0a 23  e into itself..#
1950: 20 54 69 63 6b 65 74 20 23 32 37 35 2e 0a 23 0a   Ticket #275..#.
1960: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
1970: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 69 6e 73   {.  do_test ins
1980: 65 72 74 2d 35 2e 31 20 7b 0a 20 20 20 20 65 78  ert-5.1 {.    ex
1990: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
19a0: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
19b0: 74 34 28 78 29 3b 0a 20 20 20 20 20 20 49 4e 53  t4(x);.      INS
19c0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
19d0: 45 53 28 31 29 3b 0a 20 20 20 20 20 20 53 45 4c  ES(1);.      SEL
19e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
19f0: 20 20 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64     }.  } {1}.  d
1a00: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 35 2e  o_test insert-5.
1a10: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
1a20: 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  {.      INSERT I
1a30: 4e 54 4f 20 74 34 20 53 45 4c 45 43 54 20 78 2b  NTO t4 SELECT x+
1a40: 31 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 20  1 FROM t4;.     
1a50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1a60: 34 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  4;.    }.  } {1 
1a70: 32 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  2}.  ifcapable {
1a80: 65 78 70 6c 61 69 6e 7d 20 7b 0a 20 20 20 20 64  explain} {.    d
1a90: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 35 2e  o_test insert-5.
1aa0: 33 20 7b 0a 20 20 20 20 20 20 23 20 76 65 72 69  3 {.      # veri
1ab0: 66 79 20 74 68 61 74 20 61 20 74 65 6d 70 6f 72  fy that a tempor
1ac0: 61 72 79 20 74 61 62 6c 65 20 69 73 20 75 73 65  ary table is use
1ad0: 64 20 74 6f 20 63 6f 70 79 20 74 34 20 74 6f 20  d to copy t4 to 
1ae0: 74 34 0a 20 20 20 20 20 20 73 65 74 20 78 20 5b  t4.      set x [
1af0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1b00: 20 20 45 58 50 4c 41 49 4e 20 49 4e 53 45 52 54    EXPLAIN INSERT
1b10: 20 49 4e 54 4f 20 74 34 20 53 45 4c 45 43 54 20   INTO t4 SELECT 
1b20: 78 2b 32 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20  x+2 FROM t4;.   
1b30: 20 20 20 7d 5d 0a 20 20 20 20 20 20 65 78 70 72     }].      expr
1b40: 20 7b 5b 6c 73 65 61 72 63 68 20 24 78 20 4f 70   {[lsearch $x Op
1b50: 65 6e 45 70 68 65 6d 65 72 61 6c 5d 3e 30 7d 0a  enEphemeral]>0}.
1b60: 20 20 20 20 7d 20 7b 31 7d 0a 20 20 7d 0a 20 20      } {1}.  }.  
1b70: 0a 20 20 64 6f 5f 74 65 73 74 20 69 6e 73 65 72  .  do_test inser
1b80: 74 2d 35 2e 34 20 7b 0a 20 20 20 20 23 20 56 65  t-5.4 {.    # Ve
1b90: 72 69 66 79 20 74 68 61 74 20 74 61 62 6c 65 20  rify that table 
1ba0: 22 74 65 73 74 31 22 20 62 65 67 69 6e 73 20 6f  "test1" begins o
1bb0: 6e 20 70 61 67 65 20 33 2e 20 20 54 68 69 73 20  n page 3.  This 
1bc0: 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20 73 61  should be the sa
1bd0: 6d 65 0a 20 20 20 20 23 20 70 61 67 65 20 6e 75  me.    # page nu
1be0: 6d 62 65 72 20 75 73 65 64 20 62 79 20 22 74 34  mber used by "t4
1bf0: 22 20 61 62 6f 76 65 2e 0a 20 20 20 20 23 0a 20  " above..    #. 
1c00: 20 20 20 23 20 55 70 64 61 74 65 20 66 6f 72 20     # Update for 
1c10: 76 33 20 2d 20 74 68 65 20 66 69 72 73 74 20 74  v3 - the first t
1c20: 61 62 6c 65 20 6e 6f 77 20 62 65 67 69 6e 73 20  able now begins 
1c30: 6f 6e 20 70 61 67 65 20 32 20 6f 66 20 65 61 63  on page 2 of eac
1c40: 68 20 66 69 6c 65 2c 20 6e 6f 74 20 33 2e 0a 20  h file, not 3.. 
1c50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1c60: 20 20 20 53 45 4c 45 43 54 20 72 6f 6f 74 70 61     SELECT rootpa
1c70: 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
1c80: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
1c90: 3d 27 74 65 73 74 31 27 3b 0a 20 20 20 20 7d 0a  ='test1';.    }.
1ca0: 20 20 7d 20 5b 65 78 70 72 20 24 41 55 54 4f 56    } [expr $AUTOV
1cb0: 41 43 55 55 4d 3f 33 3a 32 5d 0a 20 20 64 6f 5f  ACUUM?3:2].  do_
1cc0: 74 65 73 74 20 69 6e 73 65 72 74 2d 35 2e 35 20  test insert-5.5 
1cd0: 7b 0a 20 20 20 20 23 20 56 65 72 69 66 79 20 74  {.    # Verify t
1ce0: 68 61 74 20 22 74 34 22 20 62 65 67 69 6e 73 20  hat "t4" begins 
1cf0: 6f 6e 20 70 61 67 65 20 33 2e 0a 20 20 20 20 23  on page 3..    #
1d00: 0a 20 20 20 20 23 20 55 70 64 61 74 65 20 66 6f  .    # Update fo
1d10: 72 20 76 33 20 2d 20 74 68 65 20 66 69 72 73 74  r v3 - the first
1d20: 20 74 61 62 6c 65 20 6e 6f 77 20 62 65 67 69 6e   table now begin
1d30: 73 20 6f 6e 20 70 61 67 65 20 32 20 6f 66 20 65  s on page 2 of e
1d40: 61 63 68 20 66 69 6c 65 2c 20 6e 6f 74 20 33 2e  ach file, not 3.
1d50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1d60: 20 20 20 20 20 53 45 4c 45 43 54 20 72 6f 6f 74       SELECT root
1d70: 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  page FROM sqlite
1d80: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
1d90: 52 45 20 6e 61 6d 65 3d 27 74 34 27 3b 0a 20 20  RE name='t4';.  
1da0: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f    }.  } {2}.  do
1db0: 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 35 2e 36  _test insert-5.6
1dc0: 20 7b 0a 20 20 20 20 23 20 54 68 69 73 20 73 68   {.    # This sh
1dd0: 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 61 6e 20  ould not use an 
1de0: 69 6e 74 65 72 6d 65 64 69 61 74 65 20 74 65 6d  intermediate tem
1df0: 70 6f 72 61 72 79 20 74 61 62 6c 65 2e 0a 20 20  porary table..  
1e00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1e10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
1e20: 20 53 45 4c 45 43 54 20 6f 6e 65 20 46 52 4f 4d   SELECT one FROM
1e30: 20 74 65 73 74 31 20 57 48 45 52 45 20 74 68 72   test1 WHERE thr
1e40: 65 65 3d 37 3b 0a 20 20 20 20 20 20 53 45 4c 45  ee=7;.      SELE
1e50: 43 54 20 2a 20 46 52 4f 4d 20 74 34 0a 20 20 20  CT * FROM t4.   
1e60: 20 7d 0a 20 20 7d 20 7b 31 20 32 20 38 7d 0a 20   }.  } {1 2 8}. 
1e70: 20 69 66 63 61 70 61 62 6c 65 20 7b 65 78 70 6c   ifcapable {expl
1e80: 61 69 6e 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  ain} {.    do_te
1e90: 73 74 20 69 6e 73 65 72 74 2d 35 2e 37 20 7b 0a  st insert-5.7 {.
1ea0: 20 20 20 20 20 20 23 20 76 65 72 69 66 79 20 74        # verify t
1eb0: 68 61 74 20 6e 6f 20 74 65 6d 70 6f 72 61 72 79  hat no temporary
1ec0: 20 74 61 62 6c 65 20 69 73 20 75 73 65 64 20 74   table is used t
1ed0: 6f 20 63 6f 70 79 20 74 65 73 74 31 20 74 6f 20  o copy test1 to 
1ee0: 74 34 0a 20 20 20 20 20 20 73 65 74 20 78 20 5b  t4.      set x [
1ef0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1f00: 20 20 45 58 50 4c 41 49 4e 20 49 4e 53 45 52 54    EXPLAIN INSERT
1f10: 20 49 4e 54 4f 20 74 34 20 53 45 4c 45 43 54 20   INTO t4 SELECT 
1f20: 6f 6e 65 20 46 52 4f 4d 20 74 65 73 74 31 3b 0a  one FROM test1;.
1f30: 20 20 20 20 20 20 7d 5d 0a 20 20 20 20 20 20 65        }].      e
1f40: 78 70 72 20 7b 5b 6c 73 65 61 72 63 68 20 24 78  xpr {[lsearch $x
1f50: 20 4f 70 65 6e 54 65 6d 70 5d 3e 30 7d 0a 20 20   OpenTemp]>0}.  
1f60: 20 20 7d 20 7b 30 7d 0a 20 20 7d 0a 7d 0a 0a 23    } {0}.  }.}..#
1f70: 20 54 69 63 6b 65 74 20 23 33 33 34 3a 20 20 52   Ticket #334:  R
1f80: 45 50 4c 41 43 45 20 73 74 61 74 65 6d 65 6e 74  EPLACE statement
1f90: 20 63 6f 72 72 75 70 74 69 6e 67 20 69 6e 64 69   corrupting indi
1fa0: 63 65 73 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  ces..#.ifcapable
1fb0: 20 63 6f 6e 66 6c 69 63 74 20 7b 0a 20 20 23 20   conflict {.  # 
1fc0: 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
1fd0: 61 6e 64 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  and is not avail
1fe0: 61 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 4f  able if SQLITE_O
1ff0: 4d 49 54 5f 43 4f 4e 46 4c 49 43 54 20 69 73 20  MIT_CONFLICT is 
2000: 0a 20 20 23 20 64 65 66 69 6e 65 64 20 61 74 20  .  # defined at 
2010: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 74 69 6d 65  compilation time
2020: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 69 6e 73 65  ..  do_test inse
2030: 72 74 2d 36 2e 31 20 7b 0a 20 20 20 20 65 78 65  rt-6.1 {.    exe
2040: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45  csql {.      CRE
2050: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49  ATE TABLE t1(a I
2060: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
2070: 45 59 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20  EY, b UNIQUE);. 
2080: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
2090: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29 3b   t1 VALUES(1,2);
20a0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
20b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 33  TO t1 VALUES(2,3
20c0: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
20d0: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
20e0: 62 3d 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  b=2;.    }.  } {
20f0: 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 69 6e 73  2}.  do_test ins
2100: 65 72 74 2d 36 2e 32 20 7b 0a 20 20 20 20 65 78  ert-6.2 {.    ex
2110: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 45  ecsql {.      RE
2120: 50 4c 41 43 45 20 49 4e 54 4f 20 74 31 20 56 41  PLACE INTO t1 VA
2130: 4c 55 45 53 28 31 2c 34 29 3b 0a 20 20 20 20 20  LUES(1,4);.     
2140: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74   SELECT b FROM t
2150: 31 20 57 48 45 52 45 20 62 3d 32 3b 0a 20 20 20  1 WHERE b=2;.   
2160: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
2170: 65 73 74 20 69 6e 73 65 72 74 2d 36 2e 33 20 7b  est insert-6.3 {
2180: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
2190: 20 20 20 20 20 55 50 44 41 54 45 20 4f 52 20 52       UPDATE OR R
21a0: 45 50 4c 41 43 45 20 74 31 20 53 45 54 20 61 3d  EPLACE t1 SET a=
21b0: 32 20 57 48 45 52 45 20 62 3d 34 3b 0a 20 20 20  2 WHERE b=4;.   
21c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
21d0: 20 74 31 20 57 48 45 52 45 20 62 3d 34 3b 0a 20   t1 WHERE b=4;. 
21e0: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 34 7d 0a 20     }.  } {2 4}. 
21f0: 20 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d   do_test insert-
2200: 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.4 {.    execsq
2210: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
2220: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2230: 20 62 3d 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20   b=3;.    }.  } 
2240: 7b 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  {}.  ifcapable {
2250: 72 65 69 6e 64 65 78 7d 20 7b 0a 20 20 20 20 64  reindex} {.    d
2260: 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d 36 2e  o_test insert-6.
2270: 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  5 {.      execsq
2280: 6c 20 52 45 49 4e 44 45 58 0a 20 20 20 20 7d 20  l REINDEX.    } 
2290: 7b 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74  {}.  }.  do_test
22a0: 20 69 6e 73 65 72 74 2d 36 2e 36 20 7b 0a 20 20   insert-6.6 {.  
22b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
22c0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
22d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a  .    }.  } {}.}.
22e0: 0a 23 20 54 65 73 74 20 74 68 61 74 20 74 68 65  .# Test that the
22f0: 20 73 70 65 63 69 61 6c 20 6f 70 74 69 6d 69 7a   special optimiz
2300: 61 74 69 6f 6e 20 66 6f 72 20 71 75 65 72 69 65  ation for querie
2310: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 23  s of the form .#
2320: 20 22 53 45 4c 45 43 54 20 6d 61 78 28 78 29 20   "SELECT max(x) 
2330: 46 52 4f 4d 20 74 62 6c 22 20 77 68 65 72 65 20  FROM tbl" where 
2340: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 64 65  there is an inde
2350: 78 20 6f 6e 20 74 62 6c 28 78 29 20 77 6f 72 6b  x on tbl(x) work
2360: 73 20 77 69 74 68 20 0a 23 20 49 4e 53 45 52 54  s with .# INSERT
2370: 20 73 74 61 74 6d 65 6e 74 73 2e 0a 64 6f 5f 74   statments..do_t
2380: 65 73 74 20 69 6e 73 65 72 74 2d 37 2e 31 20 7b  est insert-7.1 {
2390: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
23a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
23b0: 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (a);.    INSERT 
23c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
23d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
23e0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 29 3b  TO t1 VALUES(2);
23f0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
2400: 58 20 69 31 20 4f 4e 20 74 31 28 61 29 3b 0a 20  X i1 ON t1(a);. 
2410: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
2420: 69 6e 73 65 72 74 2d 37 2e 32 20 7b 0a 20 20 65  insert-7.2 {.  e
2430: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
2440: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
2450: 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20 74  CT max(a) FROM t
2460: 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  1;.  }.} {}.do_t
2470: 65 73 74 20 69 6e 73 65 72 74 2d 37 2e 33 20 7b  est insert-7.3 {
2480: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2490: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
24a0: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 32 7d  1;.  }.} {1 2 2}
24b0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 31 34 30  ..# Ticket #1140
24c0: 3a 20 20 43 68 65 63 6b 20 66 6f 72 20 61 6e 20  :  Check for an 
24d0: 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 20 69 6e  infinite loop in
24e0: 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74   the algorithm t
24f0: 68 61 74 20 74 65 73 74 73 0a 23 20 74 6f 20 73  hat tests.# to s
2500: 65 65 20 69 66 20 74 68 65 20 72 69 67 68 74 2d  ee if the right-
2510: 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20  hand side of an 
2520: 49 4e 53 45 52 54 2e 2e 2e 53 45 4c 45 43 54 20  INSERT...SELECT 
2530: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 20 6c  references the l
2540: 65 66 74 2d 68 61 6e 64 0a 23 20 73 69 64 65 2e  eft-hand.# side.
2550: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62  .#.ifcapable sub
2560: 71 75 65 72 79 26 26 63 6f 6d 70 6f 75 6e 64 20  query&&compound 
2570: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 69 6e 73 65  {.  do_test inse
2580: 72 74 2d 38 2e 31 20 7b 0a 20 20 20 20 65 78 65  rt-8.1 {.    exe
2590: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53  csql {.      INS
25a0: 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45  ERT INTO t3 SELE
25b0: 43 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43  CT * FROM (SELEC
25c0: 54 20 2a 20 46 52 4f 4d 20 74 33 20 55 4e 49 4f  T * FROM t3 UNIO
25d0: 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 31 2c 32  N ALL SELECT 1,2
25e0: 2c 33 29 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  ,3).    }.  } {}
25f0: 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  .}..# Make sure 
2600: 74 68 65 20 72 6f 77 69 64 20 63 61 63 68 65 20  the rowid cache 
2610: 69 6e 20 74 68 65 20 56 44 42 45 20 69 73 20 72  in the VDBE is r
2620: 65 73 65 74 20 63 6f 72 72 65 63 74 6c 79 20 77  eset correctly w
2630: 68 65 6e 0a 23 20 61 6e 20 65 78 70 6c 69 63 69  hen.# an explici
2640: 74 20 72 6f 77 69 64 20 69 73 20 67 69 76 65 6e  t rowid is given
2650: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65  ..#.do_test inse
2660: 72 74 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  rt-9.1 {.  execs
2670: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2680: 54 41 42 4c 45 20 74 35 28 78 29 3b 0a 20 20 20  TABLE t5(x);.   
2690: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
26a0: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49  VALUES(1);.    I
26b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41  NSERT INTO t5 VA
26c0: 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 49 4e 53  LUES(2);.    INS
26d0: 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55  ERT INTO t5 VALU
26e0: 45 53 28 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  ES(3);.    INSER
26f0: 54 20 49 4e 54 4f 20 74 35 28 72 6f 77 69 64 2c  T INTO t5(rowid,
2700: 20 78 29 20 53 45 4c 45 43 54 20 6e 75 6c 6c 69   x) SELECT nulli
2710: 66 28 78 2a 32 2b 31 30 2c 31 34 29 2c 20 78 2b  f(x*2+10,14), x+
2720: 31 30 30 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20  100 FROM t5;.   
2730: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78   SELECT rowid, x
2740: 20 46 52 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20   FROM t5;.  }.} 
2750: 7b 31 20 31 20 32 20 32 20 33 20 33 20 31 32 20  {1 1 2 2 3 3 12 
2760: 31 30 31 20 31 33 20 31 30 32 20 31 36 20 31 30  101 13 102 16 10
2770: 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65 72  3}.do_test inser
2780: 74 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  t-9.2 {.  execsq
2790: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
27a0: 41 42 4c 45 20 74 36 28 78 20 49 4e 54 45 47 45  ABLE t6(x INTEGE
27b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79  R PRIMARY KEY, y
27c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
27d0: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31 2c 31  TO t6 VALUES(1,1
27e0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
27f0: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 32 2c 32  TO t6 VALUES(2,2
2800: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2810: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 33 2c 33  TO t6 VALUES(3,3
2820: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2830: 54 4f 20 74 36 20 53 45 4c 45 43 54 20 6e 75 6c  TO t6 SELECT nul
2840: 6c 69 66 28 79 2a 32 2b 31 30 2c 31 34 29 2c 20  lif(y*2+10,14), 
2850: 79 2b 31 30 30 20 46 52 4f 4d 20 74 36 3b 0a 20  y+100 FROM t6;. 
2860: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46     SELECT x, y F
2870: 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t6;.  }.} {1
2880: 20 31 20 32 20 32 20 33 20 33 20 31 32 20 31 30   1 2 2 3 3 12 10
2890: 31 20 31 33 20 31 30 32 20 31 36 20 31 30 33 7d  1 13 102 16 103}
28a0: 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  ..integrity_chec
28b0: 6b 20 69 6e 73 65 72 74 2d 39 39 2e 30 0a 0a 66  k insert-99.0..f
28c0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.