/ Hex Artifact Content
Login

Artifact 997d6f185f138229dc4251583a1d04816423dddc2fc034871a01aeb1d728cb39:


0000: 23 20 32 30 30 34 20 4e 6f 76 65 6d 62 65 72 20  # 2004 November 
0010: 31 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  12.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  e AUTOINCREMENT 
01e0: 66 65 61 74 75 72 65 73 2e 0a 23 0a 23 20 24 49  features..#.# $I
01f0: 64 3a 20 61 75 74 6f 69 6e 63 2e 74 65 73 74 2c  d: autoinc.test,
0200: 76 20 31 2e 31 34 20 32 30 30 39 2f 30 36 2f 32  v 1.14 2009/06/2
0210: 33 20 32 30 3a 32 38 3a 35 34 20 64 72 68 20 45  3 20:28:54 drh E
0220: 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74  xp $.#..set test
0230: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0240: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0250: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0260: 2e 74 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65  .tcl.set testpre
0270: 66 69 78 20 61 75 74 6f 69 6e 63 0a 0a 23 20 49  fix autoinc..# I
0280: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  f the library is
0290: 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69   not compiled wi
02a0: 74 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  th autoincrement
02b0: 20 73 75 70 70 6f 72 74 20 74 68 65 6e 0a 23 20   support then.# 
02c0: 73 6b 69 70 20 61 6c 6c 20 74 65 73 74 73 20 69  skip all tests i
02d0: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 23 0a 69  n this file..#.i
02e0: 66 63 61 70 61 62 6c 65 20 7b 21 61 75 74 6f 69  fcapable {!autoi
02f0: 6e 63 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  nc} {.  finish_t
0300: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0310: 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e  if {[permutation
0320: 5d 3d 3d 22 69 6e 6d 65 6d 6f 72 79 5f 6a 6f 75  ]=="inmemory_jou
0330: 72 6e 61 6c 22 7d 20 7b 0a 20 20 66 69 6e 69 73  rnal"} {.  finis
0340: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0350: 7d 0a 0a 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f  }..sqlite3_db_co
0360: 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 64  nfig_lookaside d
0370: 62 20 30 20 30 20 30 0a 0a 23 20 54 68 65 20 64  b 0 0 0..# The d
0380: 61 74 61 62 61 73 65 20 69 73 20 69 6e 69 74 69  atabase is initi
0390: 61 6c 6c 79 20 65 6d 70 74 79 2e 0a 23 0a 64 6f  ally empty..#.do
03a0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 31 2e  _test autoinc-1.
03b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
03c0: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
03d0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
03e0: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
03f0: 61 62 6c 65 27 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  able';.  }.} {}.
0400: 0a 23 20 41 64 64 20 61 20 74 61 62 6c 65 20 77  .# Add a table w
0410: 69 74 68 20 74 68 65 20 41 55 54 4f 49 4e 43 52  ith the AUTOINCR
0420: 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 20 20  EMENT feature.  
0430: 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 0a  Verify that the.
0440: 23 20 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43  # SQLITE_SEQUENC
0450: 45 20 74 61 62 6c 65 20 67 65 74 73 20 63 72 65  E table gets cre
0460: 61 74 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ated..#.do_test 
0470: 61 75 74 6f 69 6e 63 2d 31 2e 32 20 7b 0a 20 20  autoinc-1.2 {.  
0480: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
0490: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
04a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
04b0: 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  KEY AUTOINCREMEN
04c0: 54 2c 20 79 29 3b 0a 20 20 20 20 53 45 4c 45 43  T, y);.    SELEC
04d0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
04e0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
04f0: 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20  type='table';.  
0500: 7d 0a 7d 20 7b 74 31 20 73 71 6c 69 74 65 5f 73  }.} {t1 sqlite_s
0510: 65 71 75 65 6e 63 65 7d 0a 0a 23 20 54 68 65 20  equence}..# The 
0520: 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43 45 20  SQLITE_SEQUENCE 
0530: 74 61 62 6c 65 20 69 73 20 69 6e 69 74 69 61 6c  table is initial
0540: 6c 79 20 65 6d 70 74 79 0a 23 0a 64 6f 5f 74 65  ly empty.#.do_te
0550: 73 74 20 61 75 74 6f 69 6e 63 2d 31 2e 33 20 7b  st autoinc-1.3 {
0560: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0570: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
0580: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a  qlite_sequence;.
0590: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
05a0: 20 61 75 74 6f 69 6e 63 2d 31 2e 33 2e 31 20 7b   autoinc-1.3.1 {
05b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
05c0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73    CREATE INDEX s
05d0: 65 71 69 64 78 20 4f 4e 20 73 71 6c 69 74 65 5f  eqidx ON sqlite_
05e0: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 29 0a 20  sequence(name). 
05f0: 20 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 73   }.} {1 {table s
0600: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 6d  qlite_sequence m
0610: 61 79 20 6e 6f 74 20 62 65 20 69 6e 64 65 78 65  ay not be indexe
0620: 64 7d 7d 0a 0a 23 20 43 6c 6f 73 65 20 61 6e 64  d}}..# Close and
0630: 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61 74 61   reopen the data
0640: 62 61 73 65 2e 20 20 56 65 72 69 66 79 20 74 68  base.  Verify th
0650: 61 74 20 65 76 65 72 79 74 68 69 6e 67 20 69 73  at everything is
0660: 20 73 74 69 6c 6c 20 74 68 65 72 65 2e 0a 23 0a   still there..#.
0670: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
0680: 31 2e 34 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  1.4 {.  db close
0690: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
06a0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
06b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
06c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
06d0: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  nce;.  }.} {}..#
06e0: 20 57 65 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f   We are not allo
06f0: 77 65 64 20 74 6f 20 64 72 6f 70 20 74 68 65 20  wed to drop the 
0700: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
0710: 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  table..#.do_test
0720: 20 61 75 74 6f 69 6e 63 2d 31 2e 35 20 7b 0a 20   autoinc-1.5 {. 
0730: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
0740: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71  TABLE sqlite_seq
0750: 75 65 6e 63 65 7d 0a 7d 20 7b 31 20 7b 74 61 62  uence}.} {1 {tab
0760: 6c 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  le sqlite_sequen
0770: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 64 72  ce may not be dr
0780: 6f 70 70 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  opped}}.do_test 
0790: 61 75 74 6f 69 6e 63 2d 31 2e 36 20 7b 0a 20 20  autoinc-1.6 {.  
07a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
07b0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
07c0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
07d0: 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74  pe='table'}.} {t
07e0: 31 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  1 sqlite_sequenc
07f0: 65 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 6e 20  e}..# Insert an 
0800: 65 6e 74 72 69 65 73 20 69 6e 74 6f 20 74 68 65  entries into the
0810: 20 74 31 20 74 61 62 6c 65 20 61 6e 64 20 6d 61   t1 table and ma
0820: 6b 65 20 73 75 72 65 20 74 68 65 20 6c 61 72 67  ke sure the larg
0830: 65 73 74 20 6b 65 79 0a 23 20 69 73 20 61 6c 77  est key.# is alw
0840: 61 79 73 20 72 65 63 6f 72 64 65 64 20 69 6e 20  ays recorded in 
0850: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
0860: 6e 63 65 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f  nce table..#.do_
0870: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 31  test autoinc-2.1
0880: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0890: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
08a0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
08b0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
08c0: 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 20 7b 0a  t autoinc-2.2 {.
08d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
08e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
08f0: 41 4c 55 45 53 28 31 32 2c 33 34 29 3b 0a 20 20  ALUES(12,34);.  
0900: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0910: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
0920: 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 7d 0a 64  .  }.} {t1 12}.d
0930: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
0940: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
0950: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0960: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 33 29   t1 VALUES(1,23)
0970: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0980: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
0990: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31  nce;.  }.} {t1 1
09a0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69  2}.do_test autoi
09b0: 6e 63 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73  nc-2.4 {.  execs
09c0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
09d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
09e0: 32 33 2c 34 35 36 29 3b 0a 20 20 20 20 53 45 4c  23,456);.    SEL
09f0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0a00: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
0a10: 7d 20 7b 74 31 20 31 32 33 7d 0a 64 6f 5f 74 65  } {t1 123}.do_te
0a20: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 35 20 7b  st autoinc-2.5 {
0a30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0a50: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 35 36 37 29  VALUES(NULL,567)
0a60: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0a70: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
0a80: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31  nce;.  }.} {t1 1
0a90: 32 34 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  24}.do_test auto
0aa0: 69 6e 63 2d 32 2e 36 20 7b 0a 20 20 65 78 65 63  inc-2.6 {.  exec
0ab0: 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  sql {.    DELETE
0ac0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
0ad0: 3d 35 36 37 3b 0a 20 20 20 20 53 45 4c 45 43 54  =567;.    SELECT
0ae0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73   * FROM sqlite_s
0af0: 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b  equence;.  }.} {
0b00: 74 31 20 31 32 34 7d 0a 64 6f 5f 74 65 73 74 20  t1 124}.do_test 
0b10: 61 75 74 6f 69 6e 63 2d 32 2e 37 20 7b 0a 20 20  autoinc-2.7 {.  
0b20: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
0b30: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0b40: 55 45 53 28 4e 55 4c 4c 2c 35 36 37 29 3b 0a 20  UES(NULL,567);. 
0b50: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0b60: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
0b70: 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 35 7d  ;.  }.} {t1 125}
0b80: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
0b90: 2d 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.8 {.  execsql
0ba0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
0bb0: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
0bc0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
0bd0: 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20  sequence;.  }.} 
0be0: 7b 74 31 20 31 32 35 7d 0a 64 6f 5f 74 65 73 74  {t1 125}.do_test
0bf0: 20 61 75 74 6f 69 6e 63 2d 32 2e 39 20 7b 0a 20   autoinc-2.9 {. 
0c00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
0c10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0c20: 4c 55 45 53 28 31 32 2c 33 34 29 3b 0a 20 20 20  LUES(12,34);.   
0c30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
0c40: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a  qlite_sequence;.
0c50: 20 20 7d 0a 7d 20 7b 74 31 20 31 32 35 7d 0a 64    }.} {t1 125}.d
0c60: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
0c70: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
0c80: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
0c90: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 32 35 2c  O t1 VALUES(125,
0ca0: 34 35 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  456);.    SELECT
0cb0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73   * FROM sqlite_s
0cc0: 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b  equence;.  }.} {
0cd0: 74 31 20 31 32 35 7d 0a 64 6f 5f 74 65 73 74 20  t1 125}.do_test 
0ce0: 61 75 74 6f 69 6e 63 2d 32 2e 31 31 20 7b 0a 20  autoinc-2.11 {. 
0cf0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
0d00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0d10: 4c 55 45 53 28 2d 31 32 33 34 35 36 37 2c 2d 31  LUES(-1234567,-1
0d20: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
0d30: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75  FROM sqlite_sequ
0d40: 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20  ence;.  }.} {t1 
0d50: 31 32 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  125}.do_test aut
0d60: 6f 69 6e 63 2d 32 2e 31 32 20 7b 0a 20 20 65 78  oinc-2.12 {.  ex
0d70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
0d80: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0d90: 53 28 32 33 34 2c 35 36 37 38 29 3b 0a 20 20 20  S(234,5678);.   
0da0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
0db0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a  qlite_sequence;.
0dc0: 20 20 7d 0a 7d 20 7b 74 31 20 32 33 34 7d 0a 64    }.} {t1 234}.d
0dd0: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
0de0: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
0df0: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
0e00: 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t1;.    INSERT
0e10: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0e20: 4e 55 4c 4c 2c 31 29 3b 0a 20 20 20 20 53 45 4c  NULL,1);.    SEL
0e30: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0e40: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
0e50: 7d 20 7b 74 31 20 32 33 35 7d 0a 64 6f 5f 74 65  } {t1 235}.do_te
0e60: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 31 34 20  st autoinc-2.14 
0e70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0e80: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0e90: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20 31  t1;.  }.} {235 1
0ea0: 7d 0a 0a 23 20 4d 61 6e 75 61 6c 6c 79 20 63 68  }..# Manually ch
0eb0: 61 6e 67 65 20 74 68 65 20 61 75 74 6f 69 6e 63  ange the autoinc
0ec0: 72 65 6d 65 6e 74 20 76 61 6c 75 65 73 20 69 6e  rement values in
0ed0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
0ee0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  ..#.do_test auto
0ef0: 69 6e 63 2d 32 2e 32 30 20 7b 0a 20 20 65 78 65  inc-2.20 {.  exe
0f00: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
0f10: 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  E sqlite_sequenc
0f20: 65 20 53 45 54 20 73 65 71 3d 31 32 33 34 20 57  e SET seq=1234 W
0f30: 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 27 3b 0a  HERE name='t1';.
0f40: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0f50: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 32  t1 VALUES(NULL,2
0f60: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
0f70: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
0f80: 32 33 35 20 31 20 31 32 33 35 20 32 7d 0a 64 6f  235 1 1235 2}.do
0f90: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e  _test autoinc-2.
0fa0: 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  21 {.  execsql {
0fb0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0fc0: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
0fd0: 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32  ce;.  }.} {t1 12
0fe0: 33 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  35}.do_test auto
0ff0: 69 6e 63 2d 32 2e 32 32 20 7b 0a 20 20 65 78 65  inc-2.22 {.  exe
1000: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
1010: 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  E sqlite_sequenc
1020: 65 20 53 45 54 20 73 65 71 3d 4e 55 4c 4c 20 57  e SET seq=NULL W
1030: 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 27 3b 0a  HERE name='t1';.
1040: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1050: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 33  t1 VALUES(NULL,3
1060: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
1070: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
1080: 32 33 35 20 31 20 31 32 33 35 20 32 20 31 32 33  235 1 1235 2 123
1090: 36 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  6 3}.do_test aut
10a0: 6f 69 6e 63 2d 32 2e 32 33 20 7b 0a 20 20 65 78  oinc-2.23 {.  ex
10b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
10c0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
10d0: 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d  _sequence;.  }.}
10e0: 20 7b 74 31 20 31 32 33 36 7d 0a 64 6f 5f 74 65   {t1 1236}.do_te
10f0: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 34 20  st autoinc-2.24 
1100: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1110: 20 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f    UPDATE sqlite_
1120: 73 65 71 75 65 6e 63 65 20 53 45 54 20 73 65 71  sequence SET seq
1130: 3d 27 61 2d 73 74 72 69 6e 67 27 20 57 48 45 52  ='a-string' WHER
1140: 45 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20 20  E name='t1';.   
1150: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1160: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 34 29 3b 0a  VALUES(NULL,4);.
1170: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1180: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35  M t1;.  }.} {235
1190: 20 31 20 31 32 33 35 20 32 20 31 32 33 36 20 33   1 1235 2 1236 3
11a0: 20 31 32 33 37 20 34 7d 0a 64 6f 5f 74 65 73 74   1237 4}.do_test
11b0: 20 61 75 74 6f 69 6e 63 2d 32 2e 32 35 20 7b 0a   autoinc-2.25 {.
11c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
11d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
11e0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20  lite_sequence;. 
11f0: 20 7d 0a 7d 20 7b 74 31 20 31 32 33 37 7d 0a 64   }.} {t1 1237}.d
1200: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
1210: 2e 32 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .26 {.  execsql 
1220: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
1230: 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  M sqlite_sequenc
1240: 65 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31  e WHERE name='t1
1250: 27 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ';.    INSERT IN
1260: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
1270: 4c 2c 35 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  L,5);.    SELECT
1280: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   * FROM t1;.  }.
1290: 7d 20 7b 32 33 35 20 31 20 31 32 33 35 20 32 20  } {235 1 1235 2 
12a0: 31 32 33 36 20 33 20 31 32 33 37 20 34 20 31 32  1236 3 1237 4 12
12b0: 33 38 20 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75  38 5}.do_test au
12c0: 74 6f 69 6e 63 2d 32 2e 32 37 20 7b 0a 20 20 65  toinc-2.27 {.  e
12d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
12e0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
12f0: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
1300: 7d 20 7b 74 31 20 31 32 33 38 7d 0a 64 6f 5f 74  } {t1 1238}.do_t
1310: 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 38  est autoinc-2.28
1320: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1330: 20 20 20 55 50 44 41 54 45 20 73 71 6c 69 74 65     UPDATE sqlite
1340: 5f 73 65 71 75 65 6e 63 65 20 53 45 54 20 73 65  _sequence SET se
1350: 71 3d 27 2d 31 32 33 34 35 36 37 38 39 30 31 32  q='-123456789012
1360: 33 34 35 36 37 38 39 30 27 0a 20 20 20 20 20 20  34567890'.      
1370: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 27 3b  WHERE name='t1';
1380: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1390: 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t1 VALUES(NULL,
13a0: 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  6);.    SELECT *
13b0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
13c0: 7b 32 33 35 20 31 20 31 32 33 35 20 32 20 31 32  {235 1 1235 2 12
13d0: 33 36 20 33 20 31 32 33 37 20 34 20 31 32 33 38  36 3 1237 4 1238
13e0: 20 35 20 31 32 33 39 20 36 7d 0a 64 6f 5f 74 65   5 1239 6}.do_te
13f0: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 39 20  st autoinc-2.29 
1400: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1410: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1420: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
1430: 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 33 39 7d  .  }.} {t1 1239}
1440: 0a 0a 23 20 54 65 73 74 20 6d 75 6c 74 69 2d 72  ..# Test multi-r
1450: 6f 77 20 69 6e 73 65 72 74 73 0a 23 0a 64 6f 5f  ow inserts.#.do_
1460: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 35  test autoinc-2.5
1470: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
1480: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1490: 74 31 20 57 48 45 52 45 20 79 3e 3d 33 3b 0a 20  t1 WHERE y>=3;. 
14a0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
14b0: 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 79  1 SELECT NULL, y
14c0: 2b 32 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  +2 FROM t1;.    
14d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
14e0: 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20 31 20 31  ;.  }.} {235 1 1
14f0: 32 33 35 20 32 20 31 32 34 30 20 33 20 31 32 34  235 2 1240 3 124
1500: 31 20 34 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  1 4}.do_test aut
1510: 6f 69 6e 63 2d 32 2e 35 31 20 7b 0a 20 20 65 78  oinc-2.51 {.  ex
1520: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1530: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
1540: 5f 73 65 71 75 65 6e 63 65 0a 20 20 7d 0a 7d 20  _sequence.  }.} 
1550: 7b 74 31 20 31 32 34 31 7d 0a 0a 69 66 63 61 70  {t1 1241}..ifcap
1560: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
1570: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
1580: 32 2e 35 32 20 7b 0a 20 20 20 20 65 78 65 63 73  2.52 {.    execs
1590: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
15a0: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 20  E TEMP TABLE t2 
15b0: 41 53 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d  AS SELECT y FROM
15c0: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65   t1;.    }.    e
15d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49  xecsql {.      I
15e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
15f0: 4c 45 43 54 20 4e 55 4c 4c 2c 20 79 2b 34 20 46  LECT NULL, y+4 F
1600: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 20 20 53 45  ROM t2;.      SE
1610: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
1620: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 33 35 20 31      }.  } {235 1
1630: 20 31 32 33 35 20 32 20 31 32 34 30 20 33 20 31   1235 2 1240 3 1
1640: 32 34 31 20 34 20 31 32 34 32 20 35 20 31 32 34  241 4 1242 5 124
1650: 33 20 36 20 31 32 34 34 20 37 20 31 32 34 35 20  3 6 1244 7 1245 
1660: 38 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  8}.  do_test aut
1670: 6f 69 6e 63 2d 32 2e 35 33 20 7b 0a 20 20 20 20  oinc-2.53 {.    
1680: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1690: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
16a0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 0a 20 20  lite_sequence.  
16b0: 20 20 7d 0a 20 20 7d 20 7b 74 31 20 31 32 34 35    }.  } {t1 1245
16c0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f  }.  do_test auto
16d0: 69 6e 63 2d 32 2e 35 34 20 7b 0a 20 20 20 20 65  inc-2.54 {.    e
16e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  xecsql {.      D
16f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20  ELETE FROM t1;. 
1700: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1710: 20 74 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c   t1 SELECT NULL,
1720: 20 79 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20   y FROM t2;.    
1730: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1740: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  t1;.    }.  } {1
1750: 32 34 36 20 31 20 31 32 34 37 20 32 20 31 32 34  246 1 1247 2 124
1760: 38 20 33 20 31 32 34 39 20 34 7d 0a 20 20 64 6f  8 3 1249 4}.  do
1770: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e  _test autoinc-2.
1780: 35 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  55 {.    execsql
1790: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
17a0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
17b0: 71 75 65 6e 63 65 0a 20 20 20 20 7d 0a 20 20 7d  quence.    }.  }
17c0: 20 7b 74 31 20 31 32 34 39 7d 0a 7d 0a 0a 23 20   {t1 1249}.}..# 
17d0: 43 72 65 61 74 65 20 6d 75 6c 74 69 70 6c 65 20  Create multiple 
17e0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
17f0: 62 6c 65 73 2e 20 20 4d 61 6b 65 20 73 75 72 65  bles.  Make sure
1800: 20 61 6c 6c 20 73 65 71 75 65 6e 63 65 73 20 61   all sequences a
1810: 72 65 0a 23 20 74 72 61 63 6b 65 64 20 73 65 70  re.# tracked sep
1820: 61 72 61 74 65 6c 79 20 61 6e 64 20 64 6f 20 6e  arately and do n
1830: 6f 74 20 69 6e 74 65 72 66 65 72 65 20 77 69 74  ot interfere wit
1840: 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 23  h one another..#
1850: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
1860: 2d 32 2e 37 30 20 7b 0a 20 20 63 61 74 63 68 73  -2.70 {.  catchs
1870: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
1880: 42 4c 45 20 74 32 3b 0a 20 20 7d 0a 20 20 65 78  BLE t2;.  }.  ex
1890: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
18a0: 54 45 20 54 41 42 4c 45 20 74 32 28 64 2c 20 65  TE TABLE t2(d, e
18b0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
18c0: 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45   KEY AUTOINCREME
18d0: 4e 54 2c 20 66 29 3b 0a 20 20 20 20 49 4e 53 45  NT, f);.    INSE
18e0: 52 54 20 49 4e 54 4f 20 74 32 28 64 29 20 56 41  RT INTO t2(d) VA
18f0: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 53 45 4c  LUES(1);.    SEL
1900: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
1910: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
1920: 7d 20 5b 69 66 63 61 70 61 62 6c 65 20 74 65 6d  } [ifcapable tem
1930: 70 64 62 20 7b 6c 69 73 74 20 74 31 20 31 32 34  pdb {list t1 124
1940: 39 20 74 32 20 31 7d 20 65 6c 73 65 20 7b 6c 69  9 t2 1} else {li
1950: 73 74 20 74 31 20 31 32 34 31 20 74 32 20 31 7d  st t1 1241 t2 1}
1960: 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  ].do_test autoin
1970: 63 2d 32 2e 37 31 20 7b 0a 20 20 65 78 65 63 73  c-2.71 {.  execs
1980: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
1990: 49 4e 54 4f 20 74 32 28 64 29 20 56 41 4c 55 45  INTO t2(d) VALUE
19a0: 53 28 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  S(2);.    SELECT
19b0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73   * FROM sqlite_s
19c0: 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 5b  equence;.  }.} [
19d0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
19e0: 20 7b 6c 69 73 74 20 74 31 20 31 32 34 39 20 74   {list t1 1249 t
19f0: 32 20 32 7d 20 65 6c 73 65 20 7b 6c 69 73 74 20  2 2} else {list 
1a00: 74 31 20 31 32 34 31 20 74 32 20 32 7d 5d 0a 64  t1 1241 t2 2}].d
1a10: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
1a20: 2e 37 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .72 {.  execsql 
1a30: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1a40: 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 31  O t1(x) VALUES(1
1a50: 30 30 30 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  0000);.    SELEC
1a60: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
1a70: 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20  sequence;.  }.} 
1a80: 7b 74 31 20 31 30 30 30 30 20 74 32 20 32 7d 0a  {t1 10000 t2 2}.
1a90: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
1aa0: 32 2e 37 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.73 {.  execsql
1ab0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
1ac0: 42 4c 45 20 74 33 28 67 20 49 4e 54 45 47 45 52  BLE t3(g INTEGER
1ad0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54   PRIMARY KEY AUT
1ae0: 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 68 29 3b 0a  OINCREMENT, h);.
1af0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1b00: 74 33 28 68 29 20 56 41 4c 55 45 53 28 31 29 3b  t3(h) VALUES(1);
1b10: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1b20: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
1b30: 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 30  ce;.  }.} {t1 10
1b40: 30 30 30 20 74 32 20 32 20 74 33 20 31 7d 0a 64  000 t2 2 t3 1}.d
1b50: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
1b60: 2e 37 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .74 {.  execsql 
1b70: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1b80: 4f 20 74 32 28 64 2c 65 29 20 56 41 4c 55 45 53  O t2(d,e) VALUES
1b90: 28 33 2c 31 30 30 29 3b 0a 20 20 20 20 53 45 4c  (3,100);.    SEL
1ba0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
1bb0: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
1bc0: 7d 20 7b 74 31 20 31 30 30 30 30 20 74 32 20 31  } {t1 10000 t2 1
1bd0: 30 30 20 74 33 20 31 7d 0a 0a 0a 23 20 57 68 65  00 t3 1}...# Whe
1be0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
1bf0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
1c00: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
1c10: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 6e  corresponding en
1c20: 74 72 79 0a 23 20 69 6e 20 74 68 65 20 53 51 4c  try.# in the SQL
1c30: 49 54 45 5f 53 45 51 55 45 4e 43 45 20 74 61 62  ITE_SEQUENCE tab
1c40: 6c 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62  le should also b
1c50: 65 20 64 65 6c 65 74 65 64 2e 20 20 42 75 74 20  e deleted.  But 
1c60: 74 68 65 20 53 51 4c 49 54 45 5f 53 45 51 55 45  the SQLITE_SEQUE
1c70: 4e 43 45 0a 23 20 74 61 62 6c 65 20 69 74 73 65  NCE.# table itse
1c80: 6c 66 20 73 68 6f 75 6c 64 20 72 65 6d 61 69 6e  lf should remain
1c90: 20 62 65 68 69 6e 64 2e 0a 23 0a 64 6f 5f 74 65   behind..#.do_te
1ca0: 73 74 20 61 75 74 6f 69 6e 63 2d 33 2e 31 20 7b  st autoinc-3.1 {
1cb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1cc0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
1cd0: 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 0a 7d 20  ite_sequence}.} 
1ce0: 7b 74 31 20 74 32 20 74 33 7d 0a 64 6f 5f 74 65  {t1 t2 t3}.do_te
1cf0: 73 74 20 61 75 74 6f 69 6e 63 2d 33 2e 32 20 7b  st autoinc-3.2 {
1d00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1d10: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
1d20: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
1d30: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75  FROM sqlite_sequ
1d40: 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 32 20  ence;.  }.} {t2 
1d50: 74 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  t3}.do_test auto
1d60: 69 6e 63 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63  inc-3.3 {.  exec
1d70: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
1d80: 41 42 4c 45 20 74 33 3b 0a 20 20 20 20 53 45 4c  ABLE t3;.    SEL
1d90: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
1da0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20  lite_sequence;. 
1db0: 20 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73   }.} {t2}.do_tes
1dc0: 74 20 61 75 74 6f 69 6e 63 2d 33 2e 34 20 7b 0a  t autoinc-3.4 {.
1dd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1de0: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20  DROP TABLE t2;. 
1df0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
1e00: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
1e10: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  nce;.  }.} {}..#
1e20: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6f   AUTOINCREMENT o
1e30: 6e 20 54 45 4d 50 20 74 61 62 6c 65 73 2e 0a 23  n TEMP tables..#
1e40: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
1e50: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
1e60: 74 6f 69 6e 63 2d 34 2e 31 20 7b 0a 20 20 20 20  toinc-4.1 {.    
1e70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1e80: 53 45 4c 45 43 54 20 31 2c 20 6e 61 6d 65 20 46  SELECT 1, name F
1e90: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1ea0: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
1eb0: 62 6c 65 27 3b 0a 20 20 20 20 20 20 53 45 4c 45  ble';.      SELE
1ec0: 43 54 20 32 2c 20 6e 61 6d 65 20 46 52 4f 4d 20  CT 2, name FROM 
1ed0: 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74  temp.sqlite_mast
1ee0: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
1ef0: 61 62 6c 65 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  able';.    }.  }
1f00: 20 7b 31 20 73 71 6c 69 74 65 5f 73 65 71 75 65   {1 sqlite_seque
1f10: 6e 63 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  nce}.  do_test a
1f20: 75 74 6f 69 6e 63 2d 34 2e 32 20 7b 0a 20 20 20  utoinc-4.2 {.   
1f30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1f40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
1f50: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
1f60: 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45  RY KEY AUTOINCRE
1f70: 4d 45 4e 54 2c 20 79 29 3b 0a 20 20 20 20 20 20  MENT, y);.      
1f80: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
1f90: 45 20 74 33 28 61 20 49 4e 54 45 47 45 52 20 50  E t3(a INTEGER P
1fa0: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
1fb0: 4e 43 52 45 4d 45 4e 54 2c 20 62 29 3b 0a 20 20  NCREMENT, b);.  
1fc0: 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20 6e 61      SELECT 1, na
1fd0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
1fe0: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
1ff0: 3d 27 74 61 62 6c 65 27 3b 0a 20 20 20 20 20 20  ='table';.      
2000: 53 45 4c 45 43 54 20 32 2c 20 6e 61 6d 65 20 46  SELECT 2, name F
2010: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
2020: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
2030: 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20 20 20 7d  e='table';.    }
2040: 0a 20 20 7d 20 7b 31 20 73 71 6c 69 74 65 5f 73  .  } {1 sqlite_s
2050: 65 71 75 65 6e 63 65 20 31 20 74 31 20 32 20 74  equence 1 t1 2 t
2060: 33 20 32 20 73 71 6c 69 74 65 5f 73 65 71 75 65  3 2 sqlite_seque
2070: 6e 63 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  nce}.  do_test a
2080: 75 74 6f 69 6e 63 2d 34 2e 33 20 7b 0a 20 20 20  utoinc-4.3 {.   
2090: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
20a0: 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f   SELECT 1, * FRO
20b0: 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65  M main.sqlite_se
20c0: 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20 53 45  quence;.      SE
20d0: 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74  LECT 2, * FROM t
20e0: 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  emp.sqlite_seque
20f0: 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  nce;.    }.  } {
2100: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f  }.  do_test auto
2110: 69 6e 63 2d 34 2e 34 20 7b 0a 20 20 20 20 65 78  inc-4.4 {.    ex
2120: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e  ecsql {.      IN
2130: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
2140: 55 45 53 28 31 30 2c 31 29 3b 0a 20 20 20 20 20  UES(10,1);.     
2150: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
2160: 56 41 4c 55 45 53 28 32 30 2c 32 29 3b 0a 20 20  VALUES(20,2);.  
2170: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2180: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 33  t1 VALUES(NULL,3
2190: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
21a0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e  INTO t3 VALUES(N
21b0: 55 4c 4c 2c 34 29 3b 0a 20 20 20 20 7d 0a 20 20  ULL,4);.    }.  
21c0: 7d 20 7b 7d 0a 20 20 0a 20 20 69 66 63 61 70 61  } {}.  .  ifcapa
21d0: 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 20  ble compound {. 
21e0: 20 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63   do_test autoinc
21f0: 2d 34 2e 34 2e 31 20 7b 0a 20 20 20 20 65 78 65  -4.4.1 {.    exe
2200: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
2210: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 55 4e  ECT * FROM t1 UN
2220: 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 2a  ION ALL SELECT *
2230: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 7d 0a   FROM t3;.    }.
2240: 20 20 7d 20 7b 31 30 20 31 20 31 31 20 33 20 32    } {10 1 11 3 2
2250: 30 20 32 20 32 31 20 34 7d 0a 20 20 7d 20 3b 23  0 2 21 4}.  } ;#
2260: 20 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f   ifcapable compo
2270: 75 6e 64 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  und.  .  do_test
2280: 20 61 75 74 6f 69 6e 63 2d 34 2e 35 20 7b 0a 20   autoinc-4.5 {. 
2290: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
22a0: 20 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46     SELECT 1, * F
22b0: 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  ROM main.sqlite_
22c0: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20  sequence;.      
22d0: 53 45 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d  SELECT 2, * FROM
22e0: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71   temp.sqlite_seq
22f0: 75 65 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  uence;.    }.  }
2300: 20 7b 31 20 74 31 20 31 31 20 32 20 74 33 20 32   {1 t1 11 2 t3 2
2310: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
2320: 6f 69 6e 63 2d 34 2e 36 20 7b 0a 20 20 20 20 65  oinc-4.6 {.    e
2330: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49  xecsql {.      I
2340: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
2350: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a  LECT * FROM t3;.
2360: 20 20 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20        SELECT 1, 
2370: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69  * FROM main.sqli
2380: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20  te_sequence;.   
2390: 20 20 20 53 45 4c 45 43 54 20 32 2c 20 2a 20 46     SELECT 2, * F
23a0: 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f  ROM temp.sqlite_
23b0: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 7d 0a  sequence;.    }.
23c0: 20 20 7d 20 7b 31 20 74 31 20 32 31 20 32 20 74    } {1 t1 21 2 t
23d0: 33 20 32 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  3 21}.  do_test 
23e0: 61 75 74 6f 69 6e 63 2d 34 2e 37 20 7b 0a 20 20  autoinc-4.7 {.  
23f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2400: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
2410: 20 53 45 4c 45 43 54 20 78 2b 31 30 30 2c 20 79   SELECT x+100, y
2420: 20 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20    FROM t1;.     
2430: 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f   SELECT 1, * FRO
2440: 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65  M main.sqlite_se
2450: 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20 53 45  quence;.      SE
2460: 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74  LECT 2, * FROM t
2470: 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  emp.sqlite_seque
2480: 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  nce;.    }.  } {
2490: 31 20 74 31 20 32 31 20 32 20 74 33 20 31 32 31  1 t1 21 2 t3 121
24a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f  }.  do_test auto
24b0: 69 6e 63 2d 34 2e 38 20 7b 0a 20 20 20 20 65 78  inc-4.8 {.    ex
24c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52  ecsql {.      DR
24d0: 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20  OP TABLE t3;.   
24e0: 20 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46     SELECT 1, * F
24f0: 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  ROM main.sqlite_
2500: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20  sequence;.      
2510: 53 45 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d  SELECT 2, * FROM
2520: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71   temp.sqlite_seq
2530: 75 65 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  uence;.    }.  }
2540: 20 7b 31 20 74 31 20 32 31 7d 0a 20 20 64 6f 5f   {1 t1 21}.  do_
2550: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 34 2e 39  test autoinc-4.9
2560: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
2570: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
2580: 4d 50 20 54 41 42 4c 45 20 74 32 28 70 20 49 4e  MP TABLE t2(p IN
2590: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
25a0: 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c  Y AUTOINCREMENT,
25b0: 20 71 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52   q);.      INSER
25c0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
25d0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
25e0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
25f0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 31 2c  .      SELECT 1,
2600: 20 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c   * FROM main.sql
2610: 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20  ite_sequence;.  
2620: 20 20 20 20 53 45 4c 45 43 54 20 32 2c 20 2a 20      SELECT 2, * 
2630: 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65  FROM temp.sqlite
2640: 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 7d  _sequence;.    }
2650: 0a 20 20 7d 20 7b 32 20 74 32 20 32 31 7d 0a 20  .  } {2 t2 21}. 
2660: 20 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63   do_test autoinc
2670: 2d 34 2e 31 30 20 7b 0a 20 20 20 20 65 78 65 63  -4.10 {.    exec
2680: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50  sql {.      DROP
2690: 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 20   TABLE t2;.     
26a0: 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f   SELECT 1, * FRO
26b0: 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65  M main.sqlite_se
26c0: 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20 53 45  quence;.      SE
26d0: 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74  LECT 2, * FROM t
26e0: 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  emp.sqlite_seque
26f0: 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  nce;.    }.  } {
2700: 7d 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  }.}..# Make sure
2710: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 77   AUTOINCREMENT w
2720: 6f 72 6b 73 20 6f 6e 20 41 54 54 41 43 48 2d 65  orks on ATTACH-e
2730: 64 20 74 61 62 6c 65 73 2e 0a 23 0a 69 66 63 61  d tables..#.ifca
2740: 70 61 62 6c 65 20 74 65 6d 70 64 62 26 26 61 74  pable tempdb&&at
2750: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
2760: 20 61 75 74 6f 69 6e 63 2d 35 2e 31 20 7b 0a 20   autoinc-5.1 {. 
2770: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
2780: 65 73 74 32 2e 64 62 0a 20 20 20 20 66 6f 72 63  est2.db.    forc
2790: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
27a0: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c  -journal.    sql
27b0: 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64  ite3 db2 test2.d
27c0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
27d0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
27e0: 4c 45 20 74 34 28 6d 20 49 4e 54 45 47 45 52 20  LE t4(m INTEGER 
27f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f  PRIMARY KEY AUTO
2800: 49 4e 43 52 45 4d 45 4e 54 2c 20 6e 29 3b 0a 20  INCREMENT, n);. 
2810: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
2820: 45 20 74 35 28 6f 2c 20 70 20 49 4e 54 45 47 45  E t5(o, p INTEGE
2830: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
2840: 54 4f 49 4e 43 52 45 4d 45 4e 54 29 3b 0a 20 20  TOINCREMENT);.  
2850: 20 20 7d 20 64 62 32 3b 0a 20 20 20 20 65 78 65    } db2;.    exe
2860: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
2870: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 61  ACH 'test2.db' a
2880: 73 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c  s aux;.      SEL
2890: 45 43 54 20 31 2c 20 2a 20 46 52 4f 4d 20 6d 61  ECT 1, * FROM ma
28a0: 69 6e 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  in.sqlite_sequen
28b0: 63 65 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  ce;.      SELECT
28c0: 20 32 2c 20 2a 20 46 52 4f 4d 20 74 65 6d 70 2e   2, * FROM temp.
28d0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
28e0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 33 2c  .      SELECT 3,
28f0: 20 2a 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c 69   * FROM aux.sqli
2900: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20  te_sequence;.   
2910: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
2920: 65 73 74 20 61 75 74 6f 69 6e 63 2d 35 2e 32 20  est autoinc-5.2 
2930: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
2940: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2950: 4f 20 74 34 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t4 VALUES(NULL
2960: 2c 31 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  ,1);.      SELEC
2970: 54 20 31 2c 20 2a 20 46 52 4f 4d 20 6d 61 69 6e  T 1, * FROM main
2980: 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  .sqlite_sequence
2990: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 32  ;.      SELECT 2
29a0: 2c 20 2a 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71  , * FROM temp.sq
29b0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20  lite_sequence;. 
29c0: 20 20 20 20 20 53 45 4c 45 43 54 20 33 2c 20 2a       SELECT 3, *
29d0: 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c 69 74 65   FROM aux.sqlite
29e0: 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 7d  _sequence;.    }
29f0: 0a 20 20 7d 20 7b 33 20 74 34 20 31 7d 0a 20 20  .  } {3 t4 1}.  
2a00: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
2a10: 35 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.3 {.    execsq
2a20: 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  l {.      INSERT
2a30: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
2a40: 31 30 30 2c 32 30 30 29 3b 0a 20 20 20 20 20 20  100,200);.      
2a50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
2a60: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 0a 20 20  lite_sequence.  
2a70: 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 74 34 20    } db2.  } {t4 
2a80: 31 20 74 35 20 32 30 30 7d 0a 20 20 64 6f 5f 74  1 t5 200}.  do_t
2a90: 65 73 74 20 61 75 74 6f 69 6e 63 2d 35 2e 34 20  est autoinc-5.4 
2aa0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
2ab0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20        SELECT 1, 
2ac0: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69  * FROM main.sqli
2ad0: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20  te_sequence;.   
2ae0: 20 20 20 53 45 4c 45 43 54 20 32 2c 20 2a 20 46     SELECT 2, * F
2af0: 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f  ROM temp.sqlite_
2b00: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 20 20  sequence;.      
2b10: 53 45 4c 45 43 54 20 33 2c 20 2a 20 46 52 4f 4d  SELECT 3, * FROM
2b20: 20 61 75 78 2e 73 71 6c 69 74 65 5f 73 65 71 75   aux.sqlite_sequ
2b30: 65 6e 63 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ence;.    }.  } 
2b40: 7b 33 20 74 34 20 31 20 33 20 74 35 20 32 30 30  {3 t4 1 3 t5 200
2b50: 7d 0a 7d 0a 0a 23 20 52 65 71 75 69 72 65 6d 65  }.}..# Requireme
2b60: 6e 74 20 52 45 51 30 30 33 31 30 3a 20 20 4d 61  nt REQ00310:  Ma
2b70: 6b 65 20 73 75 72 65 20 61 6e 20 69 6e 73 65 72  ke sure an inser
2b80: 74 20 66 61 69 6c 73 20 69 66 20 74 68 65 20 73  t fails if the s
2b90: 65 71 75 65 6e 63 65 20 69 73 0a 23 20 61 6c 72  equence is.# alr
2ba0: 65 61 64 79 20 61 74 20 69 74 73 20 6d 61 78 69  eady at its maxi
2bb0: 6d 75 6d 20 76 61 6c 75 65 2e 0a 23 0a 69 66 63  mum value..#.ifc
2bc0: 61 70 61 62 6c 65 20 7b 72 6f 77 69 64 33 32 7d  apable {rowid32}
2bd0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
2be0: 6f 69 6e 63 2d 36 2e 31 20 7b 0a 20 20 20 20 65  oinc-6.1 {.    e
2bf0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
2c00: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 76  REATE TABLE t6(v
2c10: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2c20: 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45   KEY AUTOINCREME
2c30: 4e 54 2c 20 77 29 3b 0a 20 20 20 20 20 20 49 4e  NT, w);.      IN
2c40: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
2c50: 55 45 53 28 32 31 34 37 34 38 33 36 34 37 2c 31  UES(2147483647,1
2c60: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
2c70: 73 65 71 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71  seq FROM main.sq
2c80: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 57 48  lite_sequence WH
2c90: 45 52 45 20 6e 61 6d 65 3d 27 74 36 27 3b 0a 20  ERE name='t6';. 
2ca0: 20 20 20 7d 0a 20 20 7d 20 32 31 34 37 34 38 33     }.  } 2147483
2cb0: 36 34 37 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20  647.}.ifcapable 
2cc0: 7b 21 72 6f 77 69 64 33 32 7d 20 7b 0a 20 20 64  {!rowid32} {.  d
2cd0: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 36  o_test autoinc-6
2ce0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
2cf0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
2d00: 54 41 42 4c 45 20 74 36 28 76 20 49 4e 54 45 47  TABLE t6(v INTEG
2d10: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
2d20: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 77 29  UTOINCREMENT, w)
2d30: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
2d40: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 39 32  NTO t6 VALUES(92
2d50: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
2d60: 37 2c 31 29 3b 0a 20 20 20 20 20 20 53 45 4c 45  7,1);.      SELE
2d70: 43 54 20 73 65 71 20 46 52 4f 4d 20 6d 61 69 6e  CT seq FROM main
2d80: 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  .sqlite_sequence
2d90: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 36 27   WHERE name='t6'
2da0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 39 32 32 33  ;.    }.  } 9223
2db0: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 0a  372036854775807.
2dc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  }.do_test autoin
2dd0: 63 2d 36 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  c-6.2 {.  catchs
2de0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
2df0: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 4e  INTO t6 VALUES(N
2e00: 55 4c 4c 2c 31 29 3b 0a 20 20 7d 0a 7d 20 7b 31  ULL,1);.  }.} {1
2e10: 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   {database or di
2e20: 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 0a 23 20  sk is full}}..# 
2e30: 41 6c 6c 6f 77 20 74 68 65 20 41 55 54 4f 49 4e  Allow the AUTOIN
2e40: 43 52 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20  CREMENT keyword 
2e50: 69 6e 73 69 64 65 20 74 68 65 20 70 61 72 65 6e  inside the paren
2e60: 74 68 65 73 65 73 0a 23 20 6f 6e 20 61 20 73 65  theses.# on a se
2e70: 70 61 72 61 74 65 20 50 52 49 4d 41 52 59 20 4b  parate PRIMARY K
2e80: 45 59 20 64 65 73 69 67 6e 61 74 69 6f 6e 2e 0a  EY designation..
2e90: 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  #.do_test autoin
2ea0: 63 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  c-7.1 {.  execsq
2eb0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2ec0: 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45  ABLE t7(x INTEGE
2ed0: 52 2c 20 79 20 52 45 41 4c 2c 20 50 52 49 4d 41  R, y REAL, PRIMA
2ee0: 52 59 20 4b 45 59 28 78 20 41 55 54 4f 49 4e 43  RY KEY(x AUTOINC
2ef0: 52 45 4d 45 4e 54 29 29 3b 0a 20 20 20 20 49 4e  REMENT));.    IN
2f00: 53 45 52 54 20 49 4e 54 4f 20 74 37 28 79 29 20  SERT INTO t7(y) 
2f10: 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20 20 20  VALUES(123);.   
2f20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 28   INSERT INTO t7(
2f30: 79 29 20 56 41 4c 55 45 53 28 32 33 34 29 3b 0a  y) VALUES(234);.
2f40: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
2f50: 74 37 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t7;.    INSERT I
2f60: 4e 54 4f 20 74 37 28 79 29 20 56 41 4c 55 45 53  NTO t7(y) VALUES
2f70: 28 33 34 35 29 3b 0a 20 20 20 20 53 45 4c 45 43  (345);.    SELEC
2f80: 54 20 2a 20 46 52 4f 4d 20 74 37 3b 0a 20 20 7d  T * FROM t7;.  }
2f90: 0a 7d 20 7b 33 20 33 34 35 2e 30 7d 0a 0a 23 20  .} {3 345.0}..# 
2fa0: 54 65 73 74 20 74 68 61 74 20 69 66 20 74 68 65  Test that if the
2fb0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
2fc0: 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 6e  s applied to a n
2fd0: 6f 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  on integer prima
2fe0: 72 79 20 6b 65 79 0a 23 20 74 68 65 20 65 72 72  ry key.# the err
2ff0: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 73 65  or message is se
3000: 6e 73 69 62 6c 65 2e 0a 64 6f 5f 74 65 73 74 20  nsible..do_test 
3010: 61 75 74 6f 69 6e 63 2d 37 2e 32 20 7b 0a 20 20  autoinc-7.2 {.  
3020: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
3030: 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 78  REATE TABLE t8(x
3040: 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
3050: 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 29  Y AUTOINCREMENT)
3060: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 41 55 54 4f  ;.  }.} {1 {AUTO
3070: 49 4e 43 52 45 4d 45 4e 54 20 69 73 20 6f 6e 6c  INCREMENT is onl
3080: 79 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 61 6e 20  y allowed on an 
3090: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
30a0: 4b 45 59 7d 7d 0a 0a 0a 23 20 54 69 63 6b 65 74  KEY}}...# Ticket
30b0: 20 23 31 32 38 33 2e 20 20 4d 61 6b 65 20 73 75   #1283.  Make su
30c0: 72 65 20 74 68 61 74 20 70 72 65 70 61 72 69 6e  re that preparin
30d0: 67 20 62 75 74 20 6e 65 76 65 72 20 72 75 6e 6e  g but never runn
30e0: 69 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a  ing a statement.
30f0: 23 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  # that creates t
3100: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
3110: 63 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  ce table does no
3120: 74 20 6d 65 73 73 20 75 70 20 74 68 65 20 64 61  t mess up the da
3130: 74 61 62 61 73 65 2e 0a 23 0a 64 6f 5f 74 65 73  tabase..#.do_tes
3140: 74 20 61 75 74 6f 69 6e 63 2d 38 2e 31 20 7b 0a  t autoinc-8.1 {.
3150: 20 20 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f    catch {db2 clo
3160: 73 65 7d 0a 20 20 63 61 74 63 68 20 7b 64 62 20  se}.  catch {db 
3170: 63 6c 6f 73 65 7d 0a 20 20 66 6f 72 63 65 64 65  close}.  forcede
3180: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73  lete test.db.  s
3190: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
31a0: 62 0a 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69  b.  set DB [sqli
31b0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
31c0: 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 73 65 74  ointer db].  set
31d0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
31e0: 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20  repare $DB {.   
31f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3200: 31 28 0a 20 20 20 20 20 20 20 78 20 49 4e 54 45  1(.       x INTE
3210: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
3220: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
3230: 20 20 20 29 0a 20 20 7d 20 2d 31 20 54 41 49 4c     ).  } -1 TAIL
3240: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
3250: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
3260: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
3270: 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20  repare $DB {.   
3280: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3290: 31 28 0a 20 20 20 20 20 20 20 78 20 49 4e 54 45  1(.       x INTE
32a0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
32b0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
32c0: 20 20 20 29 0a 20 20 7d 20 2d 31 20 54 41 49 4c     ).  } -1 TAIL
32d0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
32e0: 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33   $STMT.  sqlite3
32f0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
3300: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3310: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3320: 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20  ALUES(NULL);.   
3330: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3340: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23 20  1;.  }.} {1}..# 
3350: 54 69 63 6b 65 74 20 23 33 31 34 38 0a 23 20 4d  Ticket #3148.# M
3360: 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 71 6c  ake sure the sql
3370: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
3380: 6c 65 20 69 73 20 6e 6f 74 20 64 61 6d 61 67 65  le is not damage
3390: 64 20 77 68 65 6e 20 64 6f 69 6e 67 0a 23 20 61  d when doing.# a
33a0: 6e 20 65 6d 70 74 79 20 69 6e 73 65 72 74 20 2d  n empty insert -
33b0: 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
33c0: 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 77  ... SELECT ... w
33d0: 68 65 72 65 20 74 68 65 20 53 45 4c 45 43 54 0a  here the SELECT.
33e0: 23 20 63 6c 61 75 73 65 20 72 65 74 75 72 6e 73  # clause returns
33f0: 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2e 0a 23   an empty set..#
3400: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
3410: 2d 39 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  -9.1 {.  db eval
3420: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3430: 42 4c 45 20 74 32 28 78 20 49 4e 54 45 47 45 52  BLE t2(x INTEGER
3440: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54   PRIMARY KEY AUT
3450: 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 79 29 3b 0a  OINCREMENT, y);.
3460: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3470: 74 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t2 VALUES(NULL, 
3480: 31 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  1);.    CREATE T
3490: 41 42 4c 45 20 74 33 28 61 20 49 4e 54 45 47 45  ABLE t3(a INTEGE
34a0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
34b0: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 62 29 3b  TOINCREMENT, b);
34c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
34d0: 20 74 33 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t3 SELECT * FRO
34e0: 4d 20 74 32 20 57 48 45 52 45 20 79 3e 31 3b 0a  M t2 WHERE y>1;.
34f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3500: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
3510: 63 65 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74  ce WHERE name='t
3520: 33 27 3b 0a 20 20 7d 0a 7d 20 7b 74 33 20 30 7d  3';.  }.} {t3 0}
3530: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  ..ifcapable trig
3540: 67 65 72 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  ger {.  catchsql
3550: 20 7b 20 70 72 61 67 6d 61 20 72 65 63 75 72 73   { pragma recurs
3560: 69 76 65 5f 74 72 69 67 67 65 72 73 20 3d 20 6f  ive_triggers = o
3570: 66 66 20 7d 20 0a 20 20 0a 20 20 23 20 54 69 63  ff } .  .  # Tic
3580: 6b 65 74 20 23 33 39 32 38 2e 20 20 4d 61 6b 65  ket #3928.  Make
3590: 20 73 75 72 65 20 74 68 61 74 20 74 72 69 67 67   sure that trigg
35a0: 65 72 73 20 74 6f 20 6e 6f 74 20 6d 61 6b 65 20  ers to not make 
35b0: 65 78 74 72 61 20 73 6c 6f 74 73 20 69 6e 0a 20  extra slots in. 
35c0: 20 23 20 74 68 65 20 53 51 4c 49 54 45 5f 53 45   # the SQLITE_SE
35d0: 51 55 45 4e 43 45 20 74 61 62 6c 65 2e 0a 20 20  QUENCE table..  
35e0: 23 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f  #.  do_test auto
35f0: 69 6e 63 2d 33 39 32 38 2e 31 20 7b 0a 20 20 20  inc-3928.1 {.   
3600: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
3610: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
3620: 39 32 38 28 61 20 49 4e 54 45 47 45 52 20 50 52  928(a INTEGER PR
3630: 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e  IMARY KEY AUTOIN
3640: 43 52 45 4d 45 4e 54 2c 20 62 29 3b 0a 20 20 20  CREMENT, b);.   
3650: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
3660: 52 20 74 33 39 32 38 72 31 20 42 45 46 4f 52 45  R t3928r1 BEFORE
3670: 20 49 4e 53 45 52 54 20 4f 4e 20 74 33 39 32 38   INSERT ON t3928
3680: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 49   BEGIN.        I
3690: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 39 32 38  NSERT INTO t3928
36a0: 28 62 29 20 56 41 4c 55 45 53 28 27 62 65 66 6f  (b) VALUES('befo
36b0: 72 65 31 27 29 3b 0a 20 20 20 20 20 20 20 20 49  re1');.        I
36c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 39 32 38  NSERT INTO t3928
36d0: 28 62 29 20 56 41 4c 55 45 53 28 27 62 65 66 6f  (b) VALUES('befo
36e0: 72 65 32 27 29 3b 0a 20 20 20 20 20 20 45 4e 44  re2');.      END
36f0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
3700: 52 49 47 47 45 52 20 74 33 39 32 38 72 32 20 41  RIGGER t3928r2 A
3710: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74  FTER INSERT ON t
3720: 33 39 32 38 20 42 45 47 49 4e 0a 20 20 20 20 20  3928 BEGIN.     
3730: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3740: 33 39 32 38 28 62 29 20 56 41 4c 55 45 53 28 27  3928(b) VALUES('
3750: 61 66 74 65 72 31 27 29 3b 0a 20 20 20 20 20 20  after1');.      
3760: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
3770: 39 32 38 28 62 29 20 56 41 4c 55 45 53 28 27 61  928(b) VALUES('a
3780: 66 74 65 72 32 27 29 3b 0a 20 20 20 20 20 20 45  fter2');.      E
3790: 4e 44 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  ND;.      INSERT
37a0: 20 49 4e 54 4f 20 74 33 39 32 38 28 62 29 20 56   INTO t3928(b) V
37b0: 41 4c 55 45 53 28 27 74 65 73 74 27 29 3b 0a 20  ALUES('test');. 
37c0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
37d0: 4f 4d 20 74 33 39 32 38 20 4f 52 44 45 52 20 42  OM t3928 ORDER B
37e0: 59 20 61 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  Y a;.    }.  } {
37f0: 31 20 62 65 66 6f 72 65 31 20 32 20 61 66 74 65  1 before1 2 afte
3800: 72 31 20 33 20 61 66 74 65 72 32 20 34 20 62 65  r1 3 after2 4 be
3810: 66 6f 72 65 32 20 35 20 61 66 74 65 72 31 20 36  fore2 5 after1 6
3820: 20 61 66 74 65 72 32 20 37 20 74 65 73 74 20 38   after2 7 test 8
3830: 20 62 65 66 6f 72 65 31 20 39 20 62 65 66 6f 72   before1 9 befor
3840: 65 32 20 31 30 20 61 66 74 65 72 31 20 31 31 20  e2 10 after1 11 
3850: 62 65 66 6f 72 65 31 20 31 32 20 62 65 66 6f 72  before1 12 befor
3860: 65 32 20 31 33 20 61 66 74 65 72 32 7d 0a 20 20  e2 13 after2}.  
3870: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
3880: 33 39 32 38 2e 32 20 7b 0a 20 20 20 20 64 62 20  3928.2 {.    db 
3890: 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  eval {.      SEL
38a0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
38b0: 65 5f 73 65 71 75 65 6e 63 65 20 57 48 45 52 45  e_sequence WHERE
38c0: 20 6e 61 6d 65 3d 27 74 33 39 32 38 27 0a 20 20   name='t3928'.  
38d0: 20 20 7d 0a 20 20 7d 20 7b 74 33 39 32 38 20 31    }.  } {t3928 1
38e0: 33 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  3}..  do_test au
38f0: 74 6f 69 6e 63 2d 33 39 32 38 2e 33 20 7b 0a 20  toinc-3928.3 {. 
3900: 20 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20     db eval {.   
3910: 20 20 20 44 52 4f 50 20 54 52 49 47 47 45 52 20     DROP TRIGGER 
3920: 74 33 39 32 38 72 31 3b 0a 20 20 20 20 20 20 44  t3928r1;.      D
3930: 52 4f 50 20 54 52 49 47 47 45 52 20 74 33 39 32  ROP TRIGGER t392
3940: 38 72 32 3b 0a 20 20 20 20 20 20 43 52 45 41 54  8r2;.      CREAT
3950: 45 20 54 52 49 47 47 45 52 20 74 33 39 32 38 72  E TRIGGER t3928r
3960: 33 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  3 BEFORE UPDATE 
3970: 4f 4e 20 74 33 39 32 38 20 0a 20 20 20 20 20 20  ON t3928 .      
3980: 20 20 57 48 45 4e 20 74 79 70 65 6f 66 28 6e 65    WHEN typeof(ne
3990: 77 2e 62 29 3d 3d 27 69 6e 74 65 67 65 72 27 20  w.b)=='integer' 
39a0: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 20 20  BEGIN.          
39b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 39   INSERT INTO t39
39c0: 32 38 28 62 29 20 56 41 4c 55 45 53 28 27 62 65  28(b) VALUES('be
39d0: 66 6f 72 65 2d 69 6e 74 2d 27 20 7c 7c 20 6e 65  fore-int-' || ne
39e0: 77 2e 62 29 3b 0a 20 20 20 20 20 20 45 4e 44 3b  w.b);.      END;
39f0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  .      CREATE TR
3a00: 49 47 47 45 52 20 74 33 39 32 38 72 34 20 41 46  IGGER t3928r4 AF
3a10: 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 33  TER UPDATE ON t3
3a20: 39 32 38 20 0a 20 20 20 20 20 20 20 20 57 48 45  928 .        WHE
3a30: 4e 20 74 79 70 65 6f 66 28 6e 65 77 2e 62 29 3d  N typeof(new.b)=
3a40: 3d 27 69 6e 74 65 67 65 72 27 20 42 45 47 49 4e  ='integer' BEGIN
3a50: 0a 20 20 20 20 20 20 20 20 20 20 20 49 4e 53 45  .           INSE
3a60: 52 54 20 49 4e 54 4f 20 74 33 39 32 38 28 62 29  RT INTO t3928(b)
3a70: 20 56 41 4c 55 45 53 28 27 61 66 74 65 72 2d 69   VALUES('after-i
3a80: 6e 74 2d 27 20 7c 7c 20 6e 65 77 2e 62 29 3b 0a  nt-' || new.b);.
3a90: 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 20        END;.     
3aa0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33 39   DELETE FROM t39
3ab0: 32 38 20 57 48 45 52 45 20 61 21 3d 31 3b 0a 20  28 WHERE a!=1;. 
3ac0: 20 20 20 20 20 55 50 44 41 54 45 20 74 33 39 32       UPDATE t392
3ad0: 38 20 53 45 54 20 62 3d 34 35 36 20 57 48 45 52  8 SET b=456 WHER
3ae0: 45 20 61 3d 31 3b 0a 20 20 20 20 20 20 53 45 4c  E a=1;.      SEL
3af0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 39 32 38  ECT * FROM t3928
3b00: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 20   ORDER BY a;.   
3b10: 20 7d 0a 20 20 7d 20 7b 31 20 34 35 36 20 31 34   }.  } {1 456 14
3b20: 20 62 65 66 6f 72 65 2d 69 6e 74 2d 34 35 36 20   before-int-456 
3b30: 31 35 20 61 66 74 65 72 2d 69 6e 74 2d 34 35 36  15 after-int-456
3b40: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f  }.  do_test auto
3b50: 69 6e 63 2d 33 39 32 38 2e 34 20 7b 0a 20 20 20  inc-3928.4 {.   
3b60: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
3b70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
3b80: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 57  qlite_sequence W
3b90: 48 45 52 45 20 6e 61 6d 65 3d 27 74 33 39 32 38  HERE name='t3928
3ba0: 27 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 74 33 39  '.    }.  } {t39
3bb0: 32 38 20 31 35 7d 0a 20 20 0a 20 20 64 6f 5f 74  28 15}.  .  do_t
3bc0: 65 73 74 20 61 75 74 6f 69 6e 63 2d 33 39 32 38  est autoinc-3928
3bd0: 2e 35 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  .5 {.    db eval
3be0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
3bf0: 54 41 42 4c 45 20 74 33 39 32 38 62 28 78 29 3b  TABLE t3928b(x);
3c00: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
3c10: 54 4f 20 74 33 39 32 38 62 20 56 41 4c 55 45 53  TO t3928b VALUES
3c20: 28 31 30 30 29 3b 0a 20 20 20 20 20 20 49 4e 53  (100);.      INS
3c30: 45 52 54 20 49 4e 54 4f 20 74 33 39 32 38 62 20  ERT INTO t3928b 
3c40: 56 41 4c 55 45 53 28 32 30 30 29 3b 0a 20 20 20  VALUES(200);.   
3c50: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3c60: 33 39 32 38 62 20 56 41 4c 55 45 53 28 33 30 30  3928b VALUES(300
3c70: 29 3b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20  );.      DELETE 
3c80: 46 52 4f 4d 20 74 33 39 32 38 3b 0a 20 20 20 20  FROM t3928;.    
3c90: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3ca0: 33 39 32 38 63 28 79 20 49 4e 54 45 47 45 52 20  3928c(y INTEGER 
3cb0: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f  PRIMARY KEY AUTO
3cc0: 49 4e 43 52 45 4d 45 4e 54 2c 20 7a 29 3b 0a 20  INCREMENT, z);. 
3cd0: 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
3ce0: 47 45 52 20 74 33 39 32 38 62 72 31 20 42 45 46  GER t3928br1 BEF
3cf0: 4f 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 33  ORE DELETE ON t3
3d00: 39 32 38 62 20 42 45 47 49 4e 0a 20 20 20 20 20  928b BEGIN.     
3d10: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3d20: 33 39 32 38 28 62 29 20 56 41 4c 55 45 53 28 27  3928(b) VALUES('
3d30: 62 65 66 6f 72 65 2d 64 65 6c 2d 27 7c 7c 6f 6c  before-del-'||ol
3d40: 64 2e 78 29 3b 0a 20 20 20 20 20 20 20 20 49 4e  d.x);.        IN
3d50: 53 45 52 54 20 49 4e 54 4f 20 74 33 39 32 38 63  SERT INTO t3928c
3d60: 28 7a 29 20 56 41 4c 55 45 53 28 27 62 65 66 6f  (z) VALUES('befo
3d70: 72 65 2d 64 65 6c 2d 27 7c 7c 6f 6c 64 2e 78 29  re-del-'||old.x)
3d80: 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20  ;.      END;.   
3d90: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
3da0: 52 20 74 33 39 32 38 62 72 32 20 41 46 54 45 52  R t3928br2 AFTER
3db0: 20 44 45 4c 45 54 45 20 4f 4e 20 74 33 39 32 38   DELETE ON t3928
3dc0: 62 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  b BEGIN.        
3dd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 39 32  INSERT INTO t392
3de0: 38 28 62 29 20 56 41 4c 55 45 53 28 27 61 66 74  8(b) VALUES('aft
3df0: 65 72 2d 64 65 6c 2d 27 7c 7c 6f 6c 64 2e 78 29  er-del-'||old.x)
3e00: 3b 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54  ;.        INSERT
3e10: 20 49 4e 54 4f 20 74 33 39 32 38 63 28 7a 29 20   INTO t3928c(z) 
3e20: 56 41 4c 55 45 53 28 27 61 66 74 65 72 2d 64 65  VALUES('after-de
3e30: 6c 2d 27 7c 7c 6f 6c 64 2e 78 29 3b 0a 20 20 20  l-'||old.x);.   
3e40: 20 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 44 45     END;.      DE
3e50: 4c 45 54 45 20 46 52 4f 4d 20 74 33 39 32 38 62  LETE FROM t3928b
3e60: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
3e70: 20 46 52 4f 4d 20 74 33 39 32 38 20 4f 52 44 45   FROM t3928 ORDE
3e80: 52 20 42 59 20 61 3b 0a 20 20 20 20 7d 0a 20 20  R BY a;.    }.  
3e90: 7d 20 7b 31 36 20 62 65 66 6f 72 65 2d 64 65 6c  } {16 before-del
3ea0: 2d 31 30 30 20 31 37 20 61 66 74 65 72 2d 64 65  -100 17 after-de
3eb0: 6c 2d 31 30 30 20 31 38 20 62 65 66 6f 72 65 2d  l-100 18 before-
3ec0: 64 65 6c 2d 32 30 30 20 31 39 20 61 66 74 65 72  del-200 19 after
3ed0: 2d 64 65 6c 2d 32 30 30 20 32 30 20 62 65 66 6f  -del-200 20 befo
3ee0: 72 65 2d 64 65 6c 2d 33 30 30 20 32 31 20 61 66  re-del-300 21 af
3ef0: 74 65 72 2d 64 65 6c 2d 33 30 30 7d 0a 20 20 64  ter-del-300}.  d
3f00: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 33  o_test autoinc-3
3f10: 39 32 38 2e 36 20 7b 0a 20 20 20 20 64 62 20 65  928.6 {.    db e
3f20: 76 61 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  val {.      SELE
3f30: 43 54 20 2a 20 46 52 4f 4d 20 74 33 39 32 38 63  CT * FROM t3928c
3f40: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 20   ORDER BY y;.   
3f50: 20 7d 0a 20 20 7d 20 7b 31 20 62 65 66 6f 72 65   }.  } {1 before
3f60: 2d 64 65 6c 2d 31 30 30 20 32 20 61 66 74 65 72  -del-100 2 after
3f70: 2d 64 65 6c 2d 31 30 30 20 33 20 62 65 66 6f 72  -del-100 3 befor
3f80: 65 2d 64 65 6c 2d 32 30 30 20 34 20 61 66 74 65  e-del-200 4 afte
3f90: 72 2d 64 65 6c 2d 32 30 30 20 35 20 62 65 66 6f  r-del-200 5 befo
3fa0: 72 65 2d 64 65 6c 2d 33 30 30 20 36 20 61 66 74  re-del-300 6 aft
3fb0: 65 72 2d 64 65 6c 2d 33 30 30 7d 0a 20 20 64 6f  er-del-300}.  do
3fc0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 33 39  _test autoinc-39
3fd0: 32 38 2e 37 20 7b 0a 20 20 20 20 64 62 20 65 76  28.7 {.    db ev
3fe0: 61 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  al {.      SELEC
3ff0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
4000: 73 65 71 75 65 6e 63 65 20 57 48 45 52 45 20 6e  sequence WHERE n
4010: 61 6d 65 20 4c 49 4b 45 20 27 74 33 39 32 38 25  ame LIKE 't3928%
4020: 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b  ' ORDER BY name;
4030: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 74 33 39 32  .    }.  } {t392
4040: 38 20 32 31 20 74 33 39 32 38 63 20 36 7d 0a 20  8 21 t3928c 6}. 
4050: 20 0a 20 20 23 20 54 69 63 6b 65 74 20 5b 61 36   .  # Ticket [a6
4060: 39 36 33 37 39 63 31 66 30 38 38 36 36 31 35 35  96379c1f08866155
4070: 34 31 61 34 38 62 33 35 62 64 38 31 38 31 61 38  41a48b35bd8181a8
4080: 30 65 38 38 66 38 5d 0a 20 20 64 6f 5f 74 65 73  0e88f8].  do_tes
4090: 74 20 61 75 74 6f 69 6e 63 2d 61 36 39 36 33 37  t autoinc-a69637
40a0: 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  .1 {.    db eval
40b0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
40c0: 54 41 42 4c 45 20 74 61 36 39 36 33 37 5f 31 28  TABLE ta69637_1(
40d0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
40e0: 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d  Y KEY AUTOINCREM
40f0: 45 4e 54 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  ENT, y);.      C
4100: 52 45 41 54 45 20 54 41 42 4c 45 20 74 61 36 39  REATE TABLE ta69
4110: 36 33 37 5f 32 28 7a 29 3b 0a 20 20 20 20 20 20  637_2(z);.      
4120: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
4130: 61 36 39 36 33 37 5f 31 20 41 46 54 45 52 20 49  a69637_1 AFTER I
4140: 4e 53 45 52 54 20 4f 4e 20 74 61 36 39 36 33 37  NSERT ON ta69637
4150: 5f 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  _2 BEGIN.       
4160: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 36   INSERT INTO ta6
4170: 39 36 33 37 5f 31 28 79 29 20 56 41 4c 55 45 53  9637_1(y) VALUES
4180: 28 6e 65 77 2e 7a 2b 31 29 3b 0a 20 20 20 20 20  (new.z+1);.     
4190: 20 45 4e 44 3b 0a 20 20 20 20 20 20 49 4e 53 45   END;.      INSE
41a0: 52 54 20 49 4e 54 4f 20 74 61 36 39 36 33 37 5f  RT INTO ta69637_
41b0: 32 20 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20  2 VALUES(123);. 
41c0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
41d0: 4f 4d 20 74 61 36 39 36 33 37 5f 31 3b 0a 20 20  OM ta69637_1;.  
41e0: 20 20 7d 0a 20 20 7d 20 7b 31 20 31 32 34 7d 0a    }.  } {1 124}.
41f0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e    do_test autoin
4200: 63 2d 61 36 39 36 33 37 2e 32 20 7b 0a 20 20 20  c-a69637.2 {.   
4210: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
4220: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 61 36   CREATE VIEW va6
4230: 39 36 33 37 5f 32 20 41 53 20 53 45 4c 45 43 54  9637_2 AS SELECT
4240: 20 2a 20 46 52 4f 4d 20 74 61 36 39 36 33 37 5f   * FROM ta69637_
4250: 32 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  2;.      CREATE 
4260: 54 52 49 47 47 45 52 20 72 61 36 39 36 33 37 5f  TRIGGER ra69637_
4270: 32 20 49 4e 53 54 45 41 44 20 4f 46 20 49 4e 53  2 INSTEAD OF INS
4280: 45 52 54 20 4f 4e 20 76 61 36 39 36 33 37 5f 32  ERT ON va69637_2
4290: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 49   BEGIN.        I
42a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 36 39 36  NSERT INTO ta696
42b0: 33 37 5f 31 28 79 29 20 56 41 4c 55 45 53 28 6e  37_1(y) VALUES(n
42c0: 65 77 2e 7a 2b 31 30 30 30 30 29 3b 0a 20 20 20  ew.z+10000);.   
42d0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 49 4e     END;.      IN
42e0: 53 45 52 54 20 49 4e 54 4f 20 76 61 36 39 36 33  SERT INTO va6963
42f0: 37 5f 32 20 56 41 4c 55 45 53 28 31 32 33 29 3b  7_2 VALUES(123);
4300: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
4310: 46 52 4f 4d 20 74 61 36 39 36 33 37 5f 31 3b 0a  FROM ta69637_1;.
4320: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 31 32 34      }.  } {1 124
4330: 20 32 20 31 30 31 32 33 7d 0a 7d 0a 0a 23 20 32   2 10123}.}..# 2
4340: 30 31 36 2d 31 30 2d 30 33 20 74 69 63 6b 65 74  016-10-03 ticket
4350: 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c   https://www.sql
4360: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 6b 74 76  ite.org/src/tktv
4370: 69 65 77 2f 37 62 33 33 32 38 30 38 36 61 35 63  iew/7b3328086a5c
4380: 31 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 75  1.# Make sure au
4390: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 70 6c 61 79  toincrement play
43a0: 73 20 6e 69 63 65 6c 79 20 77 69 74 68 20 74 68  s nicely with th
43b0: 65 20 78 66 65 72 20 6f 70 74 69 6d 69 7a 61 74  e xfer optimizat
43c0: 69 6f 6e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ion.#.do_execsql
43d0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 31 30  _test autoinc-10
43e0: 2e 31 20 7b 0a 20 20 44 45 4c 45 54 45 20 46 52  .1 {.  DELETE FR
43f0: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
4400: 63 65 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  ce;.  CREATE TAB
4410: 4c 45 20 74 31 30 61 28 61 20 49 4e 54 45 47 45  LE t10a(a INTEGE
4420: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
4430: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 62 20 55  TOINCREMENT, b U
4440: 4e 49 51 55 45 29 3b 0a 20 20 49 4e 53 45 52 54  NIQUE);.  INSERT
4450: 20 49 4e 54 4f 20 74 31 30 61 20 56 41 4c 55 45   INTO t10a VALUE
4460: 53 28 38 38 38 2c 39 39 39 39 29 3b 0a 20 20 43  S(888,9999);.  C
4470: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 62  REATE TABLE t10b
4480: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
4490: 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45  RY KEY AUTOINCRE
44a0: 4d 45 4e 54 2c 20 79 20 55 4e 49 51 55 45 29 3b  MENT, y UNIQUE);
44b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
44c0: 31 30 62 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  10b SELECT * FRO
44d0: 4d 20 74 31 30 61 3b 0a 20 20 53 45 4c 45 43 54  M t10a;.  SELECT
44e0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73   * FROM sqlite_s
44f0: 65 71 75 65 6e 63 65 3b 0a 7d 20 7b 74 31 30 61  equence;.} {t10a
4500: 20 38 38 38 20 74 31 30 62 20 38 38 38 7d 0a 0a   888 t10b 888}..
4510: 23 20 32 30 31 38 2d 30 34 2d 32 31 20 61 75 74  # 2018-04-21 aut
4520: 6f 69 6e 63 72 65 6d 65 6e 74 20 64 6f 65 73 20  oincrement does 
4530: 6e 6f 74 20 63 61 75 73 65 20 70 72 6f 62 6c 65  not cause proble
4540: 6d 73 20 66 6f 72 20 75 70 73 65 72 74 0a 23 0a  ms for upsert.#.
4550: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4560: 61 75 74 6f 69 6e 63 2d 31 31 2e 31 20 7b 0a 20  autoinc-11.1 {. 
4570: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
4580: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
4590: 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52  ARY KEY AUTOINCR
45a0: 45 4d 45 4e 54 2c 62 20 55 4e 49 51 55 45 29 3b  EMENT,b UNIQUE);
45b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
45c0: 31 31 28 61 2c 62 29 20 56 41 4c 55 45 53 28 32  11(a,b) VALUES(2
45d0: 2c 33 29 2c 28 35 2c 36 29 2c 28 34 2c 33 29 2c  ,3),(5,6),(4,3),
45e0: 28 31 2c 32 29 0a 20 20 20 20 4f 4e 20 43 4f 4e  (1,2).    ON CON
45f0: 46 4c 49 43 54 28 62 29 20 44 4f 20 55 50 44 41  FLICT(b) DO UPDA
4600: 54 45 20 53 45 54 20 61 3d 61 2b 31 30 30 30 3b  TE SET a=a+1000;
4610: 0a 20 20 53 45 4c 45 43 54 20 73 65 71 20 46 52  .  SELECT seq FR
4620: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
4630: 63 65 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74  ce WHERE name='t
4640: 31 31 27 3b 0a 7d 20 7b 35 7d 0a 0a 23 20 32 30  11';.} {5}..# 20
4650: 31 38 2d 30 35 2d 32 33 20 74 69 63 6b 65 74 20  18-05-23 ticket 
4660: 64 38 64 63 32 62 33 61 35 38 63 64 35 64 63 32  d8dc2b3a58cd5dc2
4670: 39 31 38 61 31 64 34 61 63 62 62 61 34 36 37 36  918a1d4acbba4676
4680: 61 32 33 61 64 61 34 63 0a 23 20 44 6f 65 73 20  a23ada4c.# Does 
4690: 6e 6f 74 20 63 72 61 73 68 20 69 66 20 74 68 65  not crash if the
46a0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
46b0: 20 74 61 62 6c 65 20 73 63 68 65 6d 61 20 69 73   table schema is
46c0: 20 6d 69 73 73 69 6e 67 0a 23 20 6f 72 20 63 6f   missing.# or co
46d0: 72 72 75 70 74 2e 0a 23 0a 64 6f 5f 74 65 73 74  rrupt..#.do_test
46e0: 20 61 75 74 6f 69 6e 63 2d 31 32 2e 31 20 7b 0a   autoinc-12.1 {.
46f0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72    db close.  for
4700: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
4710: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
4720: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f  st.db.  sqlite3_
4730: 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46  db_config db DEF
4740: 45 4e 53 49 56 45 20 30 0a 20 20 64 62 20 65 76  ENSIVE 0.  db ev
4750: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
4760: 54 41 42 4c 45 20 66 61 6b 65 5f 73 65 71 75 65  TABLE fake_seque
4770: 6e 63 65 28 6e 61 6d 65 20 54 45 58 54 20 50 52  nce(name TEXT PR
4780: 49 4d 41 52 59 20 4b 45 59 2c 73 65 71 29 20 57  IMARY KEY,seq) W
4790: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
47a0: 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c    PRAGMA writabl
47b0: 65 5f 73 63 68 65 6d 61 3d 6f 6e 3b 0a 20 20 20  e_schema=on;.   
47c0: 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d   UPDATE sqlite_m
47d0: 61 73 74 65 72 20 53 45 54 0a 20 20 20 20 20 73  aster SET.     s
47e0: 71 6c 3d 72 65 70 6c 61 63 65 28 73 71 6c 2c 27  ql=replace(sql,'
47f0: 66 61 6b 65 5f 27 2c 27 73 71 6c 69 74 65 5f 27  fake_','sqlite_'
4800: 29 2c 0a 20 20 20 20 20 6e 61 6d 65 3d 27 73 71  ),.     name='sq
4810: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 2c 0a  lite_sequence',.
4820: 20 20 20 20 20 74 62 6c 5f 6e 61 6d 65 3d 27 73       tbl_name='s
4830: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 0a  qlite_sequence'.
4840: 20 20 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d       WHERE name=
4850: 27 66 61 6b 65 5f 73 65 71 75 65 6e 63 65 27 3b  'fake_sequence';
4860: 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .  }.  db close.
4870: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4880: 74 2e 64 62 0a 20 20 73 65 74 20 72 65 73 20 5b  t.db.  set res [
4890: 63 61 74 63 68 20 7b 64 62 20 65 76 61 6c 20 7b  catch {db eval {
48a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
48b0: 45 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50  E t1(a INTEGER P
48c0: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
48d0: 4e 43 52 45 4d 45 4e 54 2c 20 62 20 54 45 58 54  NCREMENT, b TEXT
48e0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
48f0: 54 4f 20 74 31 28 62 29 20 56 41 4c 55 45 53 28  TO t1(b) VALUES(
4900: 27 6f 6e 65 27 29 3b 0a 20 20 7d 7d 20 6d 73 67  'one');.  }} msg
4910: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20  ].  lappend res 
4920: 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62  $msg.} {1 {datab
4930: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
4940: 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 64 6f  s malformed}}.do
4950: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 31 32  _test autoinc-12
4960: 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .2 {.  db close.
4970: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
4980: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20  st.db.  sqlite3 
4990: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c  db test.db.  sql
49a0: 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64  ite3_db_config d
49b0: 62 20 44 45 46 45 4e 53 49 56 45 20 30 0a 20 20  b DEFENSIVE 0.  
49c0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 43 52 45  db eval {.   CRE
49d0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49  ATE TABLE t1(a I
49e0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
49f0: 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  EY AUTOINCREMENT
4a00: 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20 49 4e  , b TEXT);.   IN
4a10: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 62 29 20  SERT INTO t1(b) 
4a20: 56 41 4c 55 45 53 28 27 6f 6e 65 27 29 3b 0a 20  VALUES('one');. 
4a30: 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c    PRAGMA writabl
4a40: 65 5f 73 63 68 65 6d 61 3d 6f 6e 3b 0a 20 20 20  e_schema=on;.   
4a50: 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61  UPDATE sqlite_ma
4a60: 73 74 65 72 20 53 45 54 0a 20 20 20 20 20 73 71  ster SET.     sq
4a70: 6c 3d 72 65 70 6c 61 63 65 28 73 71 6c 2c 27 73  l=replace(sql,'s
4a80: 71 6c 69 74 65 5f 27 2c 27 78 5f 27 29 2c 0a 20  qlite_','x_'),. 
4a90: 20 20 20 20 6e 61 6d 65 3d 27 78 5f 73 65 71 75      name='x_sequ
4aa0: 65 6e 63 65 27 2c 0a 20 20 20 20 20 74 62 6c 5f  ence',.     tbl_
4ab0: 6e 61 6d 65 3d 27 78 5f 73 65 71 75 65 6e 63 65  name='x_sequence
4ac0: 27 0a 20 20 20 20 57 48 45 52 45 20 6e 61 6d 65  '.    WHERE name
4ad0: 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  ='sqlite_sequenc
4ae0: 65 27 3b 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f  e';.  }.  db clo
4af0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
4b00: 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 72 65  test.db.  set re
4b10: 73 20 5b 63 61 74 63 68 20 7b 64 62 20 65 76 61  s [catch {db eva
4b20: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
4b30: 4e 54 4f 20 74 31 28 62 29 20 56 41 4c 55 45 53  NTO t1(b) VALUES
4b40: 28 27 74 77 6f 27 29 3b 0a 20 20 7d 7d 20 6d 73  ('two');.  }} ms
4b50: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  g].  lappend res
4b60: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61   $msg.} {1 {data
4b70: 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20  base disk image 
4b80: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 69  is malformed}}.i
4b90: 66 63 61 70 61 62 6c 65 20 76 74 61 62 20 7b 0a  fcapable vtab {.
4ba0: 20 20 73 65 74 20 65 72 72 20 22 64 61 74 61 62    set err "datab
4bb0: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
4bc0: 73 20 6d 61 6c 66 6f 72 6d 65 64 22 0a 7d 20 65  s malformed".} e
4bd0: 6c 73 65 20 7b 0a 20 20 73 65 74 20 65 72 72 20  lse {.  set err 
4be0: 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62  {malformed datab
4bf0: 61 73 65 20 73 63 68 65 6d 61 20 28 73 71 6c 69  ase schema (sqli
4c00: 74 65 5f 73 65 71 75 65 6e 63 65 29 20 2d 20 6e  te_sequence) - n
4c10: 65 61 72 20 22 56 49 52 54 55 41 4c 22 3a 20 73  ear "VIRTUAL": s
4c20: 79 6e 74 61 78 20 65 72 72 6f 72 7d 0a 7d 0a 64  yntax error}.}.d
4c30: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 31  o_test autoinc-1
4c40: 32 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  2.3 {.  db close
4c50: 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74  .  forcedelete t
4c60: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33  est.db.  sqlite3
4c70: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 71   db test.db.  sq
4c80: 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20  lite3_db_config 
4c90: 64 62 20 44 45 46 45 4e 53 49 56 45 20 30 0a 20  db DEFENSIVE 0. 
4ca0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 43 52   db eval {.   CR
4cb0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
4cc0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
4cd0: 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  KEY AUTOINCREMEN
4ce0: 54 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20 49  T, b TEXT);.   I
4cf0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 62 29  NSERT INTO t1(b)
4d00: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 29 3b 0a   VALUES('one');.
4d10: 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62     PRAGMA writab
4d20: 6c 65 5f 73 63 68 65 6d 61 3d 6f 6e 3b 0a 20 20  le_schema=on;.  
4d30: 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d   UPDATE sqlite_m
4d40: 61 73 74 65 72 20 53 45 54 0a 20 20 20 20 20 73  aster SET.     s
4d50: 71 6c 3d 27 43 52 45 41 54 45 20 56 49 52 54 55  ql='CREATE VIRTU
4d60: 41 4c 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  AL TABLE sqlite_
4d70: 73 65 71 75 65 6e 63 65 20 55 53 49 4e 47 20 73  sequence USING s
4d80: 71 6c 69 74 65 5f 64 62 70 61 67 65 27 0a 20 20  qlite_dbpage'.  
4d90: 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 73 71    WHERE name='sq
4da0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 3b 0a  lite_sequence';.
4db0: 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20    }.  db close. 
4dc0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
4dd0: 2e 64 62 0a 20 20 73 65 74 20 72 65 73 20 5b 63  .db.  set res [c
4de0: 61 74 63 68 20 7b 64 62 20 65 76 61 6c 20 7b 0a  atch {db eval {.
4df0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4e00: 74 31 28 62 29 20 56 41 4c 55 45 53 28 27 74 77  t1(b) VALUES('tw
4e10: 6f 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  o');.  }} msg]. 
4e20: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 6d 73   lappend res $ms
4e30: 67 0a 7d 20 5b 6c 69 73 74 20 31 20 24 65 72 72  g.} [list 1 $err
4e40: 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  ].do_test autoin
4e50: 63 2d 31 32 2e 34 20 7b 0a 20 20 64 62 20 63 6c  c-12.4 {.  db cl
4e60: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
4e70: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
4e80: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4e90: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43   db eval {.    C
4ea0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
4eb0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4ec0: 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45   KEY AUTOINCREME
4ed0: 4e 54 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20  NT, b TEXT);.   
4ee0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
4ef0: 62 29 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 29  b) VALUES('one')
4f00: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
4f10: 4c 45 20 66 61 6b 65 28 6e 61 6d 65 20 54 45 58  LE fake(name TEX
4f20: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 73 65  T PRIMARY KEY,se
4f30: 71 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  q) WITHOUT ROWID
4f40: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 72 6f 6f 74  ;.  }.  set root
4f50: 31 20 5b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43  1 [db one {SELEC
4f60: 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20  T rootpage FROM 
4f70: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20 20  sqlite_master.  
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 73     WHERE name='s
4fa0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 7d  qlite_sequence'}
4fb0: 5d 0a 20 20 73 65 74 20 72 6f 6f 74 32 20 5b 64  ].  set root2 [d
4fc0: 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 72 6f  b one {SELECT ro
4fd0: 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69  otpage FROM sqli
4fe0: 74 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 20 20  te_master.      
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57                 W
5000: 48 45 52 45 20 6e 61 6d 65 3d 27 66 61 6b 65 27  HERE name='fake'
5010: 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  }].  sqlite3_db_
5020: 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e 53  config db DEFENS
5030: 49 56 45 20 30 0a 20 20 64 62 20 65 76 61 6c 20  IVE 0.  db eval 
5040: 7b 0a 20 20 20 50 52 41 47 4d 41 20 77 72 69 74  {.   PRAGMA writ
5050: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 6f 6e 3b 0a  able_schema=on;.
5060: 20 20 20 55 50 44 41 54 45 20 73 71 6c 69 74 65     UPDATE sqlite
5070: 5f 6d 61 73 74 65 72 20 53 45 54 20 72 6f 6f 74  _master SET root
5080: 70 61 67 65 3d 24 72 6f 6f 74 32 0a 20 20 20 20  page=$root2.    
5090: 57 48 45 52 45 20 6e 61 6d 65 3d 27 73 71 6c 69  WHERE name='sqli
50a0: 74 65 5f 73 65 71 75 65 6e 63 65 27 3b 0a 20 20  te_sequence';.  
50b0: 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d   UPDATE sqlite_m
50c0: 61 73 74 65 72 20 53 45 54 20 72 6f 6f 74 70 61  aster SET rootpa
50d0: 67 65 3d 24 72 6f 6f 74 31 0a 20 20 20 20 57 48  ge=$root1.    WH
50e0: 45 52 45 20 6e 61 6d 65 3d 27 66 61 6b 65 27 3b  ERE name='fake';
50f0: 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .  }.  db close.
5100: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5110: 74 2e 64 62 0a 20 20 73 65 74 20 72 65 73 20 5b  t.db.  set res [
5120: 63 61 74 63 68 20 7b 64 62 20 65 76 61 6c 20 7b  catch {db eval {
5130: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5140: 20 74 31 28 62 29 20 56 41 4c 55 45 53 28 27 74   t1(b) VALUES('t
5150: 77 6f 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a  wo');.  }} msg].
5160: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 6d    lappend res $m
5170: 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  sg.} {1 {databas
5180: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
5190: 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 62 72 65 61  malformed}}.brea
51a0: 6b 70 6f 69 6e 74 0a 64 6f 5f 74 65 73 74 20 61  kpoint.do_test a
51b0: 75 74 6f 69 6e 63 2d 31 32 2e 35 20 7b 0a 20 20  utoinc-12.5 {.  
51c0: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
51d0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
51e0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
51f0: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 64 62  .db.  sqlite3_db
5200: 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e  _config db DEFEN
5210: 53 49 56 45 20 30 0a 20 20 64 62 20 65 76 61 6c  SIVE 0.  db eval
5220: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
5230: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
5240: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54   PRIMARY KEY AUT
5250: 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 62 20 54 45  OINCREMENT, b TE
5260: 58 54 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  XT);.    INSERT 
5270: 49 4e 54 4f 20 74 31 28 62 29 20 56 41 4c 55 45  INTO t1(b) VALUE
5280: 53 28 27 6f 6e 65 27 29 3b 0a 20 20 20 20 50 52  S('one');.    PR
5290: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
52a0: 68 65 6d 61 3d 6f 6e 3b 0a 20 20 20 20 55 50 44  hema=on;.    UPD
52b0: 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ATE sqlite_maste
52c0: 72 20 53 45 54 0a 20 20 20 20 20 20 20 73 71 6c  r SET.       sql
52d0: 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  ='CREATE TABLE s
52e0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28 78  qlite_sequence(x
52f0: 29 27 0a 20 20 20 20 20 20 57 48 45 52 45 20 6e  )'.      WHERE n
5300: 61 6d 65 3d 27 73 71 6c 69 74 65 5f 73 65 71 75  ame='sqlite_sequ
5310: 65 6e 63 65 27 3b 0a 20 20 7d 0a 20 20 64 62 20  ence';.  }.  db 
5320: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
5330: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74  db test.db.  set
5340: 20 72 65 73 20 5b 63 61 74 63 68 20 7b 64 62 20   res [catch {db 
5350: 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  eval {.    INSER
5360: 54 20 49 4e 54 4f 20 74 31 28 62 29 20 56 41 4c  T INTO t1(b) VAL
5370: 55 45 53 28 27 74 77 6f 27 29 3b 0a 20 20 7d 7d  UES('two');.  }}
5380: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
5390: 72 65 73 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64  res $msg.} {1 {d
53a0: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
53b0: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
53c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  }.do_test autoin
53d0: 63 2d 31 32 2e 36 20 7b 0a 20 20 64 62 20 63 6c  c-12.6 {.  db cl
53e0: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
53f0: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
5400: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
5410: 20 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66   sqlite3_db_conf
5420: 69 67 20 64 62 20 44 45 46 45 4e 53 49 56 45 20  ig db DEFENSIVE 
5430: 30 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  0.  db eval {.  
5440: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5450: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
5460: 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52  ARY KEY AUTOINCR
5470: 45 4d 45 4e 54 2c 20 62 20 54 45 58 54 29 3b 0a  EMENT, b TEXT);.
5480: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5490: 74 31 28 62 29 20 56 41 4c 55 45 53 28 27 6f 6e  t1(b) VALUES('on
54a0: 65 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  e');.    PRAGMA 
54b0: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
54c0: 6f 6e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 73  on;.    UPDATE s
54d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54  qlite_master SET
54e0: 0a 20 20 20 20 20 20 20 73 71 6c 3d 27 43 52 45  .       sql='CRE
54f0: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
5500: 5f 73 65 71 75 65 6e 63 65 28 78 2c 79 20 49 4e  _sequence(x,y IN
5510: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
5520: 59 29 27 0a 20 20 20 20 20 20 57 48 45 52 45 20  Y)'.      WHERE 
5530: 6e 61 6d 65 3d 27 73 71 6c 69 74 65 5f 73 65 71  name='sqlite_seq
5540: 75 65 6e 63 65 27 3b 0a 20 20 7d 0a 20 20 64 62  uence';.  }.  db
5550: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
5560: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65   db test.db.  se
5570: 74 20 72 65 73 20 5b 63 61 74 63 68 20 7b 64 62  t res [catch {db
5580: 20 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45   eval {.    INSE
5590: 52 54 20 49 4e 54 4f 20 74 31 28 62 29 20 56 41  RT INTO t1(b) VA
55a0: 4c 55 45 53 28 27 74 77 6f 27 29 2c 28 27 74 68  LUES('two'),('th
55b0: 72 65 65 27 29 2c 28 27 66 6f 75 72 27 29 3b 0a  ree'),('four');.
55c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
55d0: 74 31 28 62 29 20 56 41 4c 55 45 53 28 27 66 69  t1(b) VALUES('fi
55e0: 76 65 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41  ve');.    PRAGMA
55f0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
5600: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
5610: 70 70 65 6e 64 20 72 65 73 20 24 6d 73 67 0a 7d  ppend res $msg.}
5620: 20 7b 30 20 6f 6b 7d 0a 64 6f 5f 74 65 73 74 20   {0 ok}.do_test 
5630: 61 75 74 6f 69 6e 63 2d 31 32 2e 37 20 7b 0a 20  autoinc-12.7 {. 
5640: 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63   db close.  forc
5650: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a  edelete test.db.
5660: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5670: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 64  t.db.  sqlite3_d
5680: 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45  b_config db DEFE
5690: 4e 53 49 56 45 20 30 0a 20 20 64 62 20 65 76 61  NSIVE 0.  db eva
56a0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
56b0: 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45  ABLE t1(a INTEGE
56c0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
56d0: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 62 20 54  TOINCREMENT, b T
56e0: 45 58 54 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  EXT);.    INSERT
56f0: 20 49 4e 54 4f 20 74 31 28 62 29 20 56 41 4c 55   INTO t1(b) VALU
5700: 45 53 28 27 6f 6e 65 27 29 3b 0a 20 20 20 20 50  ES('one');.    P
5710: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
5720: 63 68 65 6d 61 3d 6f 6e 3b 0a 20 20 20 20 55 50  chema=on;.    UP
5730: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
5740: 65 72 20 53 45 54 0a 20 20 20 20 20 20 20 73 71  er SET.       sq
5750: 6c 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20  l='CREATE TABLE 
5760: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28  sqlite_sequence(
5770: 79 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  y INTEGER PRIMAR
5780: 59 20 4b 45 59 2c 78 29 27 0a 20 20 20 20 20 20  Y KEY,x)'.      
5790: 57 48 45 52 45 20 6e 61 6d 65 3d 27 73 71 6c 69  WHERE name='sqli
57a0: 74 65 5f 73 65 71 75 65 6e 63 65 27 3b 0a 20 20  te_sequence';.  
57b0: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  }.  db close.  s
57c0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
57d0: 62 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  b.  set res [cat
57e0: 63 68 20 7b 64 62 20 65 76 61 6c 20 7b 0a 20 20  ch {db eval {.  
57f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
5800: 28 62 29 20 56 41 4c 55 45 53 28 27 74 77 6f 27  (b) VALUES('two'
5810: 29 2c 28 27 74 68 72 65 65 27 29 2c 28 27 66 6f  ),('three'),('fo
5820: 75 72 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ur');.    INSERT
5830: 20 49 4e 54 4f 20 74 31 28 62 29 20 56 41 4c 55   INTO t1(b) VALU
5840: 45 53 28 27 66 69 76 65 27 29 3b 0a 20 20 20 20  ES('five');.    
5850: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
5860: 5f 63 68 65 63 6b 3b 0a 20 20 7d 7d 20 6d 73 67  _check;.  }} msg
5870: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20  ].  lappend res 
5880: 24 6d 73 67 0a 7d 20 7b 30 20 6f 6b 7d 0a 0a 23  $msg.} {0 ok}..#
5890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74  ----------.reset
58e0: 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  _db.do_execsql_t
58f0: 65 73 74 20 31 33 2e 30 20 7b 0a 20 20 43 52 45  est 13.0 {.  CRE
5900: 41 54 45 20 54 41 42 4c 45 20 74 31 28 69 20 49  ATE TABLE t1(i I
5910: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
5920: 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  EY AUTOINCREMENT
5930: 2c 20 6a 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , j);.  CREATE T
5940: 41 42 4c 45 20 74 32 28 69 20 49 4e 54 45 47 45  ABLE t2(i INTEGE
5950: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
5960: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 6a 29 3b  TOINCREMENT, j);
5970: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
5980: 74 33 28 69 20 49 4e 54 45 47 45 52 20 50 52 49  t3(i INTEGER PRI
5990: 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43  MARY KEY AUTOINC
59a0: 52 45 4d 45 4e 54 2c 20 6a 29 3b 0a 0a 20 20 49  REMENT, j);..  I
59b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
59c0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 31 29 3b 0a 20  LUES(NULL, 1);. 
59d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
59e0: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 32 29 3b  VALUES(NULL, 2);
59f0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
5a00: 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 33  3 VALUES(NULL, 3
5a10: 29 3b 0a 0a 20 20 53 45 4c 45 43 54 20 6e 61 6d  );..  SELECT nam
5a20: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  e FROM sqlite_se
5a30: 71 75 65 6e 63 65 3b 0a 7d 20 7b 74 31 20 74 32  quence;.} {t1 t2
5a40: 20 74 33 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c   t3}..do_execsql
5a50: 5f 74 65 73 74 20 31 33 2e 31 20 7b 0a 20 20 55  _test 13.1 {.  U
5a60: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 73 65 71  PDATE sqlite_seq
5a70: 75 65 6e 63 65 20 53 45 54 20 6e 61 6d 65 3d 4e  uence SET name=N
5a80: 55 4c 4c 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  ULL WHERE name='
5a90: 74 32 27 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  t2';.  INSERT IN
5aa0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c  TO t3 VALUES(NUL
5ab0: 4c 2c 20 34 29 3b 0a 20 20 44 45 4c 45 54 45 20  L, 4);.  DELETE 
5ac0: 46 52 4f 4d 20 74 33 3b 0a 20 20 49 4e 53 45 52  FROM t3;.  INSER
5ad0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
5ae0: 28 4e 55 4c 4c 2c 20 35 29 3b 0a 20 20 53 45 4c  (NULL, 5);.  SEL
5af0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 7d  ECT * FROM t3;.}
5b00: 20 7b 33 20 35 7d 0a 0a 0a 66 69 6e 69 73 68 5f   {3 5}...finish_
5b10: 74 65 73 74 0a                                   test.