/ Hex Artifact Content
Login

Artifact 42e948fd6442f07d60acbd15d33fb86473e0ef63:


0000: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0010: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0020: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0030: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0040: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0050: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0060: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0070: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0080: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
0090: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00a0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00b0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00c0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00d0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00e0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
00f0: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0100: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 0a 23 0a 23 20 54 65 73 74 73 20 74 6f  ***.#.# Tests to
0160: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
0170: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
0180: 79 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  y last_insert_ro
0190: 77 69 64 28 29 20 28 4c 49 52 49 44 29 0a 23 20  wid() (LIRID).# 
01a0: 69 73 20 75 70 64 61 74 65 64 20 70 72 6f 70 65  is updated prope
01b0: 72 6c 79 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  rly, especially 
01c0: 69 6e 73 69 64 65 20 74 72 69 67 67 65 72 73 0a  inside triggers.
01d0: 23 0a 23 20 4e 6f 74 65 20 31 3a 20 69 6e 73 65  #.# Note 1: inse
01e0: 72 74 20 69 6e 74 6f 20 74 61 62 6c 65 20 69 73  rt into table is
01f0: 20 6e 6f 77 20 74 68 65 20 6f 6e 6c 79 20 73 74   now the only st
0200: 61 74 65 6d 65 6e 74 20 77 68 69 63 68 20 63 68  atement which ch
0210: 61 6e 67 65 73 20 4c 49 52 49 44 0a 23 20 4e 6f  anges LIRID.# No
0220: 74 65 20 32 3a 20 75 70 6f 6e 20 65 6e 74 72 79  te 2: upon entry
0230: 20 69 6e 74 6f 20 62 65 66 6f 72 65 20 6f 72 20   into before or 
0240: 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69 67 67  instead of trigg
0250: 65 72 73 2c 0a 23 20 20 20 20 20 20 20 20 20 20  ers,.#          
0260: 20 4c 49 52 49 44 20 69 73 20 75 6e 63 68 61 6e   LIRID is unchan
0270: 67 65 64 20 28 72 61 74 68 65 72 20 74 68 61 6e  ged (rather than
0280: 20 2d 31 29 0a 23 20 4e 6f 74 65 20 33 3a 20 4c   -1).# Note 3: L
0290: 49 52 49 44 20 69 73 20 63 68 61 6e 67 65 64 20  IRID is changed 
02a0: 77 69 74 68 69 6e 20 74 68 65 20 63 6f 6e 74 65  within the conte
02b0: 78 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  xt of a trigger,
02c0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 62 75 74  .#           but
02d0: 20 69 73 20 72 65 73 74 6f 72 65 64 20 6f 6e 63   is restored onc
02e0: 65 20 74 68 65 20 74 72 69 67 67 65 72 20 65 78  e the trigger ex
02f0: 69 74 73 0a 23 20 4e 6f 74 65 20 34 3a 20 4c 49  its.# Note 4: LI
0300: 52 49 44 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  RID is not chang
0310: 65 64 20 62 79 20 61 6e 20 69 6e 73 65 72 74 20  ed by an insert 
0320: 69 6e 74 6f 20 61 20 76 69 65 77 20 28 73 69 6e  into a view (sin
0330: 63 65 20 65 76 65 72 79 74 68 69 6e 67 0a 23 20  ce everything.# 
0340: 20 20 20 20 20 20 20 20 20 20 69 73 20 64 6f 6e            is don
0350: 65 20 77 69 74 68 69 6e 20 69 6e 73 74 65 61 64  e within instead
0360: 20 6f 66 20 74 72 69 67 67 65 72 20 63 6f 6e 74   of trigger cont
0370: 65 78 74 29 0a 23 0a 0a 73 65 74 20 74 65 73 74  ext).#..set test
0380: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0390: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
03a0: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
03b0: 2e 74 63 6c 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d  .tcl..# --------
03c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2d 2d 2d 0a 23 20 31 2e 78 20 2d 20 62 61 73  ----.# 1.x - bas
0410: 69 63 20 74 65 73 74 73 20 28 6e 6f 20 74 72 69  ic tests (no tri
0420: 67 67 65 72 73 29 0a 0a 23 20 4c 49 52 49 44 20  ggers)..# LIRID 
0430: 63 68 61 6e 67 65 64 20 70 72 6f 70 65 72 6c 79  changed properly
0440: 20 61 66 74 65 72 20 61 6e 20 69 6e 73 65 72 74   after an insert
0450: 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 0a 64 6f   into a table.do
0460: 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72 74  _test lastinsert
0470: 2d 31 2e 31 20 7b 0a 20 20 20 20 63 61 74 63 68  -1.1 {.    catch
0480: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 63 72  sql {.        cr
0490: 65 61 74 65 20 74 61 62 6c 65 20 74 31 20 28 6b  eate table t1 (k
04a0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
04b0: 20 6b 65 79 29 3b 0a 20 20 20 20 20 20 20 20 69   key);.        i
04c0: 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61  nsert into t1 va
04d0: 6c 75 65 73 20 28 31 29 3b 0a 20 20 20 20 20 20  lues (1);.      
04e0: 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31    insert into t1
04f0: 20 76 61 6c 75 65 73 20 28 4e 55 4c 4c 29 3b 0a   values (NULL);.
0500: 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 20 69          insert i
0510: 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 20 28 4e  nto t1 values (N
0520: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 73 65  ULL);.        se
0530: 6c 65 63 74 20 6c 61 73 74 5f 69 6e 73 65 72 74  lect last_insert
0540: 5f 72 6f 77 69 64 28 29 3b 0a 20 20 20 20 7d 0a  _rowid();.    }.
0550: 7d 20 7b 30 20 33 7d 0a 0a 23 20 45 56 49 44 45  } {0 3}..# EVIDE
0560: 4e 43 45 2d 4f 46 3a 20 52 2d 34 37 32 32 30 2d  NCE-OF: R-47220-
0570: 36 33 36 38 33 20 54 68 65 20 73 71 6c 69 74 65  63683 The sqlite
0580: 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
0590: 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 0a 23  wid() function.#
05a0: 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66   does not work f
05b0: 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  or WITHOUT ROWID
05c0: 20 74 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f 74 65   tables..#.do_te
05d0: 73 74 20 6c 61 73 74 69 6e 73 65 72 74 2d 31 2e  st lastinsert-1.
05e0: 31 77 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  1w {.    catchsq
05f0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 63 72 65 61  l {.        crea
0600: 74 65 20 74 61 62 6c 65 20 74 31 77 20 28 6b 20  te table t1w (k 
0610: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
0620: 6b 65 79 29 20 57 49 54 48 4f 55 54 20 52 4f 57  key) WITHOUT ROW
0630: 49 44 3b 0a 20 20 20 20 20 20 20 20 69 6e 73 65  ID;.        inse
0640: 72 74 20 69 6e 74 6f 20 74 31 77 20 76 61 6c 75  rt into t1w valu
0650: 65 73 20 28 31 32 33 34 35 36 29 3b 0a 20 20 20  es (123456);.   
0660: 20 20 20 20 20 73 65 6c 65 63 74 20 6c 61 73 74       select last
0670: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b  _insert_rowid();
0680: 20 2d 2d 20 72 65 74 75 72 6e 73 20 33 20 66 72   -- returns 3 fr
0690: 6f 6d 20 61 62 6f 76 65 2e 0a 20 20 20 20 7d 0a  om above..    }.
06a0: 7d 20 7b 30 20 33 7d 0a 0a 23 20 4c 49 52 49 44  } {0 3}..# LIRID
06b0: 20 75 6e 63 68 61 6e 67 65 64 20 61 66 74 65 72   unchanged after
06c0: 20 61 6e 20 75 70 64 61 74 65 20 6f 6e 20 61 20   an update on a 
06d0: 74 61 62 6c 65 0a 64 6f 5f 74 65 73 74 20 6c 61  table.do_test la
06e0: 73 74 69 6e 73 65 72 74 2d 31 2e 32 20 7b 0a 20  stinsert-1.2 {. 
06f0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
0700: 20 20 20 20 20 20 75 70 64 61 74 65 20 74 31 20        update t1 
0710: 73 65 74 20 6b 3d 34 20 77 68 65 72 65 20 6b 3d  set k=4 where k=
0720: 32 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65 63  2;.        selec
0730: 74 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  t last_insert_ro
0740: 77 69 64 28 29 3b 0a 20 20 20 20 7d 0a 7d 20 7b  wid();.    }.} {
0750: 30 20 33 7d 0a 0a 23 20 4c 49 52 49 44 20 75 6e  0 3}..# LIRID un
0760: 63 68 61 6e 67 65 64 20 61 66 74 65 72 20 61 20  changed after a 
0770: 64 65 6c 65 74 65 20 66 72 6f 6d 20 61 20 74 61  delete from a ta
0780: 62 6c 65 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  ble.do_test last
0790: 69 6e 73 65 72 74 2d 31 2e 33 20 7b 0a 20 20 20  insert-1.3 {.   
07a0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
07b0: 20 20 20 20 64 65 6c 65 74 65 20 66 72 6f 6d 20      delete from 
07c0: 74 31 20 77 68 65 72 65 20 6b 3d 34 3b 0a 20 20  t1 where k=4;.  
07d0: 20 20 20 20 20 20 73 65 6c 65 63 74 20 6c 61 73        select las
07e0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
07f0: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 33 7d 0a  ;.    }.} {0 3}.
0800: 0a 23 20 4c 49 52 49 44 20 75 6e 63 68 61 6e 67  .# LIRID unchang
0810: 65 64 20 61 66 74 65 72 20 63 72 65 61 74 65 20  ed after create 
0820: 74 61 62 6c 65 2f 76 69 65 77 20 73 74 61 74 65  table/view state
0830: 6d 65 6e 74 73 0a 64 6f 5f 74 65 73 74 20 6c 61  ments.do_test la
0840: 73 74 69 6e 73 65 72 74 2d 31 2e 34 2e 31 20 7b  stinsert-1.4.1 {
0850: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
0860: 20 20 20 20 20 20 20 20 63 72 65 61 74 65 20 74          create t
0870: 61 62 6c 65 20 74 32 20 28 6b 20 69 6e 74 65 67  able t2 (k integ
0880: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20  er primary key, 
0890: 76 61 6c 31 2c 20 76 61 6c 32 2c 20 76 61 6c 33  val1, val2, val3
08a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65 63  );.        selec
08b0: 74 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  t last_insert_ro
08c0: 77 69 64 28 29 3b 0a 20 20 20 20 7d 0a 7d 20 7b  wid();.    }.} {
08d0: 30 20 33 7d 0a 69 66 63 61 70 61 62 6c 65 20 76  0 3}.ifcapable v
08e0: 69 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20 6c 61  iew {.do_test la
08f0: 73 74 69 6e 73 65 72 74 2d 31 2e 34 2e 32 20 7b  stinsert-1.4.2 {
0900: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
0910: 20 20 20 20 20 20 20 20 63 72 65 61 74 65 20 76          create v
0920: 69 65 77 20 76 20 61 73 20 73 65 6c 65 63 74 20  iew v as select 
0930: 2a 20 66 72 6f 6d 20 74 31 3b 0a 20 20 20 20 20  * from t1;.     
0940: 20 20 20 73 65 6c 65 63 74 20 6c 61 73 74 5f 69     select last_i
0950: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20  nsert_rowid();. 
0960: 20 20 20 7d 0a 7d 20 7b 30 20 33 7d 0a 7d 20 3b     }.} {0 3}.} ;
0970: 23 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77  # ifcapable view
0980: 0a 0a 23 20 41 6c 6c 20 72 65 6d 61 69 6e 69 6e  ..# All remainin
0990: 67 20 74 65 73 74 73 20 69 6e 76 6f 6c 76 65 20  g tests involve 
09a0: 74 72 69 67 67 65 72 73 2e 20 20 53 6b 69 70 20  triggers.  Skip 
09b0: 74 68 65 6d 20 69 66 20 74 72 69 67 67 65 72 73  them if triggers
09c0: 20 61 72 65 20 6e 6f 74 0a 23 20 73 75 70 70 6f   are not.# suppo
09d0: 72 74 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  rted in this bui
09e0: 6c 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  ld..#.ifcapable 
09f0: 7b 21 74 72 69 67 67 65 72 7d 20 7b 0a 20 20 66  {!trigger} {.  f
0a00: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0a10: 75 72 6e 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d  urn.}..# -------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a60: 2d 2d 2d 2d 2d 0a 23 20 32 2e 78 20 2d 20 74 65  -----.# 2.x - te
0a70: 73 74 73 20 77 69 74 68 20 61 66 74 65 72 20 69  sts with after i
0a80: 6e 73 65 72 74 20 74 72 69 67 67 65 72 0a 0a 23  nsert trigger..#
0a90: 20 4c 49 52 49 44 20 63 68 61 6e 67 65 64 20 70   LIRID changed p
0aa0: 72 6f 70 65 72 6c 79 20 61 66 74 65 72 20 61 6e  roperly after an
0ab0: 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 61 62   insert into tab
0ac0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e  le containing an
0ad0: 20 61 66 74 65 72 20 74 72 69 67 67 65 72 0a 64   after trigger.d
0ae0: 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72  o_test lastinser
0af0: 74 2d 32 2e 31 20 7b 0a 20 20 20 20 63 61 74 63  t-2.1 {.    catc
0b00: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 64  hsql {.        d
0b10: 65 6c 65 74 65 20 66 72 6f 6d 20 74 32 3b 0a 20  elete from t2;. 
0b20: 20 20 20 20 20 20 20 63 72 65 61 74 65 20 74 72         create tr
0b30: 69 67 67 65 72 20 72 31 20 61 66 74 65 72 20 69  igger r1 after i
0b40: 6e 73 65 72 74 20 6f 6e 20 74 31 20 66 6f 72 20  nsert on t1 for 
0b50: 65 61 63 68 20 72 6f 77 20 62 65 67 69 6e 0a 20  each row begin. 
0b60: 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
0b70: 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75 65 73  t into t2 values
0b80: 20 28 4e 45 57 2e 6b 2a 32 2c 20 6c 61 73 74 5f   (NEW.k*2, last_
0b90: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 2c 20  insert_rowid(), 
0ba0: 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20  NULL, NULL);.   
0bb0: 20 20 20 20 20 20 20 20 20 75 70 64 61 74 65 20           update 
0bc0: 74 32 20 73 65 74 20 6b 3d 6b 2b 31 30 2c 20 76  t2 set k=k+10, v
0bd0: 61 6c 32 3d 31 30 30 2b 6c 61 73 74 5f 69 6e 73  al2=100+last_ins
0be0: 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20 20 20  ert_rowid();.   
0bf0: 20 20 20 20 20 20 20 20 20 75 70 64 61 74 65 20           update 
0c00: 74 32 20 73 65 74 20 76 61 6c 33 3d 31 30 30 30  t2 set val3=1000
0c10: 2b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  +last_insert_row
0c20: 69 64 28 29 3b 0a 20 20 20 20 20 20 20 20 65 6e  id();.        en
0c30: 64 3b 0a 20 20 20 20 20 20 20 20 69 6e 73 65 72  d;.        inser
0c40: 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73  t into t1 values
0c50: 20 28 31 33 29 3b 0a 20 20 20 20 20 20 20 20 73   (13);.        s
0c60: 65 6c 65 63 74 20 6c 61 73 74 5f 69 6e 73 65 72  elect last_inser
0c70: 74 5f 72 6f 77 69 64 28 29 3b 0a 20 20 20 20 7d  t_rowid();.    }
0c80: 0a 7d 20 7b 30 20 31 33 7d 0a 0a 23 20 4c 49 52  .} {0 13}..# LIR
0c90: 49 44 20 65 71 75 61 6c 73 20 4e 45 57 2e 6b 20  ID equals NEW.k 
0ca0: 75 70 6f 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  upon entry into 
0cb0: 61 66 74 65 72 20 69 6e 73 65 72 74 20 74 72 69  after insert tri
0cc0: 67 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73  gger.do_test las
0cd0: 74 69 6e 73 65 72 74 2d 32 2e 32 20 7b 0a 20 20  tinsert-2.2 {.  
0ce0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
0cf0: 20 20 20 20 20 73 65 6c 65 63 74 20 76 61 6c 31       select val1
0d00: 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d 0a   from t2;.    }.
0d10: 7d 20 7b 30 20 31 33 7d 0a 0a 23 20 4c 49 52 49  } {0 13}..# LIRI
0d20: 44 20 63 68 61 6e 67 65 64 20 70 72 6f 70 65 72  D changed proper
0d30: 6c 79 20 62 79 20 69 6e 73 65 72 74 20 77 69 74  ly by insert wit
0d40: 68 69 6e 20 63 6f 6e 74 65 78 74 20 6f 66 20 61  hin context of a
0d50: 66 74 65 72 20 69 6e 73 65 72 74 20 74 72 69 67  fter insert trig
0d60: 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  ger.do_test last
0d70: 69 6e 73 65 72 74 2d 32 2e 33 20 7b 0a 20 20 20  insert-2.3 {.   
0d80: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0d90: 20 20 20 20 73 65 6c 65 63 74 20 76 61 6c 32 20      select val2 
0da0: 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d 0a 7d  from t2;.    }.}
0db0: 20 7b 30 20 31 32 36 7d 0a 0a 23 20 4c 49 52 49   {0 126}..# LIRI
0dc0: 44 20 75 6e 63 68 61 6e 67 65 64 20 62 79 20 75  D unchanged by u
0dd0: 70 64 61 74 65 20 77 69 74 68 69 6e 20 63 6f 6e  pdate within con
0de0: 74 65 78 74 20 6f 66 20 61 66 74 65 72 20 69 6e  text of after in
0df0: 73 65 72 74 20 74 72 69 67 67 65 72 0a 64 6f 5f  sert trigger.do_
0e00: 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72 74 2d  test lastinsert-
0e10: 32 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73  2.4 {.    catchs
0e20: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c  ql {.        sel
0e30: 65 63 74 20 76 61 6c 33 20 66 72 6f 6d 20 74 32  ect val3 from t2
0e40: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 30 32  ;.    }.} {0 102
0e50: 36 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  6}..# ----------
0e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ea0: 2d 2d 0a 23 20 33 2e 78 20 2d 20 74 65 73 74 73  --.# 3.x - tests
0eb0: 20 77 69 74 68 20 61 66 74 65 72 20 75 70 64 61   with after upda
0ec0: 74 65 20 74 72 69 67 67 65 72 0a 0a 23 20 4c 49  te trigger..# LI
0ed0: 52 49 44 20 6e 6f 74 20 63 68 61 6e 67 65 64 20  RID not changed 
0ee0: 61 66 74 65 72 20 61 6e 20 75 70 64 61 74 65 20  after an update 
0ef0: 6f 6e 74 6f 20 61 20 74 61 62 6c 65 20 63 6f 6e  onto a table con
0f00: 74 61 69 6e 69 6e 67 20 61 6e 20 61 66 74 65 72  taining an after
0f10: 20 74 72 69 67 67 65 72 0a 64 6f 5f 74 65 73 74   trigger.do_test
0f20: 20 6c 61 73 74 69 6e 73 65 72 74 2d 33 2e 31 20   lastinsert-3.1 
0f30: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
0f40: 0a 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20  .        delete 
0f50: 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 20 20 20  from t2;.       
0f60: 20 64 72 6f 70 20 74 72 69 67 67 65 72 20 72 31   drop trigger r1
0f70: 3b 0a 20 20 20 20 20 20 20 20 63 72 65 61 74 65  ;.        create
0f80: 20 74 72 69 67 67 65 72 20 72 31 20 61 66 74 65   trigger r1 afte
0f90: 72 20 75 70 64 61 74 65 20 6f 6e 20 74 31 20 66  r update on t1 f
0fa0: 6f 72 20 65 61 63 68 20 72 6f 77 20 62 65 67 69  or each row begi
0fb0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  n.            in
0fc0: 73 65 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c  sert into t2 val
0fd0: 75 65 73 20 28 4e 45 57 2e 6b 2a 32 2c 20 6c 61  ues (NEW.k*2, la
0fe0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
0ff0: 29 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  ), NULL, NULL);.
1000: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61              upda
1010: 74 65 20 74 32 20 73 65 74 20 6b 3d 6b 2b 31 30  te t2 set k=k+10
1020: 2c 20 76 61 6c 32 3d 31 30 30 2b 6c 61 73 74 5f  , val2=100+last_
1030: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a  insert_rowid();.
1040: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61              upda
1050: 74 65 20 74 32 20 73 65 74 20 76 61 6c 33 3d 31  te t2 set val3=1
1060: 30 30 30 2b 6c 61 73 74 5f 69 6e 73 65 72 74 5f  000+last_insert_
1070: 72 6f 77 69 64 28 29 3b 0a 20 20 20 20 20 20 20  rowid();.       
1080: 20 65 6e 64 3b 0a 20 20 20 20 20 20 20 20 75 70   end;.        up
1090: 64 61 74 65 20 74 31 20 73 65 74 20 6b 3d 31 34  date t1 set k=14
10a0: 20 77 68 65 72 65 20 6b 3d 33 3b 0a 20 20 20 20   where k=3;.    
10b0: 20 20 20 20 73 65 6c 65 63 74 20 6c 61 73 74 5f      select last_
10c0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a  insert_rowid();.
10d0: 20 20 20 20 7d 0a 7d 20 7b 30 20 31 33 7d 0a 0a      }.} {0 13}..
10e0: 23 20 4c 49 52 49 44 20 75 6e 63 68 61 6e 67 65  # LIRID unchange
10f0: 64 20 75 70 6f 6e 20 65 6e 74 72 79 20 69 6e 74  d upon entry int
1100: 6f 20 61 66 74 65 72 20 75 70 64 61 74 65 20 74  o after update t
1110: 72 69 67 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c  rigger.do_test l
1120: 61 73 74 69 6e 73 65 72 74 2d 33 2e 32 20 7b 0a  astinsert-3.2 {.
1130: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
1140: 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 76 61         select va
1150: 6c 31 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20  l1 from t2;.    
1160: 7d 0a 7d 20 7b 30 20 31 33 7d 0a 0a 23 20 4c 49  }.} {0 13}..# LI
1170: 52 49 44 20 63 68 61 6e 67 65 64 20 70 72 6f 70  RID changed prop
1180: 65 72 6c 79 20 62 79 20 69 6e 73 65 72 74 20 77  erly by insert w
1190: 69 74 68 69 6e 20 63 6f 6e 74 65 78 74 20 6f 66  ithin context of
11a0: 20 61 66 74 65 72 20 75 70 64 61 74 65 20 74 72   after update tr
11b0: 69 67 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61  igger.do_test la
11c0: 73 74 69 6e 73 65 72 74 2d 33 2e 33 20 7b 0a 20  stinsert-3.3 {. 
11d0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
11e0: 20 20 20 20 20 20 73 65 6c 65 63 74 20 76 61 6c        select val
11f0: 32 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d  2 from t2;.    }
1200: 0a 7d 20 7b 30 20 31 32 38 7d 0a 0a 23 20 4c 49  .} {0 128}..# LI
1210: 52 49 44 20 75 6e 63 68 61 6e 67 65 64 20 62 79  RID unchanged by
1220: 20 75 70 64 61 74 65 20 77 69 74 68 69 6e 20 63   update within c
1230: 6f 6e 74 65 78 74 20 6f 66 20 61 66 74 65 72 20  ontext of after 
1240: 75 70 64 61 74 65 20 74 72 69 67 67 65 72 0a 64  update trigger.d
1250: 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72  o_test lastinser
1260: 74 2d 33 2e 34 20 7b 0a 20 20 20 20 63 61 74 63  t-3.4 {.    catc
1270: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 73  hsql {.        s
1280: 65 6c 65 63 74 20 76 61 6c 33 20 66 72 6f 6d 20  elect val3 from 
1290: 74 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31  t2;.    }.} {0 1
12a0: 30 32 38 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d  028}..# --------
12b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12f0: 2d 2d 2d 2d 0a 23 20 34 2e 78 20 2d 20 74 65 73  ----.# 4.x - tes
1300: 74 73 20 77 69 74 68 20 69 6e 73 74 65 61 64 20  ts with instead 
1310: 6f 66 20 69 6e 73 65 72 74 20 74 72 69 67 67 65  of insert trigge
1320: 72 0a 23 20 54 68 65 73 65 20 6d 61 79 20 6e 6f  r.# These may no
1330: 74 20 62 65 20 72 75 6e 20 69 66 20 65 69 74 68  t be run if eith
1340: 65 72 20 76 69 65 77 73 20 6f 72 20 74 72 69 67  er views or trig
1350: 67 65 72 73 20 77 65 72 65 20 64 69 73 61 62 6c  gers were disabl
1360: 65 64 20 61 74 20 0a 23 20 63 6f 6d 70 69 6c 65  ed at .# compile
1370: 2d 74 69 6d 65 0a 0a 69 66 63 61 70 61 62 6c 65  -time..ifcapable
1380: 20 7b 76 69 65 77 20 26 26 20 74 72 69 67 67 65   {view && trigge
1390: 72 7d 20 7b 0a 23 20 4c 49 52 49 44 20 6e 6f 74  r} {.# LIRID not
13a0: 20 63 68 61 6e 67 65 64 20 61 66 74 65 72 20 61   changed after a
13b0: 6e 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 76 69  n insert into vi
13c0: 65 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e  ew containing an
13d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69 67   instead of trig
13e0: 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  ger.do_test last
13f0: 69 6e 73 65 72 74 2d 34 2e 31 20 7b 0a 20 20 20  insert-4.1 {.   
1400: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1410: 20 20 20 20 64 65 6c 65 74 65 20 66 72 6f 6d 20      delete from 
1420: 74 32 3b 0a 20 20 20 20 20 20 20 20 64 72 6f 70  t2;.        drop
1430: 20 74 72 69 67 67 65 72 20 72 31 3b 0a 20 20 20   trigger r1;.   
1440: 20 20 20 20 20 63 72 65 61 74 65 20 74 72 69 67       create trig
1450: 67 65 72 20 72 31 20 69 6e 73 74 65 61 64 20 6f  ger r1 instead o
1460: 66 20 69 6e 73 65 72 74 20 6f 6e 20 76 20 66 6f  f insert on v fo
1470: 72 20 65 61 63 68 20 72 6f 77 20 62 65 67 69 6e  r each row begin
1480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73  .            ins
1490: 65 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75  ert into t2 valu
14a0: 65 73 20 28 4e 45 57 2e 6b 2a 32 2c 20 6c 61 73  es (NEW.k*2, las
14b0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
14c0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20  , NULL, NULL);. 
14d0: 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61 74             updat
14e0: 65 20 74 32 20 73 65 74 20 6b 3d 6b 2b 31 30 2c  e t2 set k=k+10,
14f0: 20 76 61 6c 32 3d 31 30 30 2b 6c 61 73 74 5f 69   val2=100+last_i
1500: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20  nsert_rowid();. 
1510: 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61 74             updat
1520: 65 20 74 32 20 73 65 74 20 76 61 6c 33 3d 31 30  e t2 set val3=10
1530: 30 30 2b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  00+last_insert_r
1540: 6f 77 69 64 28 29 3b 0a 20 20 20 20 20 20 20 20  owid();.        
1550: 65 6e 64 3b 0a 20 20 20 20 20 20 20 20 69 6e 73  end;.        ins
1560: 65 72 74 20 69 6e 74 6f 20 76 20 76 61 6c 75 65  ert into v value
1570: 73 20 28 31 35 29 3b 0a 20 20 20 20 20 20 20 20  s (15);.        
1580: 73 65 6c 65 63 74 20 6c 61 73 74 5f 69 6e 73 65  select last_inse
1590: 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20 20 20 20  rt_rowid();.    
15a0: 7d 0a 7d 20 7b 30 20 31 33 7d 0a 0a 23 20 4c 49  }.} {0 13}..# LI
15b0: 52 49 44 20 75 6e 63 68 61 6e 67 65 64 20 75 70  RID unchanged up
15c0: 6f 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 69 6e  on entry into in
15d0: 73 74 65 61 64 20 6f 66 20 74 72 69 67 67 65 72  stead of trigger
15e0: 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73  .do_test lastins
15f0: 65 72 74 2d 34 2e 32 20 7b 0a 20 20 20 20 63 61  ert-4.2 {.    ca
1600: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  tchsql {.       
1610: 20 73 65 6c 65 63 74 20 76 61 6c 31 20 66 72 6f   select val1 fro
1620: 6d 20 74 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30  m t2;.    }.} {0
1630: 20 31 33 7d 0a 0a 23 20 4c 49 52 49 44 20 63 68   13}..# LIRID ch
1640: 61 6e 67 65 64 20 70 72 6f 70 65 72 6c 79 20 62  anged properly b
1650: 79 20 69 6e 73 65 72 74 20 77 69 74 68 69 6e 20  y insert within 
1660: 63 6f 6e 74 65 78 74 20 6f 66 20 69 6e 73 74 65  context of inste
1670: 61 64 20 6f 66 20 74 72 69 67 67 65 72 0a 64 6f  ad of trigger.do
1680: 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72 74  _test lastinsert
1690: 2d 34 2e 33 20 7b 0a 20 20 20 20 63 61 74 63 68  -4.3 {.    catch
16a0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 73 65  sql {.        se
16b0: 6c 65 63 74 20 76 61 6c 32 20 66 72 6f 6d 20 74  lect val2 from t
16c0: 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 33  2;.    }.} {0 13
16d0: 30 7d 0a 0a 23 20 4c 49 52 49 44 20 75 6e 63 68  0}..# LIRID unch
16e0: 61 6e 67 65 64 20 62 79 20 75 70 64 61 74 65 20  anged by update 
16f0: 77 69 74 68 69 6e 20 63 6f 6e 74 65 78 74 20 6f  within context o
1700: 66 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69  f instead of tri
1710: 67 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73  gger.do_test las
1720: 74 69 6e 73 65 72 74 2d 34 2e 34 20 7b 0a 20 20  tinsert-4.4 {.  
1730: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1740: 20 20 20 20 20 73 65 6c 65 63 74 20 76 61 6c 33       select val3
1750: 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d 0a   from t2;.    }.
1760: 7d 20 7b 30 20 31 30 33 30 7d 0a 7d 20 3b 23 20  } {0 1030}.} ;# 
1770: 69 66 63 61 70 61 62 6c 65 20 28 76 69 65 77 20  ifcapable (view 
1780: 26 26 20 74 72 69 67 67 65 72 29 0a 0a 23 20 2d  && trigger)..# -
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 35 2e  -----------.# 5.
17e0: 78 20 2d 20 74 65 73 74 73 20 77 69 74 68 20 62  x - tests with b
17f0: 65 66 6f 72 65 20 64 65 6c 65 74 65 20 74 72 69  efore delete tri
1800: 67 67 65 72 0a 0a 23 20 4c 49 52 49 44 20 6e 6f  gger..# LIRID no
1810: 74 20 63 68 61 6e 67 65 64 20 61 66 74 65 72 20  t changed after 
1820: 61 20 64 65 6c 65 74 65 20 6f 6e 20 61 20 74 61  a delete on a ta
1830: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ble containing a
1840: 20 62 65 66 6f 72 65 20 74 72 69 67 67 65 72 0a   before trigger.
1850: 64 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65  do_test lastinse
1860: 72 74 2d 35 2e 31 20 7b 0a 20 20 20 20 63 61 74  rt-5.1 {.    cat
1870: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 64 72  chsql {.      dr
1880: 6f 70 20 74 72 69 67 67 65 72 20 72 31 3b 20 20  op trigger r1;  
1890: 2d 2d 20 54 68 69 73 20 77 61 73 20 6e 6f 74 20  -- This was not 
18a0: 63 72 65 61 74 65 64 20 69 66 20 76 69 65 77 73  created if views
18b0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 2e 0a 20   are disabled.. 
18c0: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
18d0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 64 65 6c 65  l {.        dele
18e0: 74 65 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20  te from t2;.    
18f0: 20 20 20 20 63 72 65 61 74 65 20 74 72 69 67 67      create trigg
1900: 65 72 20 72 31 20 62 65 66 6f 72 65 20 64 65 6c  er r1 before del
1910: 65 74 65 20 6f 6e 20 74 31 20 66 6f 72 20 65 61  ete on t1 for ea
1920: 63 68 20 72 6f 77 20 62 65 67 69 6e 0a 20 20 20  ch row begin.   
1930: 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 20           insert 
1940: 69 6e 74 6f 20 74 32 20 76 61 6c 75 65 73 20 28  into t2 values (
1950: 37 37 2c 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  77, last_insert_
1960: 72 6f 77 69 64 28 29 2c 20 4e 55 4c 4c 2c 20 4e  rowid(), NULL, N
1970: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
1980: 20 20 75 70 64 61 74 65 20 74 32 20 73 65 74 20    update t2 set 
1990: 6b 3d 6b 2b 31 30 2c 20 76 61 6c 32 3d 31 30 30  k=k+10, val2=100
19a0: 2b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  +last_insert_row
19b0: 69 64 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  id();.          
19c0: 20 20 75 70 64 61 74 65 20 74 32 20 73 65 74 20    update t2 set 
19d0: 76 61 6c 33 3d 31 30 30 30 2b 6c 61 73 74 5f 69  val3=1000+last_i
19e0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20  nsert_rowid();. 
19f0: 20 20 20 20 20 20 20 65 6e 64 3b 0a 20 20 20 20         end;.    
1a00: 20 20 20 20 64 65 6c 65 74 65 20 66 72 6f 6d 20      delete from 
1a10: 74 31 20 77 68 65 72 65 20 6b 3d 31 3b 0a 20 20  t1 where k=1;.  
1a20: 20 20 20 20 20 20 73 65 6c 65 63 74 20 6c 61 73        select las
1a30: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1a40: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 33 7d  ;.    }.} {0 13}
1a50: 0a 0a 23 20 4c 49 52 49 44 20 75 6e 63 68 61 6e  ..# LIRID unchan
1a60: 67 65 64 20 75 70 6f 6e 20 65 6e 74 72 79 20 69  ged upon entry i
1a70: 6e 74 6f 20 64 65 6c 65 74 65 20 74 72 69 67 67  nto delete trigg
1a80: 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69  er.do_test lasti
1a90: 6e 73 65 72 74 2d 35 2e 32 20 7b 0a 20 20 20 20  nsert-5.2 {.    
1aa0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
1ab0: 20 20 20 73 65 6c 65 63 74 20 76 61 6c 31 20 66     select val1 f
1ac0: 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d 0a 7d 20  rom t2;.    }.} 
1ad0: 7b 30 20 31 33 7d 0a 0a 23 20 4c 49 52 49 44 20  {0 13}..# LIRID 
1ae0: 63 68 61 6e 67 65 64 20 70 72 6f 70 65 72 6c 79  changed properly
1af0: 20 62 79 20 69 6e 73 65 72 74 20 77 69 74 68 69   by insert withi
1b00: 6e 20 63 6f 6e 74 65 78 74 20 6f 66 20 64 65 6c  n context of del
1b10: 65 74 65 20 74 72 69 67 67 65 72 0a 64 6f 5f 74  ete trigger.do_t
1b20: 65 73 74 20 6c 61 73 74 69 6e 73 65 72 74 2d 35  est lastinsert-5
1b30: 2e 33 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  .3 {.    catchsq
1b40: 6c 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 65  l {.        sele
1b50: 63 74 20 76 61 6c 32 20 66 72 6f 6d 20 74 32 3b  ct val2 from t2;
1b60: 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 37 37 7d  .    }.} {0 177}
1b70: 0a 0a 23 20 4c 49 52 49 44 20 75 6e 63 68 61 6e  ..# LIRID unchan
1b80: 67 65 64 20 62 79 20 75 70 64 61 74 65 20 77 69  ged by update wi
1b90: 74 68 69 6e 20 63 6f 6e 74 65 78 74 20 6f 66 20  thin context of 
1ba0: 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 0a 64  delete trigger.d
1bb0: 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73 65 72  o_test lastinser
1bc0: 74 2d 35 2e 34 20 7b 0a 20 20 20 20 63 61 74 63  t-5.4 {.    catc
1bd0: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 73  hsql {.        s
1be0: 65 6c 65 63 74 20 76 61 6c 33 20 66 72 6f 6d 20  elect val3 from 
1bf0: 74 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31  t2;.    }.} {0 1
1c00: 30 37 37 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d  077}..# --------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c50: 2d 2d 2d 2d 0a 23 20 36 2e 78 20 2d 20 74 65 73  ----.# 6.x - tes
1c60: 74 73 20 77 69 74 68 20 69 6e 73 74 65 61 64 20  ts with instead 
1c70: 6f 66 20 75 70 64 61 74 65 20 74 72 69 67 67 65  of update trigge
1c80: 72 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20  r.# These tests 
1c90: 6d 61 79 20 6e 6f 74 20 72 75 6e 20 69 66 20 65  may not run if e
1ca0: 69 74 68 65 72 20 76 69 65 77 73 20 6f 72 20 74  ither views or t
1cb0: 72 69 67 67 65 72 73 20 61 72 65 20 64 69 73 61  riggers are disa
1cc0: 62 6c 65 64 2e 0a 0a 69 66 63 61 70 61 62 6c 65  bled...ifcapable
1cd0: 20 7b 76 69 65 77 20 26 26 20 74 72 69 67 67 65   {view && trigge
1ce0: 72 7d 20 7b 0a 23 20 4c 49 52 49 44 20 6e 6f 74  r} {.# LIRID not
1cf0: 20 63 68 61 6e 67 65 64 20 61 66 74 65 72 20 61   changed after a
1d00: 6e 20 75 70 64 61 74 65 20 6f 6e 20 61 20 76 69  n update on a vi
1d10: 65 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e  ew containing an
1d20: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69 67   instead of trig
1d30: 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  ger.do_test last
1d40: 69 6e 73 65 72 74 2d 36 2e 31 20 7b 0a 20 20 20  insert-6.1 {.   
1d50: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1d60: 20 20 20 20 64 65 6c 65 74 65 20 66 72 6f 6d 20      delete from 
1d70: 74 32 3b 0a 20 20 20 20 20 20 20 20 64 72 6f 70  t2;.        drop
1d80: 20 74 72 69 67 67 65 72 20 72 31 3b 0a 20 20 20   trigger r1;.   
1d90: 20 20 20 20 20 63 72 65 61 74 65 20 74 72 69 67       create trig
1da0: 67 65 72 20 72 31 20 69 6e 73 74 65 61 64 20 6f  ger r1 instead o
1db0: 66 20 75 70 64 61 74 65 20 6f 6e 20 76 20 66 6f  f update on v fo
1dc0: 72 20 65 61 63 68 20 72 6f 77 20 62 65 67 69 6e  r each row begin
1dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73  .            ins
1de0: 65 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75  ert into t2 valu
1df0: 65 73 20 28 4e 45 57 2e 6b 2a 32 2c 20 6c 61 73  es (NEW.k*2, las
1e00: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1e10: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20  , NULL, NULL);. 
1e20: 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61 74             updat
1e30: 65 20 74 32 20 73 65 74 20 6b 3d 6b 2b 31 30 2c  e t2 set k=k+10,
1e40: 20 76 61 6c 32 3d 31 30 30 2b 6c 61 73 74 5f 69   val2=100+last_i
1e50: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20  nsert_rowid();. 
1e60: 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61 74             updat
1e70: 65 20 74 32 20 73 65 74 20 76 61 6c 33 3d 31 30  e t2 set val3=10
1e80: 30 30 2b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  00+last_insert_r
1e90: 6f 77 69 64 28 29 3b 0a 20 20 20 20 20 20 20 20  owid();.        
1ea0: 65 6e 64 3b 0a 20 20 20 20 20 20 20 20 75 70 64  end;.        upd
1eb0: 61 74 65 20 76 20 73 65 74 20 6b 3d 31 36 20 77  ate v set k=16 w
1ec0: 68 65 72 65 20 6b 3d 31 34 3b 0a 20 20 20 20 20  here k=14;.     
1ed0: 20 20 20 73 65 6c 65 63 74 20 6c 61 73 74 5f 69     select last_i
1ee0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3b 0a 20  nsert_rowid();. 
1ef0: 20 20 20 7d 0a 7d 20 7b 30 20 31 33 7d 0a 0a 23     }.} {0 13}..#
1f00: 20 4c 49 52 49 44 20 75 6e 63 68 61 6e 67 65 64   LIRID unchanged
1f10: 20 75 70 6f 6e 20 65 6e 74 72 79 20 69 6e 74 6f   upon entry into
1f20: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69 67   instead of trig
1f30: 67 65 72 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  ger.do_test last
1f40: 69 6e 73 65 72 74 2d 36 2e 32 20 7b 0a 20 20 20  insert-6.2 {.   
1f50: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1f60: 20 20 20 20 73 65 6c 65 63 74 20 76 61 6c 31 20      select val1 
1f70: 66 72 6f 6d 20 74 32 3b 0a 20 20 20 20 7d 0a 7d  from t2;.    }.}
1f80: 20 7b 30 20 31 33 7d 0a 0a 23 20 4c 49 52 49 44   {0 13}..# LIRID
1f90: 20 63 68 61 6e 67 65 64 20 70 72 6f 70 65 72 6c   changed properl
1fa0: 79 20 62 79 20 69 6e 73 65 72 74 20 77 69 74 68  y by insert with
1fb0: 69 6e 20 63 6f 6e 74 65 78 74 20 6f 66 20 69 6e  in context of in
1fc0: 73 74 65 61 64 20 6f 66 20 74 72 69 67 67 65 72  stead of trigger
1fd0: 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e 73  .do_test lastins
1fe0: 65 72 74 2d 36 2e 33 20 7b 0a 20 20 20 20 63 61  ert-6.3 {.    ca
1ff0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  tchsql {.       
2000: 20 73 65 6c 65 63 74 20 76 61 6c 32 20 66 72 6f   select val2 fro
2010: 6d 20 74 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30  m t2;.    }.} {0
2020: 20 31 33 32 7d 0a 0a 23 20 4c 49 52 49 44 20 75   132}..# LIRID u
2030: 6e 63 68 61 6e 67 65 64 20 62 79 20 75 70 64 61  nchanged by upda
2040: 74 65 20 77 69 74 68 69 6e 20 63 6f 6e 74 65 78  te within contex
2050: 74 20 6f 66 20 69 6e 73 74 65 61 64 20 6f 66 20  t of instead of 
2060: 74 72 69 67 67 65 72 0a 64 6f 5f 74 65 73 74 20  trigger.do_test 
2070: 6c 61 73 74 69 6e 73 65 72 74 2d 36 2e 34 20 7b  lastinsert-6.4 {
2080: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
2090: 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 76          select v
20a0: 61 6c 33 20 66 72 6f 6d 20 74 32 3b 0a 20 20 20  al3 from t2;.   
20b0: 20 7d 0a 7d 20 7b 30 20 31 30 33 32 7d 0a 7d 20   }.} {0 1032}.} 
20c0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 28 76 69  ;# ifcapable (vi
20d0: 65 77 20 26 26 20 74 72 69 67 67 65 72 29 0a 0a  ew && trigger)..
20e0: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
2130: 20 37 2e 78 20 2d 20 63 6f 6d 70 6c 65 78 20 74   7.x - complex t
2140: 65 73 74 73 20 77 69 74 68 20 74 65 6d 70 6f 72  ests with tempor
2150: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 6e  ary tables and n
2160: 65 73 74 65 64 20 69 6e 73 74 65 61 64 20 6f 66  ested instead of
2170: 20 74 72 69 67 67 65 72 73 0a 23 20 54 68 65 73   triggers.# Thes
2180: 65 20 64 6f 20 6e 6f 74 20 72 75 6e 20 69 66 20  e do not run if 
2190: 76 69 65 77 73 20 6f 72 20 74 72 69 67 67 65 72  views or trigger
21a0: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 2e 0a  s are disabled..
21b0: 0a 69 66 63 61 70 61 62 6c 65 20 7b 74 72 69 67  .ifcapable {trig
21c0: 67 65 72 20 26 26 20 76 69 65 77 20 26 26 20 74  ger && view && t
21d0: 65 6d 70 64 62 7d 20 7b 0a 64 6f 5f 74 65 73 74  empdb} {.do_test
21e0: 20 6c 61 73 74 69 6e 73 65 72 74 2d 37 2e 31 20   lastinsert-7.1 
21f0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
2200: 0a 20 20 20 20 20 20 20 20 64 72 6f 70 20 74 61  .        drop ta
2210: 62 6c 65 20 74 31 3b 20 64 72 6f 70 20 74 61 62  ble t1; drop tab
2220: 6c 65 20 74 32 3b 20 64 72 6f 70 20 74 72 69 67  le t2; drop trig
2230: 67 65 72 20 72 31 3b 0a 20 20 20 20 20 20 20 20  ger r1;.        
2240: 63 72 65 61 74 65 20 74 65 6d 70 20 74 61 62 6c  create temp tabl
2250: 65 20 74 31 20 28 6b 20 69 6e 74 65 67 65 72 20  e t1 (k integer 
2260: 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20  primary key);.  
2270: 20 20 20 20 20 20 63 72 65 61 74 65 20 74 65 6d        create tem
2280: 70 20 74 61 62 6c 65 20 74 32 20 28 6b 20 69 6e  p table t2 (k in
2290: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
22a0: 79 29 3b 0a 20 20 20 20 20 20 20 20 63 72 65 61  y);.        crea
22b0: 74 65 20 74 65 6d 70 20 76 69 65 77 20 76 31 20  te temp view v1 
22c0: 61 73 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d  as select * from
22d0: 20 74 31 3b 0a 20 20 20 20 20 20 20 20 63 72 65   t1;.        cre
22e0: 61 74 65 20 74 65 6d 70 20 76 69 65 77 20 76 32  ate temp view v2
22f0: 20 61 73 20 73 65 6c 65 63 74 20 2a 20 66 72 6f   as select * fro
2300: 6d 20 74 32 3b 0a 20 20 20 20 20 20 20 20 63 72  m t2;.        cr
2310: 65 61 74 65 20 74 65 6d 70 20 74 61 62 6c 65 20  eate temp table 
2320: 72 69 64 20 28 6b 20 69 6e 74 65 67 65 72 20 70  rid (k integer p
2330: 72 69 6d 61 72 79 20 6b 65 79 2c 20 72 69 6e 2c  rimary key, rin,
2340: 20 72 6f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   rout);.        
2350: 69 6e 73 65 72 74 20 69 6e 74 6f 20 72 69 64 20  insert into rid 
2360: 76 61 6c 75 65 73 20 28 31 2c 20 4e 55 4c 4c 2c  values (1, NULL,
2370: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20   NULL);.        
2380: 69 6e 73 65 72 74 20 69 6e 74 6f 20 72 69 64 20  insert into rid 
2390: 76 61 6c 75 65 73 20 28 32 2c 20 4e 55 4c 4c 2c  values (2, NULL,
23a0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20   NULL);.        
23b0: 63 72 65 61 74 65 20 74 65 6d 70 20 74 72 69 67  create temp trig
23c0: 67 65 72 20 72 31 20 69 6e 73 74 65 61 64 20 6f  ger r1 instead o
23d0: 66 20 69 6e 73 65 72 74 20 6f 6e 20 76 31 20 66  f insert on v1 f
23e0: 6f 72 20 65 61 63 68 20 72 6f 77 20 62 65 67 69  or each row begi
23f0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70  n.            up
2400: 64 61 74 65 20 72 69 64 20 73 65 74 20 72 69 6e  date rid set rin
2410: 3d 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  =last_insert_row
2420: 69 64 28 29 20 77 68 65 72 65 20 6b 3d 31 3b 0a  id() where k=1;.
2430: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
2440: 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65  rt into t1 value
2450: 73 20 28 31 30 30 2b 4e 45 57 2e 6b 29 3b 0a 20  s (100+NEW.k);. 
2460: 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
2470: 74 20 69 6e 74 6f 20 76 32 20 76 61 6c 75 65 73  t into v2 values
2480: 20 28 31 30 30 2b 6c 61 73 74 5f 69 6e 73 65 72   (100+last_inser
2490: 74 5f 72 6f 77 69 64 28 29 29 3b 0a 20 20 20 20  t_rowid());.    
24a0: 20 20 20 20 20 20 20 20 75 70 64 61 74 65 20 72          update r
24b0: 69 64 20 73 65 74 20 72 6f 75 74 3d 6c 61 73 74  id set rout=last
24c0: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
24d0: 77 68 65 72 65 20 6b 3d 31 3b 0a 20 20 20 20 20  where k=1;.     
24e0: 20 20 20 65 6e 64 3b 0a 20 20 20 20 20 20 20 20     end;.        
24f0: 63 72 65 61 74 65 20 74 65 6d 70 20 74 72 69 67  create temp trig
2500: 67 65 72 20 72 32 20 69 6e 73 74 65 61 64 20 6f  ger r2 instead o
2510: 66 20 69 6e 73 65 72 74 20 6f 6e 20 76 32 20 66  f insert on v2 f
2520: 6f 72 20 65 61 63 68 20 72 6f 77 20 62 65 67 69  or each row begi
2530: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70  n.            up
2540: 64 61 74 65 20 72 69 64 20 73 65 74 20 72 69 6e  date rid set rin
2550: 3d 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  =last_insert_row
2560: 69 64 28 29 20 77 68 65 72 65 20 6b 3d 32 3b 0a  id() where k=2;.
2570: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
2580: 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75 65  rt into t2 value
2590: 73 20 28 31 30 30 30 2b 4e 45 57 2e 6b 29 3b 0a  s (1000+NEW.k);.
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 64 61              upda
25b0: 74 65 20 72 69 64 20 73 65 74 20 72 6f 75 74 3d  te rid set rout=
25c0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
25d0: 64 28 29 20 77 68 65 72 65 20 6b 3d 32 3b 0a 20  d() where k=2;. 
25e0: 20 20 20 20 20 20 20 65 6e 64 3b 0a 20 20 20 20         end;.    
25f0: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
2600: 74 31 20 76 61 6c 75 65 73 20 28 37 37 29 3b 0a  t1 values (77);.
2610: 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 6c          select l
2620: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2630: 28 29 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 37  ();.    }.} {0 7
2640: 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74  7}..do_test last
2650: 69 6e 73 65 72 74 2d 37 2e 32 20 7b 0a 20 20 20  insert-7.2 {.   
2660: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
2670: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
2680: 76 31 20 76 61 6c 75 65 73 20 28 35 29 3b 0a 20  v1 values (5);. 
2690: 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 6c 61         select la
26a0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
26b0: 29 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 37 37  );.    }.} {0 77
26c0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69  }..do_test lasti
26d0: 6e 73 65 72 74 2d 37 2e 33 20 7b 0a 20 20 20 20  nsert-7.3 {.    
26e0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
26f0: 20 20 20 73 65 6c 65 63 74 20 72 69 6e 20 66 72     select rin fr
2700: 6f 6d 20 72 69 64 20 77 68 65 72 65 20 6b 3d 31  om rid where k=1
2710: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 37 37 7d  ;.    }.} {0 77}
2720: 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69 6e  ..do_test lastin
2730: 73 65 72 74 2d 37 2e 34 20 7b 0a 20 20 20 20 63  sert-7.4 {.    c
2740: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
2750: 20 20 73 65 6c 65 63 74 20 72 6f 75 74 20 66 72    select rout fr
2760: 6f 6d 20 72 69 64 20 77 68 65 72 65 20 6b 3d 31  om rid where k=1
2770: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 30 35  ;.    }.} {0 105
2780: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69  }..do_test lasti
2790: 6e 73 65 72 74 2d 37 2e 35 20 7b 0a 20 20 20 20  nsert-7.5 {.    
27a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
27b0: 20 20 20 73 65 6c 65 63 74 20 72 69 6e 20 66 72     select rin fr
27c0: 6f 6d 20 72 69 64 20 77 68 65 72 65 20 6b 3d 32  om rid where k=2
27d0: 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 30 35  ;.    }.} {0 105
27e0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73 74 69  }..do_test lasti
27f0: 6e 73 65 72 74 2d 37 2e 36 20 7b 0a 20 20 20 20  nsert-7.6 {.    
2800: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
2810: 20 20 20 73 65 6c 65 63 74 20 72 6f 75 74 20 66     select rout f
2820: 72 6f 6d 20 72 69 64 20 77 68 65 72 65 20 6b 3d  rom rid where k=
2830: 32 3b 0a 20 20 20 20 7d 0a 7d 20 7b 30 20 31 32  2;.    }.} {0 12
2840: 30 35 7d 0a 0a 64 6f 5f 74 65 73 74 20 6c 61 73  05}..do_test las
2850: 74 69 6e 73 65 72 74 2d 38 2e 31 20 7b 0a 20 20  tinsert-8.1 {.  
2860: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
2870: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
2880: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2890: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
28a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
28b0: 4b 45 59 2c 20 79 29 3b 0a 20 20 20 20 43 52 45  KEY, y);.    CRE
28c0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
28d0: 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  b);.    CREATE T
28e0: 52 49 47 47 45 52 20 61 66 74 65 72 5f 74 32 20  RIGGER after_t2 
28f0: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
2900: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49  t2 BEGIN.      I
2910: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
2920: 4c 55 45 53 28 6e 65 77 2e 78 2c 20 6e 65 77 2e  LUES(new.x, new.
2930: 79 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  y);.    END;.   
2940: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
2950: 56 41 4c 55 45 53 28 35 30 30 30 30 30 30 30 30  VALUES(500000000
2960: 30 2c 20 31 29 3b 0a 20 20 20 20 53 45 4c 45 43  0, 1);.    SELEC
2970: 54 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  T last_insert_ro
2980: 77 69 64 28 29 3b 0a 20 20 7d 0a 7d 20 35 30 30  wid();.  }.} 500
2990: 30 30 30 30 30 30 30 0a 0a 64 6f 5f 74 65 73 74  0000000..do_test
29a0: 20 6c 61 73 74 69 6e 73 65 72 74 2d 39 2e 31 20   lastinsert-9.1 
29b0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53  {.  db eval {INS
29c0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
29d0: 45 53 28 31 32 33 34 35 36 37 38 39 30 31 32 33  ES(1234567890123
29e0: 34 35 2c 30 29 7d 0a 20 20 64 62 20 6c 61 73 74  45,0)}.  db last
29f0: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 0a 7d 20  _insert_rowid.} 
2a00: 7b 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35  {123456789012345
2a10: 7d 0a 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  }...} ;# ifcapab
2a20: 6c 65 20 28 76 69 65 77 20 26 26 20 74 72 69 67  le (view && trig
2a30: 67 65 72 29 0a 0a 66 69 6e 69 73 68 5f 74 65 73  ger)..finish_tes
2a40: 74 0a                                            t.