/ Hex Artifact Content
Login

Artifact b0a89e1568fe9890758f8f2b43b68e840e8f1a1a:


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 32 37 20 32 30 30  .test,v 1.27 200
0200: 35 2f 30 37 2f 30 38 20 31 37 3a 31 33 3a 34 37  5/07/08 17:13:47
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 56 69 72 74 75 61 6c 5d 3e 30 7d 0a 20 20  enVirtual]>0}.  
1b60: 20 20 7d 20 7b 31 7d 0a 20 20 7d 0a 20 20 0a 20    } {1}.  }.  . 
1b70: 20 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d   do_test insert-
1b80: 35 2e 34 20 7b 0a 20 20 20 20 23 20 56 65 72 69  5.4 {.    # Veri
1b90: 66 79 20 74 68 61 74 20 74 61 62 6c 65 20 22 74  fy that table "t
1ba0: 65 73 74 31 22 20 62 65 67 69 6e 73 20 6f 6e 20  est1" begins on 
1bb0: 70 61 67 65 20 33 2e 20 20 54 68 69 73 20 73 68  page 3.  This sh
1bc0: 6f 75 6c 64 20 62 65 20 74 68 65 20 73 61 6d 65  ould be the same
1bd0: 0a 20 20 20 20 23 20 70 61 67 65 20 6e 75 6d 62  .    # page numb
1be0: 65 72 20 75 73 65 64 20 62 79 20 22 74 34 22 20  er used by "t4" 
1bf0: 61 62 6f 76 65 2e 0a 20 20 20 20 23 0a 20 20 20  above..    #.   
1c00: 20 23 20 55 70 64 61 74 65 20 66 6f 72 20 76 33   # Update for v3
1c10: 20 2d 20 74 68 65 20 66 69 72 73 74 20 74 61 62   - the first tab
1c20: 6c 65 20 6e 6f 77 20 62 65 67 69 6e 73 20 6f 6e  le now begins on
1c30: 20 70 61 67 65 20 32 20 6f 66 20 65 61 63 68 20   page 2 of each 
1c40: 66 69 6c 65 2c 20 6e 6f 74 20 33 2e 0a 20 20 20  file, not 3..   
1c50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1c60: 20 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65   SELECT rootpage
1c70: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1c80: 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  ter WHERE name='
1c90: 74 65 73 74 31 27 3b 0a 20 20 20 20 7d 0a 20 20  test1';.    }.  
1ca0: 7d 20 5b 65 78 70 72 20 24 41 55 54 4f 56 41 43  } [expr $AUTOVAC
1cb0: 55 55 4d 3f 33 3a 32 5d 0a 20 20 64 6f 5f 74 65  UUM?3:2].  do_te
1cc0: 73 74 20 69 6e 73 65 72 74 2d 35 2e 35 20 7b 0a  st insert-5.5 {.
1cd0: 20 20 20 20 23 20 56 65 72 69 66 79 20 74 68 61      # Verify tha
1ce0: 74 20 22 74 34 22 20 62 65 67 69 6e 73 20 6f 6e  t "t4" begins on
1cf0: 20 70 61 67 65 20 33 2e 0a 20 20 20 20 23 0a 20   page 3..    #. 
1d00: 20 20 20 23 20 55 70 64 61 74 65 20 66 6f 72 20     # Update for 
1d10: 76 33 20 2d 20 74 68 65 20 66 69 72 73 74 20 74  v3 - the first t
1d20: 61 62 6c 65 20 6e 6f 77 20 62 65 67 69 6e 73 20  able now begins 
1d30: 6f 6e 20 70 61 67 65 20 32 20 6f 66 20 65 61 63  on page 2 of eac
1d40: 68 20 66 69 6c 65 2c 20 6e 6f 74 20 33 2e 0a 20  h file, not 3.. 
1d50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1d60: 20 20 20 53 45 4c 45 43 54 20 72 6f 6f 74 70 61     SELECT rootpa
1d70: 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  ge FROM sqlite_t
1d80: 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45  emp_master WHERE
1d90: 20 6e 61 6d 65 3d 27 74 34 27 3b 0a 20 20 20 20   name='t4';.    
1da0: 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74  }.  } {2}.  do_t
1db0: 65 73 74 20 69 6e 73 65 72 74 2d 35 2e 36 20 7b  est insert-5.6 {
1dc0: 0a 20 20 20 20 23 20 54 68 69 73 20 73 68 6f 75  .    # This shou
1dd0: 6c 64 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  ld not use an in
1de0: 74 65 72 6d 65 64 69 61 74 65 20 74 65 6d 70 6f  termediate tempo
1df0: 72 61 72 79 20 74 61 62 6c 65 2e 0a 20 20 20 20  rary table..    
1e00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1e10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 53  INSERT INTO t4 S
1e20: 45 4c 45 43 54 20 6f 6e 65 20 46 52 4f 4d 20 74  ELECT one FROM t
1e30: 65 73 74 31 20 57 48 45 52 45 20 74 68 72 65 65  est1 WHERE three
1e40: 3d 37 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  =7;.      SELECT
1e50: 20 2a 20 46 52 4f 4d 20 74 34 0a 20 20 20 20 7d   * FROM t4.    }
1e60: 0a 20 20 7d 20 7b 31 20 32 20 38 7d 0a 20 20 69  .  } {1 2 8}.  i
1e70: 66 63 61 70 61 62 6c 65 20 7b 65 78 70 6c 61 69  fcapable {explai
1e80: 6e 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  n} {.    do_test
1e90: 20 69 6e 73 65 72 74 2d 35 2e 37 20 7b 0a 20 20   insert-5.7 {.  
1ea0: 20 20 20 20 23 20 76 65 72 69 66 79 20 74 68 61      # verify tha
1eb0: 74 20 6e 6f 20 74 65 6d 70 6f 72 61 72 79 20 74  t no temporary t
1ec0: 61 62 6c 65 20 69 73 20 75 73 65 64 20 74 6f 20  able is used to 
1ed0: 63 6f 70 79 20 74 65 73 74 31 20 74 6f 20 74 34  copy test1 to t4
1ee0: 0a 20 20 20 20 20 20 73 65 74 20 78 20 5b 65 78  .      set x [ex
1ef0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
1f00: 45 58 50 4c 41 49 4e 20 49 4e 53 45 52 54 20 49  EXPLAIN INSERT I
1f10: 4e 54 4f 20 74 34 20 53 45 4c 45 43 54 20 6f 6e  NTO t4 SELECT on
1f20: 65 20 46 52 4f 4d 20 74 65 73 74 31 3b 0a 20 20  e FROM test1;.  
1f30: 20 20 20 20 7d 5d 0a 20 20 20 20 20 20 65 78 70      }].      exp
1f40: 72 20 7b 5b 6c 73 65 61 72 63 68 20 24 78 20 4f  r {[lsearch $x O
1f50: 70 65 6e 54 65 6d 70 5d 3e 30 7d 0a 20 20 20 20  penTemp]>0}.    
1f60: 7d 20 7b 30 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 54  } {0}.  }.}..# T
1f70: 69 63 6b 65 74 20 23 33 33 34 3a 20 20 52 45 50  icket #334:  REP
1f80: 4c 41 43 45 20 73 74 61 74 65 6d 65 6e 74 20 63  LACE statement c
1f90: 6f 72 72 75 70 74 69 6e 67 20 69 6e 64 69 63 65  orrupting indice
1fa0: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 73  s..#.do_test ins
1fb0: 65 72 74 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63  ert-6.1 {.  exec
1fc0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1fd0: 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45   TABLE t1(a INTE
1fe0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
1ff0: 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20   b UNIQUE);.    
2000: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2010: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20  ALUES(1,2);.    
2020: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2030: 41 4c 55 45 53 28 32 2c 33 29 3b 0a 20 20 20 20  ALUES(2,3);.    
2040: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
2050: 20 57 48 45 52 45 20 62 3d 32 3b 0a 20 20 7d 0a   WHERE b=2;.  }.
2060: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  } {2}.do_test in
2070: 73 65 72 74 2d 36 2e 32 20 7b 0a 20 20 65 78 65  sert-6.2 {.  exe
2080: 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 50 4c 41  csql {.    REPLA
2090: 43 45 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  CE INTO t1 VALUE
20a0: 53 28 31 2c 34 29 3b 0a 20 20 20 20 53 45 4c 45  S(1,4);.    SELE
20b0: 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45  CT b FROM t1 WHE
20c0: 52 45 20 62 3d 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  RE b=2;.  }.} {}
20d0: 0a 64 6f 5f 74 65 73 74 20 69 6e 73 65 72 74 2d  .do_test insert-
20e0: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.3 {.  execsql 
20f0: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 4f 52 20  {.    UPDATE OR 
2100: 52 45 50 4c 41 43 45 20 74 31 20 53 45 54 20 61  REPLACE t1 SET a
2110: 3d 32 20 57 48 45 52 45 20 62 3d 34 3b 0a 20 20  =2 WHERE b=4;.  
2120: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2130: 74 31 20 57 48 45 52 45 20 62 3d 34 3b 0a 20 20  t1 WHERE b=4;.  
2140: 7d 0a 7d 20 7b 32 20 34 7d 0a 64 6f 5f 74 65 73  }.} {2 4}.do_tes
2150: 74 20 69 6e 73 65 72 74 2d 36 2e 34 20 7b 0a 20  t insert-6.4 {. 
2160: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2170: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2180: 57 48 45 52 45 20 62 3d 33 3b 0a 20 20 7d 0a 7d  WHERE b=3;.  }.}
2190: 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 72   {}.ifcapable {r
21a0: 65 69 6e 64 65 78 7d 20 7b 0a 20 20 64 6f 5f 74  eindex} {.  do_t
21b0: 65 73 74 20 69 6e 73 65 72 74 2d 36 2e 37 20 7b  est insert-6.7 {
21c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 52 45 49  .    execsql REI
21d0: 4e 44 45 58 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23  NDEX.  } {}.}..#
21e0: 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 73   Test that the s
21f0: 70 65 63 69 61 6c 20 6f 70 74 69 6d 69 7a 61 74  pecial optimizat
2200: 69 6f 6e 20 66 6f 72 20 71 75 65 72 69 65 73 20  ion for queries 
2210: 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 23 20 22  of the form .# "
2220: 53 45 4c 45 43 54 20 6d 61 78 28 78 29 20 46 52  SELECT max(x) FR
2230: 4f 4d 20 74 62 6c 22 20 77 68 65 72 65 20 74 68  OM tbl" where th
2240: 65 72 65 20 69 73 20 61 6e 20 69 6e 64 65 78 20  ere is an index 
2250: 6f 6e 20 74 62 6c 28 78 29 20 77 6f 72 6b 73 20  on tbl(x) works 
2260: 77 69 74 68 20 0a 23 20 49 4e 53 45 52 54 20 73  with .# INSERT s
2270: 74 61 74 6d 65 6e 74 73 2e 0a 64 6f 5f 74 65 73  tatments..do_tes
2280: 74 20 69 6e 73 65 72 74 2d 37 2e 31 20 7b 0a 20  t insert-7.1 {. 
2290: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
22a0: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
22b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
22c0: 31 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1(a);.    INSERT
22d0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
22e0: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
22f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 29  NTO t1 VALUES(2)
2300: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
2310: 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 3b 0a  EX i1 ON t1(a);.
2320: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2330: 20 69 6e 73 65 72 74 2d 37 2e 32 20 7b 0a 20 20   insert-7.2 {.  
2340: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
2350: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
2360: 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ECT max(a) FROM 
2370: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  t1;.  }.} {}.do_
2380: 74 65 73 74 20 69 6e 73 65 72 74 2d 37 2e 33 20  test insert-7.3 
2390: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
23a0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
23b0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 32  t1;.  }.} {1 2 2
23c0: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 31 34  }..# Ticket #114
23d0: 30 3a 20 20 43 68 65 63 6b 20 66 6f 72 20 61 6e  0:  Check for an
23e0: 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 20 69   infinite loop i
23f0: 6e 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  n the algorithm 
2400: 74 68 61 74 20 74 65 73 74 73 0a 23 20 74 6f 20  that tests.# to 
2410: 73 65 65 20 69 66 20 74 68 65 20 72 69 67 68 74  see if the right
2420: 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
2430: 20 49 4e 53 45 52 54 2e 2e 2e 53 45 4c 45 43 54   INSERT...SELECT
2440: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 20   references the 
2450: 6c 65 66 74 2d 68 61 6e 64 0a 23 20 73 69 64 65  left-hand.# side
2460: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 75  ..#.ifcapable su
2470: 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65  bquery {.  do_te
2480: 73 74 20 69 6e 73 65 72 74 2d 38 2e 31 20 7b 0a  st insert-8.1 {.
2490: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
24a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
24b0: 74 33 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  t3 SELECT * FROM
24c0: 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   (SELECT * FROM 
24d0: 74 33 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  t3 UNION ALL SEL
24e0: 45 43 54 20 31 2c 32 2c 33 29 0a 20 20 20 20 7d  ECT 1,2,3).    }
24f0: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 0a 69 6e 74 65  .  } {}.}...inte
2500: 67 72 69 74 79 5f 63 68 65 63 6b 20 69 6e 73 65  grity_check inse
2510: 72 74 2d 39 39 2e 30 0a 0a 66 69 6e 69 73 68 5f  rt-99.0..finish_
2520: 74 65 73 74 0a                                   test.