/ Hex Artifact Content
Login

Artifact c8b095bcd8f6626d763b11468b49d3f12e7e0e5dd14e0e44a773088bc1b4542c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
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 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 47 69 76 65 6e 20 61 20 63 75 72 73 6f  ** Given a curso
05c0: 72 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 20 63  r number and a c
05d0: 6f 6c 75 6d 6e 20 66 6f 72 20 61 20 74 61 62 6c  olumn for a tabl
05e0: 65 20 6f 72 20 69 6e 64 65 78 2c 20 63 6f 6d 70  e or index, comp
05f0: 75 74 65 20 61 0a 2a 2a 20 68 61 73 68 20 76 61  ute a.** hash va
0600: 6c 75 65 20 66 6f 72 20 75 73 65 20 69 6e 20 74  lue for use in t
0610: 68 65 20 4d 65 6d 2e 69 54 61 62 43 6f 6c 48 61  he Mem.iTabColHa
0620: 73 68 20 76 61 6c 75 65 2e 20 20 54 68 65 20 69  sh value.  The i
0630: 54 61 62 43 6f 6c 48 61 73 68 0a 2a 2a 20 63 6f  TabColHash.** co
0640: 6c 75 6d 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  lumn is only use
0650: 64 20 66 6f 72 20 76 65 72 69 66 69 63 61 74 69  d for verificati
0660: 6f 6e 20 2d 20 69 74 20 69 73 20 6f 6d 69 74 74  on - it is omitt
0670: 65 64 20 66 72 6f 6d 20 70 72 6f 64 75 63 74 69  ed from producti
0680: 6f 6e 0a 2a 2a 20 62 75 69 6c 64 73 2e 20 20 43  on.** builds.  C
0690: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 68 61  ollisions are ha
06a0: 72 6d 6c 65 73 73 20 69 6e 20 74 68 65 20 73 65  rmless in the se
06b0: 6e 73 65 20 74 68 61 74 20 74 68 65 20 63 6f 72  nse that the cor
06c0: 72 65 63 74 20 61 6e 73 77 65 72 0a 2a 2a 20 73  rect answer.** s
06d0: 74 69 6c 6c 20 72 65 73 75 6c 74 73 2e 20 20 54  till results.  T
06e0: 68 65 20 6f 6e 6c 79 20 68 61 72 6d 20 6f 66 20  he only harm of 
06f0: 63 6f 6c 6c 69 73 69 6f 6e 73 20 69 73 20 74 68  collisions is th
0700: 61 74 20 74 68 65 79 20 63 61 6e 20 70 6f 74 65  at they can pote
0710: 6e 74 69 61 6c 0a 2a 2a 20 72 65 64 75 63 65 20  ntial.** reduce 
0720: 63 6f 6c 75 6d 6e 2d 63 61 63 68 65 20 65 72 72  column-cache err
0730: 6f 72 20 64 65 74 65 63 74 69 6f 6e 20 64 75 72  or detection dur
0740: 69 6e 67 20 53 51 4c 49 54 45 5f 44 45 42 55 47  ing SQLITE_DEBUG
0750: 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4e   builds..**.** N
0760: 6f 20 76 61 6c 69 64 20 68 61 73 68 20 73 68 6f  o valid hash sho
0770: 75 6c 64 20 62 65 20 30 2e 0a 2a 2f 0a 23 64 65  uld be 0..*/.#de
0780: 66 69 6e 65 20 54 61 62 6c 65 43 6f 6c 75 6d 6e  fine TableColumn
0790: 48 61 73 68 28 54 2c 43 29 20 20 28 28 28 75 33  Hash(T,C)  (((u3
07a0: 32 29 28 54 29 3c 3c 31 36 29 5e 28 75 33 32 29  2)(T)<<16)^(u32)
07b0: 28 43 2b 32 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  (C+2))../*.** Th
07c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62  e following glob
07d0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
07e0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 76 65 72 79  ncremented every
07f0: 20 74 69 6d 65 20 61 20 63 75 72 73 6f 72 0a 2a   time a cursor.*
0800: 2a 20 6d 6f 76 65 73 2c 20 65 69 74 68 65 72 20  * moves, either 
0810: 62 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 58 58  by the OP_SeekXX
0820: 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f 72 20 4f 50  , OP_Next, or OP
0830: 5f 50 72 65 76 20 6f 70 63 6f 64 65 73 2e 20 20  _Prev opcodes.  
0840: 54 68 65 20 74 65 73 74 0a 2a 2a 20 70 72 6f 63  The test.** proc
0850: 65 64 75 72 65 73 20 75 73 65 20 74 68 69 73 20  edures use this 
0860: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0870: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 6e  ake sure that in
0880: 64 69 63 65 73 20 61 72 65 0a 2a 2a 20 77 6f 72  dices are.** wor
0890: 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20  king correctly. 
08a0: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 20 68   This variable h
08b0: 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f  as no function o
08c0: 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20  ther than to.** 
08d0: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
08e0: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
08f0: 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  n of the library
0900: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0910: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0920: 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
0930: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
0940: 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20 67 6c  .** When this gl
0950: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
0960: 20 70 6f 73 69 74 69 76 65 2c 20 69 74 20 67 65   positive, it ge
0970: 74 73 20 64 65 63 72 65 6d 65 6e 74 65 64 20 6f  ts decremented o
0980: 6e 63 65 20 62 65 66 6f 72 65 0a 2a 2a 20 65 61  nce before.** ea
0990: 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ch instruction i
09a0: 6e 20 74 68 65 20 56 44 42 45 2e 20 20 57 68 65  n the VDBE.  Whe
09b0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 7a 65 72  n it reaches zer
09c0: 6f 2c 20 74 68 65 20 75 31 2e 69 73 49 6e 74 65  o, the u1.isInte
09d0: 72 72 75 70 74 65 64 0a 2a 2a 20 66 69 65 6c 64  rrupted.** field
09e0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 20   of the sqlite3 
09f0: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 65 74  structure is set
0a00: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69 6d   in order to sim
0a10: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
0a20: 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  pt..**.** This f
0a30: 61 63 69 6c 69 74 79 20 69 73 20 75 73 65 64 20  acility is used 
0a40: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0a50: 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49 74 20 64  oses only.  It d
0a60: 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74 69 6f 6e  oes not function
0a70: 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64 69 6e 61  .** in an ordina
0a80: 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  ry build..*/.#if
0a90: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0aa0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
0ab0: 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d 20 30 3b  rrupt_count = 0;
0ac0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0ad0: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0ae0: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0af0: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65  mented each type
0b00: 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
0b10: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
0b20: 65 64 2e 20 20 54 68 65 20 74 65 73 74 20 70 72  ed.  The test pr
0b30: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0b40: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0b50: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 0a   make sure that.
0b60: 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73 20 6f 63  ** sorting is oc
0b70: 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f 74 20 6f  curring or not o
0b80: 63 63 75 72 72 69 6e 67 20 61 74 20 61 70 70 72  ccurring at appr
0b90: 6f 70 72 69 61 74 65 20 74 69 6d 65 73 2e 20 20  opriate times.  
0ba0: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0bb0: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0bc0: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0bd0: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0be0: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0bf0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0c00: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0c10: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0c20: 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
0c30: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0c40: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
0c50: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 72 65  obal variable re
0c60: 63 6f 72 64 73 20 74 68 65 20 73 69 7a 65 20 6f  cords the size o
0c70: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 4d 45  f the largest ME
0c80: 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20 4d 45 4d  M_Blob.** or MEM
0c90: 5f 53 74 72 20 74 68 61 74 20 68 61 73 20 62 65  _Str that has be
0ca0: 65 6e 20 75 73 65 64 20 62 79 20 61 20 56 44 42  en used by a VDB
0cb0: 45 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 74  E opcode.  The t
0cc0: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 0a 2a  est procedures.*
0cd0: 2a 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72  * use this infor
0ce0: 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73  mation to make s
0cf0: 75 72 65 20 74 68 61 74 20 74 68 65 20 7a 65 72  ure that the zer
0d00: 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69 6f 6e 61  o-blob functiona
0d10: 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f 72 6b 69  lity.** is worki
0d20: 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 20  ng correctly.   
0d30: 54 68 69 73 20 76 61 72 69 61 62 6c 65 20 68 61  This variable ha
0d40: 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74  s no function ot
0d50: 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68  her than to.** h
0d60: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d70: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d80: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
0d90: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0da0: 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74  E_TEST.int sqlit
0db0: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
0dc0: 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  = 0;.static void
0dd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0de0: 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  ze(Mem *p){.  if
0df0: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
0e00: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
0e10: 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e 73 71 6c  )!=0 && p->n>sql
0e20: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0e30: 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  e ){.    sqlite3
0e40: 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20  _max_blobsize = 
0e50: 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  p->n;.  }.}.#end
0e60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  if../*.** This m
0e70: 61 63 72 6f 20 65 76 61 6c 75 61 74 65 73 20 74  acro evaluates t
0e80: 6f 20 74 72 75 65 20 69 66 20 65 69 74 68 65 72  o true if either
0e90: 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
0ea0: 20 6f 72 20 74 68 65 20 70 72 65 75 70 64 61 74   or the preupdat
0eb0: 65 0a 2a 2a 20 68 6f 6f 6b 20 61 72 65 20 65 6e  e.** hook are en
0ec0: 61 62 6c 65 64 20 66 6f 72 20 64 61 74 61 62 61  abled for databa
0ed0: 73 65 20 63 6f 6e 6e 65 63 74 20 44 42 2e 0a 2a  se connect DB..*
0ee0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0ef0: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
0f00: 5f 48 4f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 48  _HOOK.# define H
0f10: 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 44  AS_UPDATE_HOOK(D
0f20: 42 29 20 28 28 44 42 29 2d 3e 78 50 72 65 55 70  B) ((DB)->xPreUp
0f30: 64 61 74 65 43 61 6c 6c 62 61 63 6b 7c 7c 28 44  dateCallback||(D
0f40: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0f50: 61 63 6b 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ack).#else.# def
0f60: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0f70: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0f80: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 0a  UpdateCallback).
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
0fa0: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
0fb0: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
0fc0: 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65 20  ented each time 
0fd0: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
0fe0: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
0ff0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1000: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
1010: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
1020: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
1030: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
1040: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
1050: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
1060: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1070: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1080: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1090: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
10a0: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
10b0: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
10c0: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
10d0: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
10e0: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
10f0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1100: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
1110: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
1120: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
1130: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
1140: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
1150: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
1160: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1170: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1180: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1190: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
11a0: 28 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42  (SQLITE_UNTESTAB
11b0: 4c 45 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44  LE).# define UPD
11c0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
11d0: 28 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c  (P)  updateMaxBl
11e0: 6f 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a  obsize(P).#else.
11f0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
1200: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a  MAX_BLOBSIZE(P).
1210: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
1220: 76 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f  voke the VDBE co
1230: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c  verage callback,
1240: 20 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63   if that callbac
1250: 6b 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  k is defined.  T
1260: 68 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  his.** feature i
1270: 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20  s used for test 
1280: 73 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e  suite validation
1290: 20 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e   only and does n
12a0: 6f 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20  ot appear an.** 
12b0: 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
12c0: 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e  s..**.** M is an
12d0: 20 69 6e 74 65 67 65 72 20 62 65 74 77 65 65 6e   integer between
12e0: 20 32 20 61 6e 64 20 34 2e 20 20 32 20 69 6e 64   2 and 4.  2 ind
12f0: 69 63 61 74 65 73 20 61 20 6f 72 64 69 6e 61 72  icates a ordinar
1300: 79 20 74 77 6f 2d 77 61 79 0a 2a 2a 20 62 72 61  y two-way.** bra
1310: 6e 63 68 20 28 49 3d 30 20 6d 65 61 6e 73 20 66  nch (I=0 means f
1320: 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
1330: 49 3d 31 20 6d 65 61 6e 73 20 74 61 6b 65 6e 29  I=1 means taken)
1340: 2e 20 20 33 20 69 6e 64 69 63 61 74 65 73 0a 2a  .  3 indicates.*
1350: 2a 20 61 20 33 2d 77 61 79 20 62 72 61 6e 63 68  * a 3-way branch
1360: 20 77 68 65 72 65 20 74 68 65 20 74 68 69 72 64   where the third
1370: 20 77 61 79 20 69 73 20 77 68 65 6e 20 6f 6e 65   way is when one
1380: 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 73   of the operands
1390: 20 69 73 0a 2a 2a 20 4e 55 4c 4c 2e 20 20 34 20   is.** NULL.  4 
13a0: 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 4f 50  indicates the OP
13b0: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 69 6f  _Jump instructio
13c0: 6e 20 77 68 69 63 68 20 68 61 73 20 74 68 72 65  n which has thre
13d0: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 73 0a 2a  e destinations.*
13e0: 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  * depending on w
13f0: 68 65 74 68 65 72 20 74 68 65 20 66 69 72 73 74  hether the first
1400: 20 6f 70 65 72 61 6e 64 20 69 73 20 6c 65 73 73   operand is less
1410: 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c   than, equal to,
1420: 20 6f 72 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   or greater.** t
1430: 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20  han the second. 
1440: 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20  .**.** iSrcLine 
1450: 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  is the source co
1460: 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68  de line (from th
1470: 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f  e __LINE__ macro
1480: 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61  ) that.** genera
1490: 74 65 64 20 74 68 65 20 56 44 42 45 20 69 6e 73  ted the VDBE ins
14a0: 74 72 75 63 74 69 6f 6e 20 63 6f 6d 62 69 6e 65  truction combine
14b0: 64 20 77 69 74 68 20 66 6c 61 67 20 62 69 74 73  d with flag bits
14c0: 2e 20 20 54 68 65 20 73 6f 75 72 63 65 0a 2a 2a  .  The source.**
14d0: 20 63 6f 64 65 20 6c 69 6e 65 20 6e 75 6d 62 65   code line numbe
14e0: 72 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 77 65  r is in the lowe
14f0: 72 20 32 34 20 62 69 74 73 20 6f 66 20 69 53 72  r 24 bits of iSr
1500: 63 4c 69 6e 65 20 61 6e 64 20 74 68 65 20 75 70  cLine and the up
1510: 70 65 72 0a 2a 2a 20 38 20 62 79 74 65 73 20 61  per.** 8 bytes a
1520: 72 65 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c  re flags.  The l
1530: 6f 77 65 72 20 74 68 72 65 65 20 62 69 74 73 20  ower three bits 
1540: 6f 66 20 74 68 65 20 66 6c 61 67 73 20 69 6e 64  of the flags ind
1550: 69 63 61 74 65 0a 2a 2a 20 76 61 6c 75 65 73 20  icate.** values 
1560: 66 6f 72 20 49 20 74 68 61 74 20 73 68 6f 75 6c  for I that shoul
1570: 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 20 20  d never occur.  
1580: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
1590: 74 68 65 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a  the branch is.**
15a0: 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2c 20 74   always taken, t
15b0: 68 65 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20  he flags should 
15c0: 62 65 20 30 78 30 35 20 73 69 6e 63 65 20 74 68  be 0x05 since th
15d0: 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 20 61  e fall-through a
15e0: 6e 64 0a 2a 2a 20 61 6c 74 65 72 6e 61 74 65 20  nd.** alternate 
15f0: 62 72 61 6e 63 68 20 61 72 65 20 6e 65 76 65 72  branch are never
1600: 20 74 61 6b 65 6e 2e 20 20 49 66 20 61 20 62 72   taken.  If a br
1610: 61 6e 63 68 20 69 73 20 6e 65 76 65 72 20 74 61  anch is never ta
1620: 6b 65 6e 20 74 68 65 6e 0a 2a 2a 20 66 6c 61 67  ken then.** flag
1630: 73 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 36  s should be 0x06
1640: 20 73 69 6e 63 65 20 6f 6e 6c 79 20 74 68 65 20   since only the 
1650: 66 61 6c 6c 2d 74 68 72 6f 75 67 68 20 61 70 70  fall-through app
1660: 72 6f 61 63 68 20 69 73 20 61 6c 6c 6f 77 65 64  roach is allowed
1670: 2e 0a 2a 2a 0a 2a 2a 20 42 69 74 20 30 78 30 34  ..**.** Bit 0x04
1680: 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 69 6e   of the flags in
1690: 64 69 63 61 74 65 73 20 61 6e 20 4f 50 5f 4a 75  dicates an OP_Ju
16a0: 6d 70 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69  mp opcode that i
16b0: 73 20 6f 6e 6c 79 0a 2a 2a 20 69 6e 74 65 72 65  s only.** intere
16c0: 73 74 65 64 20 69 6e 20 65 71 75 61 6c 20 6f 72  sted in equal or
16d0: 20 6e 6f 74 2d 65 71 75 61 6c 2e 20 20 49 6e 20   not-equal.  In 
16e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 49 3d 3d  other words, I==
16f0: 30 20 61 6e 64 20 49 3d 3d 32 0a 2a 2a 20 73 68  0 and I==2.** sh
1700: 6f 75 6c 64 20 62 65 20 74 72 65 61 74 65 64 20  ould be treated 
1710: 74 68 65 20 73 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20  the same..**.** 
1720: 53 69 6e 63 65 20 6f 6e 6c 79 20 61 20 6c 69 6e  Since only a lin
1730: 65 20 6e 75 6d 62 65 72 20 69 73 20 72 65 74 61  e number is reta
1740: 69 6e 65 64 2c 20 6e 6f 74 20 74 68 65 20 66 69  ined, not the fi
1750: 6c 65 6e 61 6d 65 2c 20 74 68 69 73 20 6d 61 63  lename, this mac
1760: 72 6f 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ro.** only works
1770: 20 66 6f 72 20 61 6d 61 6c 67 61 6d 61 74 69 6f   for amalgamatio
1780: 6e 20 62 75 69 6c 64 73 2e 20 20 42 75 74 20 74  n builds.  But t
1790: 68 61 74 20 69 73 20 6f 6b 2c 20 73 69 6e 63 65  hat is ok, since
17a0: 20 74 68 65 73 65 20 6d 61 63 72 6f 73 0a 2a 2a   these macros.**
17b0: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
17c0: 73 20 65 78 63 65 70 74 20 66 6f 72 20 73 70 65  s except for spe
17d0: 63 69 61 6c 20 62 75 69 6c 64 73 20 75 73 65 64  cial builds used
17e0: 20 74 6f 20 6d 65 61 73 75 72 65 20 74 65 73 74   to measure test
17f0: 20 63 6f 76 65 72 61 67 65 2e 0a 2a 2f 0a 23 69   coverage..*/.#i
1800: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1810: 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29  E_VDBE_COVERAGE)
1820: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
1830: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23  anchTaken(I,M).#
1840: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64  else.# define Vd
1850: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c  beBranchTaken(I,
1860: 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63  M) vdbeTakeBranc
1870: 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c  h(pOp->iSrcLine,
1880: 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f  I,M).  static vo
1890: 69 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63  id vdbeTakeBranc
18a0: 68 28 75 33 32 20 69 53 72 63 4c 69 6e 65 2c 20  h(u32 iSrcLine, 
18b0: 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20  u8 I, u8 M){.   
18c0: 20 75 38 20 6d 4e 65 76 65 72 3b 0a 20 20 20 20   u8 mNever;.    
18d0: 61 73 73 65 72 74 28 20 49 3c 3d 32 20 29 3b 20  assert( I<=2 ); 
18e0: 20 2f 2a 20 30 3a 20 66 61 6c 6c 20 74 68 72 6f   /* 0: fall thro
18f0: 75 67 68 2c 20 20 31 3a 20 74 61 6b 65 6e 2c 20  ugh,  1: taken, 
1900: 20 32 3a 20 61 6c 74 65 72 6e 61 74 65 20 74 61   2: alternate ta
1910: 6b 65 6e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ken */.    asser
1920: 74 28 20 4d 3c 3d 34 20 29 3b 20 20 2f 2a 20 32  t( M<=4 );  /* 2
1930: 3a 20 74 77 6f 2d 77 61 79 20 62 72 61 6e 63 68  : two-way branch
1940: 2c 20 33 3a 20 74 68 72 65 65 2d 77 61 79 20 62  , 3: three-way b
1950: 72 61 6e 63 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d  ranch, 4: OP_Jum
1960: 70 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  p */.    assert(
1970: 20 49 3c 4d 20 29 3b 20 20 20 2f 2a 20 49 20 63   I<M );   /* I c
1980: 61 6e 20 6f 6e 6c 79 20 62 65 20 32 20 69 66 20  an only be 2 if 
1990: 4d 20 69 73 20 33 20 6f 72 20 34 20 2a 2f 0a 20  M is 3 or 4 */. 
19a0: 20 20 20 2f 2a 20 54 72 61 6e 73 66 6f 72 6d 20     /* Transform 
19b0: 49 20 66 72 6f 6d 20 61 20 69 6e 74 65 67 65 72  I from a integer
19c0: 20 5b 30 2c 31 2c 32 5d 20 69 6e 74 6f 20 61 20   [0,1,2] into a 
19d0: 62 69 74 6d 61 73 6b 20 6f 66 20 5b 31 2c 32 2c  bitmask of [1,2,
19e0: 34 5d 20 2a 2f 0a 20 20 20 20 49 20 3d 20 31 3c  4] */.    I = 1<
19f0: 3c 49 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 75  <I;.    /* The u
1a00: 70 70 65 72 20 38 20 62 69 74 73 20 6f 66 20 69  pper 8 bits of i
1a10: 53 72 63 4c 69 6e 65 20 61 72 65 20 66 6c 61 67  SrcLine are flag
1a20: 73 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68  s.  The lower th
1a30: 72 65 65 20 62 69 74 73 20 6f 66 0a 20 20 20 20  ree bits of.    
1a40: 2a 2a 20 74 68 65 20 66 6c 61 67 73 20 69 6e 64  ** the flags ind
1a50: 69 63 61 74 65 20 64 69 72 65 63 74 69 6f 6e 73  icate directions
1a60: 20 74 68 61 74 20 74 68 65 20 62 72 61 6e 63 68   that the branch
1a70: 20 63 61 6e 20 6e 65 76 65 72 20 67 6f 2e 20 20   can never go.  
1a80: 49 66 0a 20 20 20 20 2a 2a 20 61 20 62 72 61 6e  If.    ** a bran
1a90: 63 68 20 72 65 61 6c 6c 79 20 64 6f 65 73 20 67  ch really does g
1aa0: 6f 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 6f 73  o in one of thos
1ab0: 65 20 64 69 72 65 63 74 69 6f 6e 73 2c 20 61 73  e directions, as
1ac0: 73 65 72 74 20 72 69 67 68 74 0a 20 20 20 20 2a  sert right.    *
1ad0: 2a 20 61 77 61 79 2e 20 2a 2f 0a 20 20 20 20 6d  * away. */.    m
1ae0: 4e 65 76 65 72 20 3d 20 69 53 72 63 4c 69 6e 65  Never = iSrcLine
1af0: 20 3e 3e 20 32 34 3b 0a 20 20 20 20 61 73 73 65   >> 24;.    asse
1b00: 72 74 28 20 28 49 20 26 20 6d 4e 65 76 65 72 29  rt( (I & mNever)
1b10: 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 73  ==0 );.    if( s
1b20: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1b30: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
1b40: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
1b50: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 49 20 7c  O_TEST*/.    I |
1b60: 3d 20 6d 4e 65 76 65 72 3b 0a 20 20 20 20 69 66  = mNever;.    if
1b70: 28 20 4d 3d 3d 32 20 29 20 49 20 7c 3d 20 30 78  ( M==2 ) I |= 0x
1b80: 30 34 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 34  04;.    if( M==4
1b90: 20 29 7b 0a 20 20 20 20 20 20 49 20 7c 3d 20 30   ){.      I |= 0
1ba0: 78 30 38 3b 0a 20 20 20 20 20 20 69 66 28 20 28  x08;.      if( (
1bb0: 6d 4e 65 76 65 72 26 30 78 30 38 29 21 3d 30 20  mNever&0x08)!=0 
1bc0: 26 26 20 28 49 26 30 78 30 35 29 21 3d 30 29 20  && (I&0x05)!=0) 
1bd0: 49 20 7c 3d 20 30 78 30 35 3b 20 2f 2a 4e 4f 5f  I |= 0x05; /*NO_
1be0: 54 45 53 54 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  TEST*/.    }.   
1bf0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
1c00: 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68  nfig.xVdbeBranch
1c10: 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f  (sqlite3GlobalCo
1c20: 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68  nfig.pVdbeBranch
1c30: 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Arg,.           
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c50: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1c60: 65 26 30 78 66 66 66 66 66 66 2c 20 49 2c 20 4d  e&0xffffff, I, M
1c70: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f  );.  }.#endif../
1c80: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
1c90: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
1ca0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
1cb0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
1cc0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1cd0: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1ce0: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1cf0: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1d00: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1d10: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1d20: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1d30: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1d40: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1d50: 79 28 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20  y(P,enc,0)) \.  
1d60: 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d     { goto no_mem
1d70: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70  ; }../*.** An ep
1d80: 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76  hemeral string v
1d90: 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20  alue (signified 
1da0: 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d  by the MEM_Ephem
1db0: 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a   flag) contains.
1dc0: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
1dd0: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1de0: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77  located string w
1df0: 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  here some other 
1e00: 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73  entity.** is res
1e10: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61  ponsible for dea
1e20: 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73  llocating that s
1e30: 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20  tring.  Because 
1e40: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1e50: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c  does not control
1e60: 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20   the string, it 
1e70: 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64  might be deleted
1e80: 20 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67   without the reg
1e90: 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67  ister.** knowing
1ea0: 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   it..**.** This 
1eb0: 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73  routine converts
1ec0: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
1ed0: 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61  ring into a dyna
1ee0: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
1ef0: 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  d.** string that
1f00: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74   the register it
1f10: 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20  self controls.  
1f20: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1f30: 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61  it.** converts a
1f40: 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69  n MEM_Ephem stri
1f50: 6e 67 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ng into a string
1f60: 20 77 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61   with P.z==P.zMa
1f70: 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lloc..*/.#define
1f80: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
1f90: 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29  P) \.   if( ((P)
1fa0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65  ->flags&MEM_Ephe
1fb0: 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26  m)!=0 \.       &
1fc0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
1fd0: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29  MakeWriteable(P)
1fe0: 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b   ){ goto no_mem;
1ff0: 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  }../* Return tru
2000: 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  e if the cursor 
2010: 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  was opened using
2020: 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74   the OP_OpenSort
2030: 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64  er opcode. */.#d
2040: 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78  efine isSorter(x
2050: 29 20 28 28 78 29 2d 3e 65 43 75 72 54 79 70 65  ) ((x)->eCurType
2060: 3d 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  ==CURTYPE_SORTER
2070: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  )../*.** Allocat
2080: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
2090: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
20a0: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
20b0: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
20c0: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
20d0: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
20e0: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
20f0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
2100: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
2110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2120: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2130: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
2140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2150: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
2160: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
2170: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
2180: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2190: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
21a0: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
21b0: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
21c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
21d0: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
21e0: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
21f0: 20 2d 31 20 2a 2f 0a 20 20 75 38 20 65 43 75 72   -1 */.  u8 eCur
2200: 54 79 70 65 20 20 20 20 20 20 20 20 20 20 20 2f  Type           /
2210: 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 6e 65  * Type of the ne
2220: 77 20 63 75 72 73 6f 72 20 2a 2f 0a 29 7b 0a 20  w cursor */.){. 
2230: 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d   /* Find the mem
2240: 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69  ory cell that wi
2250: 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74  ll be used to st
2260: 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20  ore the blob of 
2270: 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75  memory.  ** requ
2280: 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56 64  ired for this Vd
2290: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
22a0: 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e  re. It is conven
22b0: 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20  ient to use a . 
22c0: 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20   ** vdbe memory 
22d0: 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74  cell to manage t
22e0: 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
22f0: 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f  tion required fo
2300: 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72  r a.  ** VdbeCur
2310: 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 6f  sor structure fo
2320: 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
2330: 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20  reasons:.  **.  
2340: 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73  **   * Sometimes
2350: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20   cursor numbers 
2360: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20 63  are used for a c
2370: 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65  ouple of differe
2380: 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70  nt.  **     purp
2390: 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20 70  oses in a vdbe p
23a0: 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66  rogram. The diff
23b0: 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74  erent uses might
23c0: 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20   require.  **   
23d0: 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65    different size
23e0: 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d  d allocations. M
23f0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76  emory cells prov
2400: 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a  ide growable.  *
2410: 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e  *     allocation
2420: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s..  **.  **   *
2430: 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42   When using ENAB
2440: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
2450: 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c  MENT, memory cel
2460: 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20  l buffers can.  
2470: 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64 20  **     be freed 
2480: 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73  lazily via the s
2490: 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
24a0: 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69  emory() API. Thi
24b0: 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d  s.  **     minim
24c0: 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20  izes the number 
24d0: 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20  of malloc calls 
24e0: 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73 74  made by the syst
24f0: 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  em..  **.  ** Th
2500: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 66 6f  e memory cell fo
2510: 72 20 63 75 72 73 6f 72 20 30 20 69 73 20 61 4d  r cursor 0 is aM
2520: 65 6d 5b 30 5d 2e 20 54 68 65 20 72 65 73 74 20  em[0]. The rest 
2530: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  are allocated fr
2540: 6f 6d 0a 20 20 2a 2a 20 74 68 65 20 74 6f 70 20  om.  ** the top 
2550: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
2560: 73 70 61 63 65 2e 20 20 43 75 72 73 6f 72 20 31  space.  Cursor 1
2570: 20 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d   is at Mem[p->nM
2580: 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20 43 75 72 73  em-1]..  ** Curs
2590: 6f 72 20 32 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 2 is at Mem[p
25a0: 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41 6e 64 20 73  ->nMem-2]. And s
25b0: 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2f 0a 20 20  o forth..  */.  
25c0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 69 43 75 72  Mem *pMem = iCur
25d0: 3e 30 20 3f 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  >0 ? &p->aMem[p-
25e0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20 3a 20 70 2d  >nMem-iCur] : p-
25f0: 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e 74 20 6e 42  >aMem;..  int nB
2600: 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  yte;.  VdbeCurso
2610: 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42  r *pCx = 0;.  nB
2620: 79 74 65 20 3d 20 0a 20 20 20 20 20 20 52 4f 55  yte = .      ROU
2630: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2640: 75 72 73 6f 72 29 29 20 2b 20 32 2a 73 69 7a 65  ursor)) + 2*size
2650: 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 20 2b  of(u32)*nField +
2660: 20 0a 20 20 20 20 20 20 28 65 43 75 72 54 79 70   .      (eCurTyp
2670: 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2680: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
2690: 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20  sorSize():0);.. 
26a0: 20 61 73 73 65 72 74 28 20 69 43 75 72 3e 3d 30   assert( iCur>=0
26b0: 20 26 26 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72   && iCur<p->nCur
26c0: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
26d0: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 20 2f  apCsr[iCur] ){ /
26e0: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
26f0: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 73 71 6c  -FALSE*/.    sql
2700: 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
2710: 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69  or(p, p->apCsr[i
2720: 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70  Cur]);.    p->ap
2730: 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20  Csr[iCur] = 0;. 
2740: 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f   }.  if( SQLITE_
2750: 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d  OK==sqlite3VdbeM
2760: 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
2770: 28 70 4d 65 6d 2c 20 6e 42 79 74 65 29 20 29 7b  (pMem, nByte) ){
2780: 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43  .    p->apCsr[iC
2790: 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62  ur] = pCx = (Vdb
27a0: 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a  eCursor*)pMem->z
27b0: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78  ;.    memset(pCx
27c0: 2c 20 30 2c 20 6f 66 66 73 65 74 6f 66 28 56 64  , 0, offsetof(Vd
27d0: 62 65 43 75 72 73 6f 72 2c 70 41 6c 74 43 75 72  beCursor,pAltCur
27e0: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
27f0: 65 43 75 72 54 79 70 65 20 3d 20 65 43 75 72 54  eCurType = eCurT
2800: 79 70 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  ype;.    pCx->iD
2810: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2820: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2830: 64 3b 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66  d;.    pCx->aOff
2840: 73 65 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70  set = &pCx->aTyp
2850: 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69  e[nField];.    i
2860: 66 28 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52  f( eCurType==CUR
2870: 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
2880: 20 20 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72      pCx->uc.pCur
2890: 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a  sor = (BtCursor*
28a0: 29 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65  ).          &pMe
28b0: 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65  m->z[ROUND8(size
28c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b  of(VdbeCursor))+
28d0: 32 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46  2*sizeof(u32)*nF
28e0: 69 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c  ield];.      sql
28f0: 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a  ite3BtreeCursorZ
2900: 65 72 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72  ero(pCx->uc.pCur
2910: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2920: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2930: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2940: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2950: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
2960: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
2970: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
2980: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
2990: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
29a0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
29b0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
29c0: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
29d0: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
29e0: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
29f0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2a00: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2a10: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2a20: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
2a30: 20 62 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67   bTryForInt flag
2a40: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65   is true, then e
2a50: 78 74 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d  xtra effort is m
2a60: 61 64 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61  ade to give.** a
2a70: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2a80: 65 6e 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e  entation.  Strin
2a90: 67 73 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b  gs that look lik
2aa0: 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  e floating point
2ab0: 0a 2a 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77  .** values but w
2ac0: 68 69 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61  hich have no fra
2ad0: 63 74 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e  ctional componen
2ae0: 74 20 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e  t (example: '48.
2af0: 30 30 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76  00').** will hav
2b00: 65 20 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72  e a MEM_Int repr
2b10: 65 73 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20  esentation when 
2b20: 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72  bTryForInt is tr
2b30: 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72  ue..**.** If bTr
2b40: 79 46 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65  yForInt is false
2b50: 2c 20 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e  , then if the in
2b60: 70 75 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  put string conta
2b70: 69 6e 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a  ins a decimal.**
2b80: 20 70 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65   point or expone
2b90: 6e 74 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20  ntial notation, 
2ba0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e  the result is on
2bb0: 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65  ly MEM_Real, eve
2bc0: 6e 0a 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73  n.** if there is
2bd0: 20 61 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65   an exact intege
2be0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2bf0: 20 6f 66 20 74 68 65 20 71 75 61 6e 74 69 74 79   of the quantity
2c00: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
2c10: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2c20: 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c  inity(Mem *pRec,
2c30: 20 69 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29   int bTryForInt)
2c40: 7b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75  {.  double rValu
2c50: 65 3b 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b  e;.  i64 iValue;
2c60: 0a 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63  .  u8 enc = pRec
2c70: 2d 3e 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  ->enc;.  assert(
2c80: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2c90: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74  (MEM_Str|MEM_Int
2ca0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d  |MEM_Real))==MEM
2cb0: 5f 53 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71  _Str );.  if( sq
2cc0: 6c 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e  lite3AtoF(pRec->
2cd0: 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63  z, &rValue, pRec
2ce0: 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72  ->n, enc)==0 ) r
2cf0: 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d  eturn;.  if( 0==
2d00: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
2d10: 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20  ec->z, &iValue, 
2d20: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b  pRec->n, enc) ){
2d30: 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d  .    pRec->u.i =
2d40: 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   iValue;.    pRe
2d50: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
2d60: 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  Int;.  }else{.  
2d70: 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56    pRec->u.r = rV
2d80: 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e  alue;.    pRec->
2d90: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61  flags |= MEM_Rea
2da0: 6c 3b 0a 20 20 20 20 69 66 28 20 62 54 72 79 46  l;.    if( bTryF
2db0: 6f 72 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56  orInt ) sqlite3V
2dc0: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2dd0: 74 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  ty(pRec);.  }.  
2de0: 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d 45 52 49 43  /* TEXT->NUMERIC
2df0: 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e 65 2e 20 20   is many->one.  
2e00: 48 65 6e 63 65 2c 20 69 74 20 69 73 20 69 6d 70  Hence, it is imp
2e10: 6f 72 74 61 6e 74 20 74 6f 20 69 6e 76 61 6c 69  ortant to invali
2e20: 64 61 74 65 20 74 68 65 0a 20 20 2a 2a 20 73 74  date the.  ** st
2e30: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2e40: 69 6f 6e 20 61 66 74 65 72 20 63 6f 6d 70 75 74  ion after comput
2e50: 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 65 71  ing a numeric eq
2e60: 75 69 76 61 6c 65 6e 74 2c 20 62 65 63 61 75 73  uivalent, becaus
2e70: 65 20 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e  e the.  ** strin
2e80: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2e90: 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 74 68   might not be th
2ea0: 65 20 63 61 6e 6f 6e 69 63 61 6c 20 72 65 70 72  e canonical repr
2eb0: 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74  esentation for t
2ec0: 68 65 0a 20 20 2a 2a 20 6e 75 6d 65 72 69 63 20  he.  ** numeric 
2ed0: 76 61 6c 75 65 2e 20 20 54 69 63 6b 65 74 20 5b  value.  Ticket [
2ee0: 33 34 33 36 33 34 39 34 32 64 64 35 34 61 62 35  343634942dd54ab5
2ef0: 37 62 37 30 32 34 5d 20 32 30 31 38 2d 30 31 2d  7b7024] 2018-01-
2f00: 33 31 2e 20 2a 2f 0a 20 20 70 52 65 63 2d 3e 66  31. */.  pRec->f
2f10: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72  lags &= ~MEM_Str
2f20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  ;.}../*.** Proce
2f30: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
2f40: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
2f50: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2f60: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2f70: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2f80: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2f90: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2fa0: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2fb0: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2fd0: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2fe0: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2ff0: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
3000: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
3010: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
3020: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
3030: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
3040: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
3050: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
3060: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
3070: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
3080: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
3090: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
30a0: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
30b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
30c0: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
30d0: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
30e0: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
30f0: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
3100: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
3110: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
3120: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
3130: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
3140: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
3150: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
3160: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
3170: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
3180: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
3190: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
31a0: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
31b0: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
31c0: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
31d0: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
31e0: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
31f0: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
3200: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
3210: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
3220: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
3230: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
3240: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
3250: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
3260: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
3270: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
3280: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
3290: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
32a0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
32b0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
32c0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
32d0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
32e0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
32f0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
3300: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
3310: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
3320: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
3330: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
3340: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
3350: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
3360: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
3370: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
3380: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
3390: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
33a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
33b0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
33c0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
33d0: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
33e0: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
33f0: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
3400: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
3410: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
3420: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
3430: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
3440: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
3450: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
3460: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
3470: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
3480: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
3490: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
34a0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
34b0: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
34c0: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
34d0: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
34e0: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
34f0: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
3500: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
3510: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
3520: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
3530: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
3540: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
3550: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
3560: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
3570: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
3580: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
3590: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
35a0: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
35b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35c0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
35d0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
35e0: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
35f0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
3600: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
3610: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
3620: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
3630: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
3640: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
3650: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
3660: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
3670: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
3680: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
3690: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
36a0: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
36b0: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
36c0: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
36d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
36e0: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
36f0: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
3700: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
3710: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
3720: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
3730: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
3740: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
3750: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
3760: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
3770: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
3780: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
3790: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
37a0: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
37b0: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
37c0: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
37d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
37e0: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
37f0: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
3800: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
3810: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
3820: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
3830: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
3840: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
3850: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3860: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3870: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3880: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3890: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
38a0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
38b0: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
38c0: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
38d0: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
38e0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
38f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
3900: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
3910: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
3920: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
3930: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
3940: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
3950: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3960: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3970: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3980: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3990: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
39a0: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
39b0: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
39c0: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
39d0: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
39e0: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
39f0: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
3a00: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
3a10: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
3a20: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3a30: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3a40: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
3a50: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3a60: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3a70: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3a80: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3a90: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3aa0: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3ab0: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3ac0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3ad0: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3ae0: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3af0: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3b00: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
3b10: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
3b20: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
3b30: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
3b40: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
3b50: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3b60: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3b70: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3b80: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3b90: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3ba0: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3bb0: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3bc0: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3bd0: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3be0: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3bf0: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
3c00: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
3c10: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
3c20: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
3c30: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
3c40: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
3c50: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3c60: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3c70: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3c80: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3c90: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3ca0: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3cb0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3cc0: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3cd0: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3ce0: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3cf0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
3d00: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
3d10: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
3d20: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
3d30: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
3d40: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
3d50: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3d60: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3d70: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3d80: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3d90: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3da0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3db0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3dc0: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3dd0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3de0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3df0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
3e00: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
3e10: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
3e20: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
3e30: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
3e40: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
3e50: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3e60: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3e70: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3e80: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3e90: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3ea0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3eb0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3ec0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3ed0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3ee0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3ef0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3f00: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3f10: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3f20: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3f30: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
3f40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3f50: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3f60: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3f70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3f80: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3f90: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3fa0: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3fb0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3fc0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3fd0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3fe0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3ff0: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
4000: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
4010: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
4020: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
4030: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
4040: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
4050: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
4060: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
4070: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4080: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
4090: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
40a0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
40b0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
40c0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
40d0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
40e0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
40f0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
4100: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
4110: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
4120: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
4130: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
4140: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4150: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
4160: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
4170: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
4180: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
4190: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
41a0: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
41b0: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
41c0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
41d0: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
41e0: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
41f0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
4200: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
4210: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
4220: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
4230: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
4240: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
4250: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
4260: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
4270: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
4280: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
4290: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
42a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
42b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
42c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
42d0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
42e0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
42f0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
4300: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
4310: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
4320: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
4330: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
4340: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
4350: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4360: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
4370: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
4380: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
4390: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
43a0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
43b0: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
43c0: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
43d0: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
43e0: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
43f0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
4400: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
4410: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
4420: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
4430: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
4440: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
4450: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4460: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
4470: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
4480: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
4490: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
44a0: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
44b0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
44c0: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
44d0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
44e0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
44f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4500: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
4510: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
4520: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
4530: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
4540: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
4550: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
4560: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
4570: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
4580: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
4590: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
45a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
45b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
45c0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d  ){.    printf(p-
45d0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
45e0: 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e  o ? " NULL-nochn
45f0: 67 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  g" : " NULL");. 
4600: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
4610: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
4620: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
4630: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
4640: 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a      printf(" si:
4650: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
4660: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4670: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
4680: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
4690: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
46a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
46b0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
46c0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
46d0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
46e0: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
46f0: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e  f(" r:%g", p->u.
4700: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
4710: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
4720: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
4730: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
4740: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
4750: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
4760: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
4770: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
4780: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
4790: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
47a0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zBuf);.  }.  if(
47b0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
47c0: 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66  Subtype ) printf
47d0: 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32  (" subtype=0x%02
47e0: 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29  x", p->eSubtype)
47f0: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
4800: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
4810: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
4820: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
4830: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
4840: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
4850: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
4860: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
4870: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
4880: 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ts(p);.}.#endif.
4890: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
48a0: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
48b0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
48c0: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
48d0: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
48e0: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
48f0: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
4900: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
4910: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
4920: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4930: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
4940: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
4950: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
4960: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
4970: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
4980: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
4990: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
49a0: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
49b0: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
49c0: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
49d0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
49e0: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
49f0: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
4a00: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
4a10: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
4a20: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
4a30: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
4a40: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
4a50: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
4a60: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
4a70: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
4a80: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
4a90: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
4aa0: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
4ab0: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
4ac0: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
4ad0: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
4ae0: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
4af0: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
4b00: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
4b10: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4b20: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
4b30: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
4b40: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
4b50: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
4b60: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
4b70: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
4b80: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
4b90: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
4ba0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
4bb0: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
4bc0: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
4bd0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
4be0: 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d  register of pOp-
4bf0: 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20  >p2 after first 
4c00: 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20  preparing it to 
4c10: 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  be.** overwritte
4c20: 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  n with an intege
4c30: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
4c40: 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ic SQLITE_NOINLI
4c50: 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72  NE Mem *out2Prer
4c60: 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28  eleaseWithClear(
4c70: 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71  Mem *pOut){.  sq
4c80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
4c90: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75  ull(pOut);.  pOu
4ca0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
4cb0: 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75  nt;.  return pOu
4cc0: 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20  t;.}.static Mem 
4cd0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
4ce0: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
4cf0: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
4d00: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
4d10: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
4d20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4d30: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
4d40: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
4d50: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
4d60: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
4d70: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4d80: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
4d90: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
4da0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
4db0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72  IF-FALSE*/.    r
4dc0: 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c  eturn out2Prerel
4dd0: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f  easeWithClear(pO
4de0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
4df0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4e00: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74  MEM_Int;.    ret
4e10: 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a  urn pOut;.  }.}.
4e20: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
4e30: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
4e40: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
4e50: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
4e60: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
4e70: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
4e80: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
4e90: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
4ec0: 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  /.){.  Op *aOp =
4ed0: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4ee0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4ef0: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
4f00: 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20   = aOp;         
4f10: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4f20: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20  peration */.#if 
4f30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4f40: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
4f50: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
4f60: 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20   Op *pOrigOp;   
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
4f80: 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74  alue of pOp at t
4f90: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f  he top of the lo
4fa0: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  op */.#endif.#if
4fb0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4fc0: 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c  .  int nExtraDel
4fd0: 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ete = 0;      /*
4fe0: 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c   Verifies FORDEL
4ff0: 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ETE and AUXDELET
5000: 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69  E flags */.#endi
5010: 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  f.  int rc = SQL
5020: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
5030: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
5040: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
5050: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
5060: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5070: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
5080: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
5090: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
50a0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
50b0: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
50c0: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
50d0: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
50e0: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
50f0: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
5100: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
5110: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
5120: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
5130: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
5140: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
5150: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
5160: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5170: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
5180: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5190: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
51a0: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
51b0: 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49  essLimit;   /* I
51c0: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
51d0: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
51e0: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
51f0: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
5200: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
5210: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
5220: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
5230: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
5240: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
5250: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
5260: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
5270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
5280: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
5290: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
52a0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
52b0: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
52c0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
52d0: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
52e0: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
52f0: 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66  perand */.#ifdef
5300: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5310: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
5320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
5330: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
5340: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
5350: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
5360: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
5370: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
5380: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
5390: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
53a0: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
53b0: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
53c0: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
53d0: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
53e0: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
53f0: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
5400: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
5410: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
5420: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
5430: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5440: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
5450: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5460: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
5470: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
5480: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
5490: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
54a0: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
54b0: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
54c0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
54d0: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
54e0: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
54f0: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
5500: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
5510: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
5520: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
5530: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
5540: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
5550: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
5560: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
5570: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
5580: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
5590: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
55a0: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
55b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
55c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
55d0: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
55e0: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
55f0: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
5600: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
5610: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
5620: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
5630: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5640: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
5650: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
5660: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
5670: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
5680: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73  ressOps);.  }els
5690: 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  e{.    nProgress
56a0: 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66  Limit = 0xffffff
56b0: 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ff;.  }.#endif.#
56c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
56d0: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
56e0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
56f0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
5700: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
5710: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
5720: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
5730: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
5740: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
5750: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
5760: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
5770: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5780: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
5790: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
57a0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
57b0: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
57c0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
57d0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
57e0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
57f0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
5800: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5810: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
5820: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5830: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5840: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5850: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5860: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
5870: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5880: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5890: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
58a0: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
58b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
58c0: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
58d0: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
58e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
58f0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
5900: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
5910: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
5920: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5930: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
5940: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5950: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
5960: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
5970: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
5980: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
5990: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
59a0: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
59b0: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
59c0: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
59d0: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
59e0: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
59f0: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
5a00: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
5a10: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
5a20: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
5a30: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
5a40: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
5a50: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
5a60: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
5a70: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
5a80: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
5a90: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e  start = sqlite3N
5aa0: 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c  ProfileCnt ? sql
5ab0: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
5ac0: 3a 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  : sqlite3Hwtime(
5ad0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
5ae0: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
5af0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5b00: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
5b10: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
5b20: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
5b30: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
5b40: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5b50: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
5b60: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
5b70: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
5b80: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5b90: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
5ba0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
5bb0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
5bc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5bd0: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
5be0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
5bf0: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
5c00: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5c10: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5c20: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5c30: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5c40: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
5c50: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
5c60: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
5c70: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
5c80: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
5c90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
5ca0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5cb0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5cc0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5cd0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5ce0: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5cf0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5d00: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5d10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5d20: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5d30: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
5d40: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
5d50: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
5d60: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
5d70: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5d80: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
5d90: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
5da0: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
5db0: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
5dc0: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5dd0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
5de0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5df0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5e00: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5e10: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5e20: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5e30: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5e40: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5e50: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5e60: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
5e70: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5e80: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5e90: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5ea0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
5eb0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5ec0: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
5ed0: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
5ee0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5ef0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5f00: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5f10: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5f20: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5f30: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5f40: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5f50: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5f60: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5f70: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5f80: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5f90: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
5fa0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
5fb0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5fc0: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5fd0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5fe0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
5ff0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
6000: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
6010: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
6020: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
6030: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
6040: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
6050: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
6060: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
6070: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6080: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6090: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
60a0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
60b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
60c0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
60d0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
60e0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
60f0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
6100: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
6110: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
6120: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
6130: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
6140: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
6150: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
6160: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
6170: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6180: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
6190: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
61a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
61b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
61c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
61d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
61e0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
61f0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
6200: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
6210: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
6220: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6230: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
6240: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
6250: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
6260: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6270: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
6280: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6290: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
62a0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
62b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
62c0: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
62d0: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
62e0: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
62f0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
6300: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
6310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6350: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
6360: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
6370: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
6380: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
6390: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
63a0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
63b0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
63c0: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
63d0: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
63e0: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
63f0: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
6400: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
6410: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
6420: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
6430: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
6440: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
6450: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
6460: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
6470: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
6480: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
6490: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
64a0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
64b0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
64c0: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
64d0: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
64e0: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
64f0: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
6500: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
6510: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
6520: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
6530: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
6540: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
6550: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
6560: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
6570: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
6580: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
6590: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
65a0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
65b0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
65c0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
65d0: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
65e0: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
65f0: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
6600: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
6610: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
6620: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
6630: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
6640: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
6650: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
6660: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
6670: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
6680: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
6690: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
66a0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
66b0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
66c0: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
66d0: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
66e0: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
66f0: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
6700: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
6710: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
6720: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
6730: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
6740: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
6750: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
6760: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
6770: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
6780: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
6790: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
67a0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
67b0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
67c0: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
67d0: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
67e0: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
67f0: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6800: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6810: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6820: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6830: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6840: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6850: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
6860: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
6870: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
6880: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
6890: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
68a0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
68b0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
68c0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
68d0: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
68e0: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
68f0: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6900: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6910: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
6920: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
6930: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
6940: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
6950: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
6960: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
6970: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
6980: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
6990: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
69a0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
69b0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
69c0: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
69d0: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
69e0: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
69f0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6a00: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a50: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
6a60: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
6a70: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
6a80: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
6a90: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
6aa0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6ab0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6ac0: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6ad0: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6ae0: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6af0: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6b00: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
6b10: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
6b20: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
6b30: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
6b40: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
6b50: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
6b60: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
6b70: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
6b80: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
6b90: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
6ba0: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
6bb0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6bc0: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
6bd0: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
6be0: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
6bf0: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
6c00: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
6c10: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
6c20: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6c40: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
6c50: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
6c60: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
6c70: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
6c80: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
6c90: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
6ca0: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
6cb0: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6cc0: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6cd0: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20  ** OP_VNext, or 
6ce0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
6cf0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
6d00: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
6d10: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
6d20: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
6d30: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6d40: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6d50: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6d60: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6d70: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6d80: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6d90: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6da0: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6db0: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6dc0: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6dd0: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
6de0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
6df0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
6e00: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
6e10: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
6e20: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
6e30: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6e40: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6e50: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6e60: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6e70: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6e80: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6e90: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6ea0: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6eb0: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6ec0: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6ed0: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
6ee0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
6ef0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
6f00: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
6f10: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
6f20: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
6f30: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6f40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6f50: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6f60: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6f70: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6f80: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6f90: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6fa0: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6fb0: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6fc0: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6fd0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
6fe0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
6ff0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
7000: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
7010: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
7020: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
7030: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
7040: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
7050: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
7060: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
7070: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
7080: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
7090: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
70a0: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
70b0: 0a 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d  .  if( nVmStep>=
70c0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26  nProgressLimit &
70d0: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  & db->xProgress!
70e0: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
70f0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
7100: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
7110: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
7120: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
7130: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
7140: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
7150: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
7160: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
7170: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
7180: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
7190: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
71a0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
71b0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
71c0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
71d0: 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a   .  break;.}../*
71e0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
71f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7200: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
7210: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
7220: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
7230: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
7240: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
7250: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
7260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
7270: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
7280: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
7290: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
72a0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
72b0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
72c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
72d0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
72e0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
72f0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
7300: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
7310: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
7320: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
7330: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61  .i = (int)(pOp-a
7340: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
7350: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7360: 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74  In1);..  /* Most
7370: 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73   jump operations
7380: 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68   do a goto to th
7390: 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72  is spot in order
73a0: 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20   to update.  ** 
73b0: 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e  the pOp pointer.
73c0: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a   */.jump_to_p2:.
73d0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
73e0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65  ->p2 - 1];.  bre
73f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7400: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
7410: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
7420: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
7430: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
7440: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
7450: 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72  ister P1.  After
7460: 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  .** the jump, re
7470: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7480: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
7490: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
74a0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
74b0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
74c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
74d0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
74e0: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
74f0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49  .  pOp = &aOp[pI
7500: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31  n1->u.i];.  pIn1
7510: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
7520: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
7530: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7540: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
7550: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7560: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
7570: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
7580: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
7590: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
75a0: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
75b0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
75c0: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
75d0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
75e0: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
75f0: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
7600: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
7610: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
7620: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
7630: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
7640: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
7650: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
7660: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
7670: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
7680: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
7690: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
76a0: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
76b0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
76c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
76d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
76e0: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
76f0: 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Op );.  assert( 
7700: 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
7710: 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p3<p->nOp );.
7720: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
7730: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7740: 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d  t( !VdbeMemDynam
7750: 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f  ic(pOut) );.  pO
7760: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
7770: 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66  3 - 1;.  pOut->f
7780: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7790: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
77a0: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
77b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
77c0: 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f  Opcode:  EndCoro
77d0: 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a  utine P1 * * * *
77e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72  .**.** The instr
77f0: 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64  uction at the ad
7800: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
7810: 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e  r P1 is a Yield.
7820: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7830: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
7840: 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41  that Yield..** A
7850: 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72  fter the jump, r
7860: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
7870: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  es undefined..**
7880: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
7890: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
78a0: 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74  ase OP_EndCorout
78b0: 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ine: {          
78c0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62   /* in1 */.  Vdb
78d0: 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20  eOp *pCaller;.  
78e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
78f0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
7900: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
7910: 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
7920: 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20  t( pIn1->u.i>=0 
7930: 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e  && pIn1->u.i<p->
7940: 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72  nOp );.  pCaller
7950: 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e   = &aOp[pIn1->u.
7960: 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
7970: 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  aller->opcode==O
7980: 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73  P_Yield );.  ass
7990: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32  ert( pCaller->p2
79a0: 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e  >=0 && pCaller->
79b0: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p2<p->nOp );.  p
79c0: 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65  Op = &aOp[pCalle
79d0: 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49  r->p2 - 1];.  pI
79e0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
79f0: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
7a00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7a10: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
7a20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
7a30: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
7a40: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
7a50: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7a60: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
7a70: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
7a80: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
7a90: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
7aa0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
7ab0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
7ac0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
7ad0: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
7ae0: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
7af0: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
7b00: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
7b10: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
7b20: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
7b30: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
7b40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
7b50: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
7b60: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
7b70: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
7b80: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
7b90: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
7ba0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
7bb0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
7bc0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
7bd0: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
7be0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
7bf0: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
7c00: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
7c10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
7c20: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
7c30: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
7c40: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
7c50: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
7c60: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
7c70: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
7c80: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
7c90: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49  p - aOp);.  REGI
7ca0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7cb0: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70  p1, pIn1);.  pOp
7cc0: 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b   = &aOp[pcDest];
7cd0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7ce0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
7cf0: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
7d00: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
7d10: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7d20: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7d30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7d40: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
7d50: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
7d60: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
7d70: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
7d80: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
7d90: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
7da0: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7db0: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7dc0: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7dd0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7de0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7df0: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
7e00: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7e10: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7e20: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7e30: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7e40: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
7e50: 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
7e60: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
7e70: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72  pOp->p2==OE_Abor
7e80: 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65  t ){ sqlite3Vdbe
7e90: 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28  AssertAbortable(
7ea0: 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  p); }.#endif.  i
7eb0: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
7ec0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
7ed0: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
7ee0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
7ef0: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
7f00: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
7f10: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
7f20: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
7f30: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
7f40: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
7f50: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
7f60: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
7f70: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
7f80: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
7f90: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
7fa0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
7fb0: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
7fc0: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
7fd0: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
7fe0: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
7ff0: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
8000: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
8010: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
8020: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
8030: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
8040: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
8050: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
8060: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
8070: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8080: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
8090: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
80a0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
80b0: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
80c0: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
80d0: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
80e0: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
80f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
8100: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
8110: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
8120: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
8130: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
8140: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
8150: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
8160: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
8170: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
8180: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
8190: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
81a0: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
81b0: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
81c0: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
81d0: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
81e0: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
81f0: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
8200: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
8210: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
8220: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
8230: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
8240: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
8250: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
8260: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
8270: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
8280: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
8290: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
82a0: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
82b0: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
82c0: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
82d0: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
82e0: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
82f0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
8300: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
8310: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
8320: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
8330: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
8340: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
8350: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
8360: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
8370: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
8380: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
8390: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
83a0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
83b0: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
83c0: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
83d0: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
83e0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
83f0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8400: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
8410: 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29  ->p2==OE_Abort )
8420: 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73  { sqlite3VdbeAss
8430: 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b  ertAbortable(p);
8440: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
8450: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
8460: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
8470: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
8480: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
8490: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
84a0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
84b0: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
84c0: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
84d0: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
84e0: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
84f0: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
8500: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8510: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
8520: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
8530: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
8540: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
8550: 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70  rame);.    if( p
8560: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
8570: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
8580: 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73  struction pcx is
8590: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
85a0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
85b0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
85c0: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
85d0: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
85e0: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
85f0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
8600: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
8610: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
8620: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
8630: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
8640: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
8650: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
8660: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
8670: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
8680: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
8690: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
86a0: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
86b0: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
86c0: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
86d0: 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63   pcx = p->aOp[pc
86e0: 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  x].p2-1;.    }. 
86f0: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
8700: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
8710: 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  Mem;.    pOp = &
8720: 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72  aOp[pcx];.    br
8730: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
8740: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
8750: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
8760: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
8770: 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73  >pc = pcx;.  ass
8780: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  ert( pOp->p5<=4 
8790: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  );.  if( p->rc )
87a0: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
87b0: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
87c0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
87d0: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
87e0: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
87f0: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
8830: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
8840: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8850: 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
8860: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
8870: 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20  ->p5==2 );.     
8880: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
8890: 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74  p5==3 );.      t
88a0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
88b0: 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==4 );.      sql
88c0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
88d0: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
88e0: 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b  failed", azType[
88f0: 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20  pOp->p5-1]);.   
8900: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a     if( pOp->p4.z
8910: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a   ){.        p->z
8920: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
8930: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a  MPrintf(db, "%z:
8940: 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67   %s", p->zErrMsg
8950: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8960: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
8970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8980: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
8990: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
89a0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   }.    sqlite3_l
89b0: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
89c0: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
89d0: 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a  : %s", pcx, p->z
89e0: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
89f0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
8a00: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
8a10: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
8a20: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
8a30: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
8a40: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
8a50: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
8a60: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
8a70: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42  p->rc = SQLITE_B
8a80: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
8a90: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8aa0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
8ab0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
8ac0: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
8ad0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8ae0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
8af0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
8b00: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
8b10: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
8b20: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
8b30: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
8b40: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
8b50: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
8b60: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8b70: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
8b80: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8b90: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
8ba0: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
8bb0: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
8bc0: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
8bd0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8be0: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
8bf0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8c00: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8c10: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8c20: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
8c30: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
8c40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8c50: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
8c60: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8c70: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
8c80: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
8c90: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
8ca0: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
8cb0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8cc0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8cd0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
8ce0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
8cf0: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8d00: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8d10: 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
8d20: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
8d30: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
8d40: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
8d50: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
8d60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8d70: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
8d80: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
8d90: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
8da0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8db0: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
8dc0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
8dd0: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
8de0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
8df0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8e00: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8e10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
8e20: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
8e30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
8e40: 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  OAT, out2 */.  p
8e50: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8e60: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8e70: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8e80: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
8e90: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
8ea0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
8eb0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  );.  pOut->u.r =
8ec0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
8ed0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
8ee0: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
8ef0: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
8f00: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8f10: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
8f20: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
8f30: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
8f40: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
8f50: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
8f60: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
8f70: 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65   a String opcode
8f80: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
8f90: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
8fa0: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
8fb0: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
8fc0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
8fd0: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
8fe0: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
8ff0: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
9000: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
9010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
9020: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
9030: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
9040: 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  RING, out2 */.  
9050: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9060: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
9070: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9080: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e  p, pOp);.  pOp->
9090: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
90a0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
90b0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
90c0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
90d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
90e0: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
90f0: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
9100: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
9110: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9120: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9130: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
9140: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
9150: 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74  TIC);.    assert
9160: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9170: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  || rc==SQLITE_TO
9180: 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20  OBIG );.    if( 
9190: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
91a0: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
91b0: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
91c0: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
91d0: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
91e0: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
91f0: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
9200: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
9210: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
9220: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
9230: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
9240: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
9250: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9260: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
9270: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
9280: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
9290: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
92a0: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
92b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
92c0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
92d0: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
92e0: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
92f0: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
9300: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73  ut->n;.  }.  tes
9310: 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
9320: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64  E_TOOBIG );.#end
9330: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
9340: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
9350: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
9360: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
9370: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _big;.  }.  asse
9380: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
9390: 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  K );.  /* Fall t
93a0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
93b0: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
93c0: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
93d0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
93e0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
93f0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
9400: 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  P4' (len=P1).**.
9410: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
9420: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
9430: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
9440: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
9450: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
9460: 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  3 is not zero an
9470: 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
9480: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
9490: 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65  equal to P5, the
94a0: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70  n.** the datatyp
94b0: 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65  e of the registe
94c0: 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65  r P2 is converte
94d0: 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20  d to BLOB.  The 
94e0: 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68  content is.** th
94f0: 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20  e same sequence 
9500: 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20  of bytes, it is 
9510: 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74  merely interpret
9520: 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73  ed as a BLOB ins
9530: 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72  tead.** of a str
9540: 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61  ing, as if it ha
9550: 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e  d been CAST.  In
9560: 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a   other words:.**
9570: 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e  .** if( P3!=0 an
9580: 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20  d reg[P3]==P5 ) 
9590: 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28  reg[P2] := CAST(
95a0: 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29  reg[P2] as BLOB)
95b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
95c0: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
95d0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
95e0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
95f0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
9600: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9610: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
9620: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
9630: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
9640: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
9650: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
9660: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
9670: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
9680: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
9690: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
96a0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
96b0: 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41  E_LIKE_DOESNT_MA
96c0: 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20  TCH_BLOBS.  if( 
96d0: 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
96e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
96f0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
9700: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
9710: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
9720: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
9730: 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
9740: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
9750: 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d    if( pIn3->u.i=
9760: 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d  =pOp->p5 ) pOut-
9770: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
9780: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
9790: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69  _Term;.  }.#endi
97a0: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
97b0: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
97c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
97d0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33  nopsis: r[P2..P3
97e0: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
97f0: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
9800: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
9810: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
9820: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
9830: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
9840: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
9850: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
9860: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
9870: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
9880: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
9890: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
98a0: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
98b0: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
98c0: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
98d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
98e0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
98f0: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
9900: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
9910: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
9920: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
9930: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
9940: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
9950: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
9960: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
9970: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
9980: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
9990: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
99a0: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
99b0: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
99c0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
99d0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
99e0: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
99f0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
9a00: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
9a10: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9a20: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
9a30: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
9a40: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
9a50: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
9a60: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f  : MEM_Null;.  pO
9a70: 75 74 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65  ut->n = 0;.#ifde
9a80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9a90: 20 70 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30   pOut->uTemp = 0
9aa0: 3b 0a 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65  ;.#endif.  while
9ab0: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
9ac0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
9ad0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
9ae0: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
9af0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
9b00: 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  pOut);.    pOut-
9b10: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
9b20: 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d  g;.    pOut->n =
9b30: 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20   0;.    cnt--;. 
9b40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
9b50: 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75  * Opcode: SoftNu
9b60: 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ll P1 * * * *.**
9b70: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
9b80: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20  =NULL.**.** Set 
9b90: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68  register P1 to h
9ba0: 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55  ave the value NU
9bb0: 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68  LL as seen by th
9bc0: 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a  e OP_MakeRecord.
9bd0: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  ** instruction, 
9be0: 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20  but do not free 
9bf0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9c00: 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69  ob memory associ
9c10: 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65  ated with.** the
9c20: 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68   register, so th
9c30: 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  at if the value 
9c40: 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20  was a string or 
9c50: 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a  blob that was.**
9c60: 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69   previously copi
9c70: 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70  ed using OP_SCop
9c80: 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69  y, the copies wi
9c90: 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ll continue to b
9ca0: 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65  e valid..*/.case
9cb0: 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a   OP_SoftNull: {.
9cc0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9cd0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
9ce0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9cf0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
9d00: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9d10: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
9d20: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
9d30: 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s&~(MEM_Undefine
9d40: 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c  d|MEM_AffMask))|
9d50: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61  MEM_Null;.  brea
9d60: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9d70: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
9d80: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9d90: 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31  r[P2]=P4 (len=P1
9da0: 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  ).**.** P4 point
9db0: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
9dc0: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
9dd0: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
9de0: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
9df0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
9e00: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
9e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9e20: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
9e30: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
9e40: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
9e50: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9e60: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9e70: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9e80: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
9e90: 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20  >p4.z, pOp->p1, 
9ea0: 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  0, 0);.  pOut->e
9eb0: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9ed0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
9ee0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9ef0: 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50  e: Variable P1 P
9f00: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9f10: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61  psis: r[P2]=para
9f20: 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a  meter(P1,P4).**.
9f30: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
9f40: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
9f50: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
9f60: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
9f70: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
9f80: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
9f90: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
9fa0: 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54  ears in P4..** T
9fb0: 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75  he P4 value is u
9fc0: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62  sed by sqlite3_b
9fd0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
9fe0: 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  me()..*/.case OP
9ff0: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
a000: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a010: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
a020: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
a030: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
a040: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
a050: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
a060: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
a070: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a080: 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.z==0 || pOp->p
a090: 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73  4.z==sqlite3VLis
a0a0: 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56  tNumToName(p->pV
a0b0: 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b  List,pOp->p1) );
a0c0: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
a0d0: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
a0e0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
a0f0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
a100: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
a110: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_big;.  }.  pOu
a120: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a130: 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
a140: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
a150: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
a160: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
a170: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
a180: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a190: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
a1a0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
a1b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a1c0: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
a1d0: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
a1e0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
a1f0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
a200: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
a210: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
a220: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
a230: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
a240: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
a250: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
a260: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
a270: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
a280: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
a290: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
a2a0: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
a2b0: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
a2c0: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
a2d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
a2e0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20  e: {.  int n;   
a2f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a300: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
a310: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
a320: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
a330: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
a340: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
a350: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
a360: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
a370: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
a380: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
a390: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
a3a0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
a3b0: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
a3c0: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
a3d0: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
a3e0: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
a3f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
a400: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
a410: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
a420: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
a430: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
a440: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
a450: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
a460: 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  n1<=&aMem[(p->nM
a470: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a480: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
a490: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
a4a0: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
a4b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
a4c0: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
a4d0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
a4e0: 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66  t, pIn1);.#ifdef
a4f0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
a500: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
a510: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
a520: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
a530: 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20  yFrom<pOut ){.  
a540: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
a550: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
a560: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
a570: 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  if.    Deephemer
a580: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20  alize(pOut);.   
a590: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
a5a0: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
a5b0: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
a5c0: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
a5d0: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
a5e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
a5f0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
a600: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a610: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
a620: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
a630: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
a640: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
a650: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
a660: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
a670: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
a680: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
a690: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
a6a0: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
a6b0: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
a6c0: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
a6d0: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
a6e0: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
a6f0: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
a700: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
a710: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
a720: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
a730: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a740: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
a750: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
a760: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
a770: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
a780: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
a790: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a7a0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a7b0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a7c0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
a7d0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
a7e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
a7f0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
a800: 72 6f 6d 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75  rom = 0;.    pOu
a810: 74 2d 3e 69 54 61 62 43 6f 6c 48 61 73 68 20 3d  t->iTabColHash =
a820: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
a830: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a840: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
a850: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
a860: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
a870: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
a880: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
a890: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a8a0: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
a8b0: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
a8c0: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
a8d0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
a8e0: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
a8f0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
a900: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
a910: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
a920: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
a930: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
a940: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
a950: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
a960: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
a970: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
a980: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
a990: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
a9a0: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
a9b0: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
a9c0: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
a9d0: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
a9e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
a9f0: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
aa00: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
aa10: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
aa20: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
aa30: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
aa40: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
aa50: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
aa60: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
aa70: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
aa80: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
aa90: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
aaa0: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
aab0: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
aac0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
aad0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
aae0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
aaf0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ab00: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
ab10: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
ab20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
ab30: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
ab40: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
ab50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
ab60: 42 55 47 0a 20 20 70 4f 75 74 2d 3e 70 53 63 6f  BUG.  pOut->pSco
ab70: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20  pyFrom = pIn1;. 
ab80: 20 70 4f 75 74 2d 3e 6d 53 63 6f 70 79 46 6c 61   pOut->mScopyFla
ab90: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
aba0: 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
abb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
abc0: 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20  IntCopy P1 P2 * 
abd0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
abe0: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
abf0: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
ac00: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
ac10: 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
ac20: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
ac30: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
ac40: 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76  s an optimized v
ac50: 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20  ersion of SCopy 
ac60: 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20  that works only 
ac70: 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  for integer.** v
ac80: 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alues..*/.case O
ac90: 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20  P_IntCopy: {    
aca0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
acb0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
acc0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
acd0: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
ace0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
acf0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
ad00: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
ad10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
ad20: 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31  Int64(pOut, pIn1
ad30: 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
ad40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
ad50: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
ad60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ad70: 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32  : output=r[P1@P2
ad80: 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ].**.** The regi
ad90: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
ada0: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
adb0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
adc0: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
add0: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
ade0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
adf0: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
ae00: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
ae10: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
ae20: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
ae30: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
ae40: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
ae50: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
ae60: 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50  ccess to the r(P
ae70: 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76  1)..r(P1+P2-1) v
ae80: 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20  alues as.** the 
ae90: 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63  result row..*/.c
aea0: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
aeb0: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
aec0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
aed0: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
aee0: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
aef0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
af00: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
af10: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
af20: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
af30: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
af40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
af50: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
af60: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
af70: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
af80: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
af90: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
afa0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
afb0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
afc0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
afd0: 6d 69 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78  mit .   && db->x
afe0: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
aff0: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
b000: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
b010: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
b020: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
b030: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23  _to_error;.  }.#
b040: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
b050: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
b060: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
b070: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
b080: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
b090: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
b0a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
b0b0: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
b0c0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
b0d0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
b0e0: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
b0f0: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
b100: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
b110: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
b120: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
b130: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
b140: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
b150: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
b160: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
b170: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
b180: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
b190: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
b1a0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b1b0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
b1c0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b1d0: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
b1e0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
b1f0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
b200: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
b210: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
b220: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
b230: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
b240: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
b250: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
b260: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
b270: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
b280: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
b290: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b2a0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
b2b0: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
b2c0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
b2d0: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
b2e0: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
b2f0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b300: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
b310: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
b320: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
b330: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
b340: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
b350: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
b360: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b370: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
b380: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
b390: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
b3a0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
b3b0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
b3c0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
b3d0: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
b3e0: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
b3f0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
b400: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
b410: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
b420: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
b430: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
b440: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
b450: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
b460: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
b470: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
b480: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
b490: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
b4a0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
b4b0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
b4c0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
b4d0: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
b4e0: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
b4f0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
b500: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
b510: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
b520: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
b530: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
b540: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
b550: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
b560: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
b570: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
b580: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
b590: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
b5a0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
b5b0: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
b5c0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
b5d0: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
b5e0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
b5f0: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
b600: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
b610: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
b620: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
b630: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
b640: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
b650: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
b660: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
b670: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
b680: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b690: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
b6a0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
b6b0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
b6c0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
b6d0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
b6e0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
b6f0: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
b700: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
b710: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
b720: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
b730: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
b740: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
b750: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b760: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
b770: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
b780: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
b790: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
b7a0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
b7b0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
b7c0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
b7d0: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
b7e0: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
b7f0: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
b800: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
b810: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
b820: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
b830: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
b840: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
b850: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
b860: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
b870: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
b880: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
b890: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
b8a0: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
b8b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b8c0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
b8d0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
b8e0: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
b8f0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
b900: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
b910: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
b920: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
b930: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b940: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b950: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
b960: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
b970: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
b980: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
b990: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
b9a0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
b9b0: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
b9c0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
b9d0: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
b9e0: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
b9f0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
ba00: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
ba10: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
ba20: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
ba30: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
ba40: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba60: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
ba70: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ba80: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
ba90: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
baa0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
bab0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
bac0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
bad0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
bae0: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
baf0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
bb00: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
bb10: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
bb20: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
bb30: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
bb40: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
bb50: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
bb60: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
bb70: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
bb80: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
bb90: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
bba0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
bbb0: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
bbc0: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
bbd0: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
bbe0: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
bbf0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
bc00: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
bc10: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
bc20: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
bc30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
bc40: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
bc50: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
bc60: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
bc70: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
bc80: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
bc90: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
bca0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
bcb0: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
bcc0: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
bcd0: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
bce0: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
bcf0: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
bd00: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
bd10: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
bd20: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
bd30: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
bd40: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
bd50: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
bd60: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
bd70: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
bd80: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
bd90: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
bda0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
bdb0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
bdc0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
bdd0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b  : r[P3]=r[P1]+r[
bde0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
bdf0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
be00: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
be10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
be20: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
be30: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
be40: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
be50: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
be60: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
be70: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
be80: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
be90: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
bea0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
beb0: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
bec0: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
bed0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bee0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
bef0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bf00: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
bf10: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
bf20: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
bf30: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
bf40: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
bf50: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
bf60: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
bf70: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
bf80: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
bf90: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
bfa0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
bfb0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bfc0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
bfd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bfe0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
bff0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c000: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c010: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c020: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c030: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c040: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
c050: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
c060: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c070: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
c080: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
c090: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c0a0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
c0b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
c0c0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
c0d0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c0e0: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
c0f0: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
c100: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
c110: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
c120: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
c130: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
c140: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
c150: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c160: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c170: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
c180: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c190: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
c1a0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
c1b0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
c1c0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
c1d0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
c1e0: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
c1f0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
c200: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
c210: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c220: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
c230: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c240: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
c250: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c260: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
c270: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
c280: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c290: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
c2a0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
c2b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c2c0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
c2d0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c2e0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
c2f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c300: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
c310: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
c320: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
c330: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
c340: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
c350: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
c360: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
c370: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
c380: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c390: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
c3a0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c3b0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
c3c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c3d0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
c3e0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
c3f0: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
c400: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
c410: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
c420: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
c430: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
c440: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
c450: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
c460: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
c470: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
c480: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
c490: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
c4a0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
c4b0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
c4c0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
c4d0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
c4e0: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
c4f0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
c500: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
c510: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
c520: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
c530: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
c540: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
c550: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
c560: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
c570: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
c580: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
c590: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
c5a0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
c5b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c5c0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
c5d0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
c5e0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
c5f0: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
c600: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
c610: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
c620: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
c630: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
c640: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
c650: 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  s;.  if( (type1 
c660: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
c670: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
c680: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
c690: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
c6a0: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
c6b0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
c6c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
c6d0: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
c6e0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
c6f0: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
c700: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
c710: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
c720: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
c730: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
c740: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
c750: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
c760: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c770: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
c780: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
c790: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
c7a0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
c7b0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c7c0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
c7d0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c7e0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c7f0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c800: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c810: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
c820: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
c830: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
c840: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
c850: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c860: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
c870: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
c880: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
c890: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c8a0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
c8b0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
c8c0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
c8d0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
c8e0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c8f0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
c900: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
c910: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c920: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
c930: 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d  e if( (flags & M
c940: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
c950: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
c960: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c970: 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  l;.  }else{.    
c980: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
c990: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
c9a0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
c9b0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
c9c0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c9d0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c9e0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c9f0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
ca00: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
ca10: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
ca20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ca30: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
ca40: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
ca50: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
ca60: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
ca70: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
ca80: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
ca90: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
caa0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
cab0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
cac0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
cad0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
cae0: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
caf0: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
cb00: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
cb10: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
cb20: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
cb30: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
cb40: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
cb50: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
cb60: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
cb70: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
cb80: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
cb90: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
cba0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
cbb0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
cbc0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
cbd0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
cbe0: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
cbf0: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
cc00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
cc10: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
cc20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
cc30: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
cc40: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
cc50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
cc60: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
cc70: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
cc80: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
cc90: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
cca0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ccb0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
ccc0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
ccd0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
cce0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ccf0: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
cd00: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
cd10: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
cd20: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
cd30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
cd40: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
cd50: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
cd60: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
cd70: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
cd80: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
cd90: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
cda0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
cdb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cdc0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
cdd0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
cde0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
cdf0: 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20  lSeq object. If 
ce00: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
ce10: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
ce20: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
ce30: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
ce40: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
ce50: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
ce60: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
ce70: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
ce80: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
ce90: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
cea0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
ceb0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
cec0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
ced0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
cee0: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
cef0: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
cf00: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
cf10: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
cf20: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
cf30: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
cf40: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
cf50: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
cf60: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
cf70: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
cf80: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
cf90: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
cfa0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
cfb0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
cfc0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
cfd0: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
cfe0: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
cff0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
d000: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
d010: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
d020: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
d030: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
d040: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
d050: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
d060: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
d070: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
d080: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
d090: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d0a0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
d0b0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
d0c0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
d0d0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
d0e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
d0f0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
d100: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
d110: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
d120: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
d130: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
d140: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d150: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
d160: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
d170: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
d180: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
d190: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
d1a0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
d1b0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
d1c0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
d1d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
d1e0: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
d1f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d200: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
d210: 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]|r[P2].**.** T
d220: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
d230: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
d240: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d250: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d260: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d270: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d280: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d290: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d2a0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d2b0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
d2c0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
d2d0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d2e0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72  : r[P3]=r[P2]<<r
d2f0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
d300: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
d310: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d320: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
d330: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d340: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d350: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d360: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d370: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d380: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d390: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d3a0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d3b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d3c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d3d0: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
d3e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d3f0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
d400: 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]>>r[P1].**.** 
d410: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
d420: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
d430: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
d440: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
d450: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
d460: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
d470: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
d480: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
d490: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d4a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d4b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d4c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d4d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
d4e0: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d500: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
d510: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
d520: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
d530: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
d540: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d550: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
d560: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
d570: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
d580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d590: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
d5a0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
d5b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
d5c0: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
d5d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d5e0: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
d5f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
d600: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
d610: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
d620: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
d630: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
d640: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
d650: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
d660: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
d670: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
d680: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
d690: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
d6a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
d6b0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
d6c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
d6d0: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
d6e0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
d6f0: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
d700: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
d710: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
d720: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
d730: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
d740: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
d750: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
d760: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
d770: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
d780: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
d790: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
d7a0: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
d7b0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
d7c0: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
d7d0: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
d7e0: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
d7f0: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
d800: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
d810: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
d820: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
d830: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
d840: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
d850: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
d860: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
d870: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
d880: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
d890: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
d8a0: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
d8b0: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
d8c0: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
d8d0: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
d8e0: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
d8f0: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
d900: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
d910: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d920: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
d930: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
d940: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
d950: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
d960: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
d970: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
d980: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
d990: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
d9a0: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
d9b0: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
d9c0: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
d9d0: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
d9e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
d9f0: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
da00: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
da10: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
da20: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
da30: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
da40: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
da50: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
da60: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
da70: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
da80: 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32  : r[P1]=r[P1]+P2
da90: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
daa0: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
dab0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
dac0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
dad0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
dae0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
daf0: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
db00: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
db10: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
db20: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
db30: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
db40: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
db50: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
db60: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
db70: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
db80: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
db90: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
dba0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
dbb0: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
dbc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
dbd0: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
dbe0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
dbf0: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
dc00: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dc10: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
dc20: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
dc30: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
dc40: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
dc50: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
dc60: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
dc70: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
dc80: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
dc90: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
dca0: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
dcb0: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
dcc0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
dcd0: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
dce0: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
dcf0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
dd00: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
dd10: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
dd20: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
dd30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
dd40: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
dd50: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
dd60: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
dd70: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
dd80: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
dd90: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
dda0: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
ddb0: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
ddc0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ddd0: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
dde0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
ddf0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
de00: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
de10: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
de20: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
de30: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
de40: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
de50: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
de60: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
de70: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
de80: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
de90: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
dea0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
deb0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
dec0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
ded0: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
dee0: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
def0: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
df00: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
df10: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
df20: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
df30: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
df40: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
df50: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
df60: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
df70: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
df80: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
df90: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
dfa0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
dfb0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
dfc0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
dfd0: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
dfe0: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
dff0: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
e000: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
e010: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
e020: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
e030: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
e040: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
e050: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
e060: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
e070: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
e080: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
e090: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
e0a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
e0b0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
e0c0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
e0d0: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
e0e0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
e0f0: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
e100: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
e110: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e120: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
e130: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
e140: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
e150: 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  ul>.** <li> P2==
e160: 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a  'A' &rarr; BLOB.
e170: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20  ** <li> P2=='B' 
e180: 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c  &rarr; TEXT.** <
e190: 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72  li> P2=='C' &rar
e1a0: 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c  r; NUMERIC.** <l
e1b0: 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72  i> P2=='D' &rarr
e1c0: 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69  ; INTEGER.** <li
e1d0: 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b  > P2=='E' &rarr;
e1e0: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
e1f0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
e200: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
e210: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
e220: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
e230: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
e240: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
e250: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
e260: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
e270: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
e280: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
e290: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
e2a0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e2b0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e2c0: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
e2d0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
e2e0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e2f0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e300: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e310: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
e320: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e330: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
e340: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
e350: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e360: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e370: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
e380: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
e390: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e3a0: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
e3b0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
e3c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
e3d0: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
e3e0: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
e3f0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
e400: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69  BSIZE(pIn1);.  i
e410: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
e420: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
e430: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
e440: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
e450: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
e460: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
e470: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e480: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72  sis: IF r[P3]==r
e490: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
e4a0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
e4b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
e4c0: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
e4d0: 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  ==reg(P1) then.*
e4e0: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
e4f0: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
e500: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e510: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
e520: 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65  5, then.** store
e530: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
e540: 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67  omparison in reg
e550: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
e560: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
e570: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
e580: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
e590: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
e5a0: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
e5b0: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
e5c0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
e5d0: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
e5e0: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
e5f0: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
e600: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
e610: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
e620: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
e630: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
e640: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
e650: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
e660: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
e670: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
e680: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
e690: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
e6a0: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
e6b0: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
e6c0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
e6d0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
e6e0: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
e6f0: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
e700: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
e710: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e720: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
e730: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
e740: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
e750: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
e760: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
e770: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
e780: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
e790: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
e7a0: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
e7b0: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
e7c0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
e7d0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
e7e0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
e7f0: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
e800: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
e810: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
e820: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
e830: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
e840: 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74   is used to do t
e850: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
e860: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
e870: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
e880: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
e890: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
e8a0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
e8b0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
e8c0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
e8d0: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
e8e0: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
e8f0: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
e900: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
e910: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
e920: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
e930: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
e940: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
e950: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
e960: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
e970: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  obs..**.** If SQ
e980: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e990: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
e9a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
e9b0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
e9c0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e9d0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e9e0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e9f0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
ea00: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
ea10: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
ea20: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
ea30: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
ea40: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
ea50: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
ea60: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
ea70: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
ea80: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
ea90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
eaa0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
eab0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
eac0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
ead0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a  ted from P5..**.
eae0: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
eaf0: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
eb00: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
eb10: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
eb20: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
eb30: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
eb40: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
eb50: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
eb60: 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a  L or 0 (false)..
eb70: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
eb80: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
eb90: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
eba0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
ebb0: 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f  y 1 (true)..*/./
ebc0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
ebd0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ebe0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
ebf0: 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]!=r[P1].**.** T
ec00: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ec10: 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  ike the Eq opcod
ec20: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ec30: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ec40: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
ec50: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
ec60: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
ec70: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
ec80: 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Eq opcode for.
ec90: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
eca0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
ecb0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
ecc0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
ecd0: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
ece0: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
ecf0: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
ed00: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
ed10: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
ed20: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
ed30: 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20  or 1 (true)..** 
ed40: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
ed50: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
ed60: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
ed70: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30  overwritten by 0
ed80: 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20   (false)..*/./* 
ed90: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
eda0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
edb0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
edc0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
edd0: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
ede0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
edf0: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
ee00: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
ee10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
ee20: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
ee30: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ee40: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
ee50: 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72  5 store.** the r
ee60: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
ee70: 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e  son (0 or 1 or N
ee80: 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74  ULL) into regist
ee90: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
eea0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
eeb0: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
eec0: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
eed0: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
eee0: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
eef0: 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68  then the take th
ef00: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
ef10: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ef20: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
ef30: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
ef40: 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f  ough if either o
ef50: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
ef60: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
ef70: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
ef80: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
ef90: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
efa0: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
efb0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
efc0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
efd0: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
efe0: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
eff0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
f000: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
f010: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
f020: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
f030: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
f040: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
f050: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
f060: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
f070: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
f080: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
f090: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
f0a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
f0b0: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
f0c0: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
f0d0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f0e0: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
f0f0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
f100: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
f110: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
f120: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
f130: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
f140: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
f150: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
f160: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
f170: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
f180: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
f190: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
f1a0: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
f1b0: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
f1c0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
f1d0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
f1e0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
f1f0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
f200: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
f210: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
f220: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
f230: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
f240: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
f250: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
f260: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
f270: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
f280: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
f290: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
f2a0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
f2b0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
f2c0: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
f2d0: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
f2e0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
f2f0: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
f300: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
f310: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
f320: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
f330: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
f340: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
f350: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
f360: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
f370: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f  than blobs..*/./
f380: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
f390: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f3a0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
f3b0: 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]<=r[P1].**.** T
f3c0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f3d0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f3e0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f3f0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f400: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
f410: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
f420: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
f430: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
f440: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f450: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f460: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f470: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f480: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f490: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
f4a0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f4b0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b  sis: IF r[P3]>r[
f4c0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
f4d0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
f4e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
f4f0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
f500: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
f510: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f520: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
f530: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
f540: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
f550: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
f560: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f570: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f580: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
f590: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
f5a0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f5b0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
f5c0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
f5d0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f5e0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f5f0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f600: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f610: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f620: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f630: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
f640: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
f650: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
f660: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
f670: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
f680: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f690: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
f6a0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
f6b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f6c0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
f6d0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f6e0: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
f6f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f700: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
f710: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f720: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
f730: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f740: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
f750: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
f760: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f770: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
f780: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f790: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f7b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
f7c0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f7d0: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f7f0: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
f800: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f810: 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b    int res, res2;
f820: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
f830: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
f840: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
f850: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
f860: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
f870: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
f880: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
f890: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
f8a0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
f8b0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
f8c0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
f8d0: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
f8e0: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
f8f0: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
f900: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
f910: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
f920: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f930: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
f940: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
f950: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
f960: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
f970: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
f980: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
f990: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
f9a0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
f9b0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
f9c0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
f9d0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
f9e0: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
f9f0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
fa00: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
fa10: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
fa20: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
fa30: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
fa40: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
fa50: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
fa60: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
fa70: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
fa80: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
fa90: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
faa0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
fab0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
fac0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
fad0: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
fae0: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
faf0: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
fb00: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
fb10: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
fb20: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
fb30: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
fb40: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
fb50: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
fb60: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
fb70: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
fb80: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
fb90: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
fba0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
fbb0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
fbc0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
fbd0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
fbe0: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fbf0: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fc00: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fc10: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fc20: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fc30: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fc40: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fc50: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fc60: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fc70: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
fc80: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fc90: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fca0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fcb0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fcc0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
fcd0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fce0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fcf0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fd00: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fd10: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
fd20: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
fd30: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
fd40: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
fd50: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
fd60: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
fd70: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
fd80: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
fd90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fda0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
fdb0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
fdc0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
fdd0: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
fde0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fdf0: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fe00: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
fe10: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
fe20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fe30: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
fe40: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
fe50: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
fe60: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
fe70: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
fe80: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
fe90: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
fea0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
feb0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
fec0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
fed0: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
fee0: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
fef0: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
ff00: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
ff10: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
ff20: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
ff30: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
ff40: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
ff50: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
ff60: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65  0);.          te
ff70: 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d  stcase( flags3!=
ff80: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f  pIn3->flags ); /
ff90: 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49  * Possible if pI
ffa0: 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20  n1==pIn3 */.    
ffb0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
ffc0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
ffd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
ffe0: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
fff0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
10000 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
10010 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
10020 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
10030 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
10040 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
10050 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
10060 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
10070 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
10080 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
10090 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
100a0 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
100b0 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
100c0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
100d0 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
100e0 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
100f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
10100 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
10110 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
10120 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
10130 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
10140 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
10150 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
10160 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10170 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
10180 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10190 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
101a0 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
101b0 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
101c0 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
101d0 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
101e0 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
101f0 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10200 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10210 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10220 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10230 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10240 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10250 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
10260 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10270 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
10280 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10290 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
102a0 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
102b0 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
102c0 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
102d0 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
102e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
102f0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10300 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10310 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10320 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10330 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10340 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
10350 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
10360 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10370 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10380 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10390 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
103a0 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
103b0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
103c0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
103d0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
103e0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
103f0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
10400 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10410 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10420 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
10430 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10440 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10450 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
10460 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
10470 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10480 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
10490 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
104a0 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
104b0 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
104c0 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
104d0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
104e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
104f0 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
10500 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
10510 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
10520 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
10530 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
10540 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
10550 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
10560 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
10570 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
10580 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
10590 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
105a0 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
105b0 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
105c0 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
105d0 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
105e0 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
105f0 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
10600 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
10610 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
10620 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
10630 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
10640 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
10650 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
10660 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
10670 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
10680 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
10690 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
106a0 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
106b0 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
106c0 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
106d0 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
106e0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
106f0 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
10700 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
10710 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
10720 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
10730 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
10740 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
10750 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
10760 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
10770 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10790 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
107a0 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
107b0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
107c0 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
107d0 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
107e0 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
107f0 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
10800 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
10810 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
10820 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
10830 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10840 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
10850 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
10860 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
10870 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
10880 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
10890 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
108a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
108b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
108c0 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
108d0 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
108e0 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
108f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
10900 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
10910 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
10920 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
10930 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
10940 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
10950 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
10960 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10970 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10980 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10990 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
109a0 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
109b0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
109c0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
109d0 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
109e0 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
109f0 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10a00 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10a10 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10a20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10a30 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10a40 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10a50 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10a60 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
10a70 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
10a80 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
10a90 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
10aa0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
10ab0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
10ac0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
10ad0 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
10ae0 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
10af0 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10b00 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10b10 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10b20 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10b30 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10b40 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10b50 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10b60 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
10b70 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
10b80 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
10b90 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
10ba0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
10bb0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
10bc0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10bd0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10be0 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10bf0 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10c00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10c10 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10c20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10c30 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10c40 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10c50 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10c60 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
10c70 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10c80 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10c90 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10ca0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
10cb0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10cc0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10cd0 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10ce0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10cf0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10d00 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10d10 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10d20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10d30 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10d40 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10d50 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10d60 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
10d70 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10d80 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
10d90 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
10da0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
10db0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10dc0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10dd0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10de0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10df0 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10e00 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10e10 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10e20 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10e30 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10e40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10e50 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10e60 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
10e70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
10e80 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
10e90 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
10ea0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
10eb0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
10ec0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10ed0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10ee0 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10ef0 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10f00 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10f10 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10f20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10f30 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10f40 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10f50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10f60 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
10f70 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
10f80 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
10f90 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
10fa0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
10fb0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
10fc0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10fd0 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10fe0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10ff0 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
11000 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
11010 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
11020 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
11030 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
11040 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
11050 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
11060 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
11070 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
11080 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
11090 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
110a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
110b0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
110c0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
110d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
110e0 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
110f0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
11100 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
11110 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
11120 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
11130 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
11140 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
11150 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
11160 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
11170 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
11180 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
11190 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
111a0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
111b0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
111c0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
111d0 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
111e0 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
111f0 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
11200 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
11210 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
11220 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
11230 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
11240 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
11250 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11260 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
11270 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
11280 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
11290 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
112a0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
112b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
112c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
112d0 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
112e0 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
112f0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
11300 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
11310 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
11320 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
11330 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
11340 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11350 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
11360 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11370 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
11380 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
11390 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
113a0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
113b0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
113c0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
113d0 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
113e0 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
113f0 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
11400 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
11410 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
11420 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
11430 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
11440 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
11450 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
11460 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
11470 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
11480 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
11490 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
114a0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
114b0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
114c0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
114d0 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
114e0 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
114f0 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
11500 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
11510 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
11520 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
11530 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
11540 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
11550 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11560 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
11570 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
11580 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
11590 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
115a0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
115b0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
115c0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
115d0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
115e0 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
115f0 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
11600 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
11610 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
11620 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
11630 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
11640 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
11650 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
11660 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
11670 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
11680 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
11690 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
116a0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
116b0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
116c0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
116d0 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
116e0 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
116f0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
11700 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
11710 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
11720 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11730 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
11740 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
11750 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
11760 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
11770 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
11780 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
11790 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
117a0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
117b0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
117c0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
117d0 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
117e0 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
117f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
11800 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
11810 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
11820 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
11830 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
11840 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
11850 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
11860 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
11870 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
11880 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
11890 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
118a0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
118b0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
118c0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
118d0 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
118e0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
118f0 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
11900 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
11910 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
11920 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
11930 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
11940 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
11950 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
11960 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
11970 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
11980 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
11990 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
119a0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
119b0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
119c0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
119d0 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
119e0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
119f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11a00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11a10 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11a20 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11a30 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11a40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11a50 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11a60 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11a70 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
11a80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11a90 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
11aa0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
11ab0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
11ac0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
11ad0 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
11ae0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
11af0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11b00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11b10 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11b20 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11b30 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11b40 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11b50 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11b60 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
11b70 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
11b80 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
11b90 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
11ba0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11bb0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11bc0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11bd0 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11be0 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11bf0 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11c00 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11c10 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11c20 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11c30 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11c40 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11c50 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11c60 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
11c70 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
11c80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11c90 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
11ca0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11cb0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
11cc0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11cd0 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11ce0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11cf0 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11d00 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11d10 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11d20 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11d30 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11d40 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11d50 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11d60 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
11d70 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
11d80 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
11d90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
11da0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
11db0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
11dc0 6e 63 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70  nchTaken(0,4); p
11dd0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11de0 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11df0 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11e00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11e10 68 54 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70  hTaken(1,4); pOp
11e20 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11e30 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11e40 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11e50 65 6e 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(2,4); pOp = &
11e60 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
11e70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11e80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
11e90 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11ea0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11eb0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
11ec0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11ed0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11ee0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11ef0 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11f00 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11f10 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11f20 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11f30 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11f40 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11f50 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11f60 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
11f70 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
11f80 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11f90 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
11fa0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
11fb0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11fc0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11fd0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11fe0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11ff0 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
12000 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
12010 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
12020 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
12030 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
12040 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
12050 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
12060 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
12070 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
12080 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
12090 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
120a0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
120b0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
120c0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
120d0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
120e0 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
120f0 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
12100 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
12110 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
12120 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12130 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
12140 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
12150 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
12160 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12170 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
12180 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
12190 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
121a0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
121b0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
121c0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
121d0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
121e0 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
121f0 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
12200 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
12210 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d   NULL */..  v1 =
12220 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
12230 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
12240 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76  Op->p1], 2);.  v
12250 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42  2 = sqlite3VdbeB
12260 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
12270 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a  m[pOp->p2], 2);.
12280 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
12290 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
122a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
122b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
122c0 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
122d0 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
122e0 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
122f0 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
12300 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
12310 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
12320 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
12330 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
12340 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
12350 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
12360 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
12370 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
12380 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
12390 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
123a0 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
123b0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
123c0 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
123d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
123e0 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
123f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
12400 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
12410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12420 20 49 73 54 72 75 65 20 50 31 20 50 32 20 50 33   IsTrue P1 P2 P3
12430 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
12440 73 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65  s: r[P2] = coale
12450 73 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c  sce(r[P1]==TRUE,
12460 50 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54  P3) ^ P4.**.** T
12470 68 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65  his opcode imple
12480 6d 65 6e 74 73 20 74 68 65 20 49 53 20 54 52 55  ments the IS TRU
12490 45 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20  E, IS FALSE, IS 
124a0 4e 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a  NOT TRUE, and.**
124b0 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70   IS NOT FALSE op
124c0 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49  erators..**.** I
124d0 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
124e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
124f0 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
12500 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61  alue.  Store tha
12510 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20  t.** boolean (a 
12520 30 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73  0 or 1) in regis
12530 74 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74  ter P2.  Or if t
12540 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12550 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
12560 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33  ULL, then the P3
12570 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
12580 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65  gister P2.  Inve
12590 72 74 20 74 68 65 20 61 6e 73 77 65 72 20 69 66  rt the answer if
125a0 20 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a   P4.** is 1..**.
125b0 2a 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20  ** The logic is 
125c0 73 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20  summarized like 
125d0 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e  this:.**.** <ul>
125e0 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d   .** <li> If P3=
125f0 3d 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =0 and P4==0  th
12600 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
12610 31 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c  1] IS TRUE.** <l
12620 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20  i> If P3==1 and 
12630 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
12640 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46  2] := r[P1] IS F
12650 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  ALSE.** <li> If 
12660 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20  P3==0 and P4==1 
12670 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
12680 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55  r[P1] IS NOT TRU
12690 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d  E.** <li> If P3=
126a0 3d 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =1 and P4==0  th
126b0 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
126c0 31 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a  1] IS NOT FALSE.
126d0 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65  ** </ul>.*/.case
126e0 20 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20   OP_IsTrue: {   
126f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
12700 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73  n1, out2 */.  as
12710 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
12720 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
12730 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
12740 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .i==0 || pOp->p4
12750 2e 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  .i==1 );.  asser
12760 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c  t( pOp->p3==0 ||
12770 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20   pOp->p3==1 );. 
12780 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12790 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
127a0 70 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71  p->p2],.      sq
127b0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
127c0 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
127d0 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e  >p1], pOp->p3) ^
127e0 20 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62   pOp->p4.i);.  b
127f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12800 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
12810 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12820 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
12830 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12840 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12850 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12860 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12870 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
12880 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
12890 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
128a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
128b0 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
128c0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
128d0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
128e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
128f0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12900 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12910 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
12920 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12930 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12940 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12950 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p2];.  if( (pI
12960 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12970 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12980 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12990 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
129a0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
129b0 56 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a  Value(pIn1,0));.
129c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
129d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
129e0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20  ll(pOut);.  }.  
129f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12a00 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
12a10 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
12a20 73 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50  sis: r[P2]= ~r[P
12a30 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
12a40 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
12a50 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
12a60 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
12a70 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
12a80 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
12a90 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
12aa0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
12ab0 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
12ac0 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
12ad0 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
12ae0 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
12af0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
12b00 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
12b10 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
12b20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
12b30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
12b40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
12b50 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
12b60 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
12b70 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12b80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12b90 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ==0 ){.    pOut-
12ba0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
12bb0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
12bc0 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  = ~sqlite3VdbeIn
12bd0 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
12be0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12bf0 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31   Opcode: Once P1
12c00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
12c10 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
12c20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
12c30 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74  tion the first t
12c40 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ime this opcode 
12c50 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65  is.** encountere
12c60 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61  d on each invoca
12c70 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65  tion of the byte
12c80 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20  -code program.  
12c90 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e  Jump to P2.** on
12ca0 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20   the second and 
12cb0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65  all subsequent e
12cc0 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67  ncounters during
12cd0 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61   the same invoca
12ce0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d  tion..**.** Top-
12cf0 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64  level programs d
12d00 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69  etermine first i
12d10 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d  nvocation by com
12d20 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a  paring the P1.**
12d30 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74   operand against
12d40 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20   the P1 operand 
12d50 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f  on the OP_Init o
12d60 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67  pcode at the beg
12d70 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65  inning.** of the
12d80 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68   program.  If th
12d90 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66  e P1 values diff
12da0 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  er, then fall th
12db0 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a  rough and make.*
12dc0 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73  * the P1 of this
12dd0 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f   opcode equal to
12de0 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e   the P1 of OP_In
12df0 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65  it.  If P1 value
12e00 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s are.** the sam
12e10 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  e then take the 
12e20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  jump..**.** For 
12e30 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65  subprograms, the
12e40 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20  re is a bitmask 
12e50 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65  in the VdbeFrame
12e60 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73   that determines
12e70 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
12e80 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75  ot the jump shou
12e90 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68  ld be taken.  Th
12ea0 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63  e bitmask is nec
12eb0 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73  essary.** becaus
12ec0 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72  e the self-alter
12ed0 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64  ing code trick d
12ee0 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  oes not work for
12ef0 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72   recursive.** tr
12f00 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  iggers..*/.case 
12f10 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
12f20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
12f30 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20  /.  u32 iAddr;  
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12f50 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73   Address of this
12f60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
12f70 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
12f80 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [0].opcode==OP_I
12f90 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  nit );.  if( p->
12fa0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41  pFrame ){.    iA
12fb0 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  ddr = (int)(pOp 
12fc0 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69  - p->aOp);.    i
12fd0 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61  f( (p->pFrame->a
12fe0 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20  Once[iAddr/8] & 
12ff0 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29  (1<<(iAddr & 7))
13000 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64  )!=0 ){.      Vd
13010 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
13020 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20   2);.      goto 
13030 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
13040 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d  }.    p->pFrame-
13050 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20  >aOnce[iAddr/8] 
13060 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37  |= 1<<(iAddr & 7
13070 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
13080 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  if( p->aOp[0].p1
13090 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ==pOp->p1 ){.   
130a0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
130b0 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20  en(1, 2);.      
130c0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
130d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62  .    }.  }.  Vdb
130e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20  eBranchTaken(0, 
130f0 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  2);.  pOp->p1 = 
13100 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20  p->aOp[0].p1;.  
13110 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13120 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
13130 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
13140 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13150 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13160 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
13170 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13180 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
13190 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
131a0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
131b0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
131c0 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
131d0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
131e0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
131f0 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
13200 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20  ase OP_If:  {   
13210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13220 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
13230 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74  t c;.  c = sqlit
13240 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
13250 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
13260 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  ], pOp->p3);.  V
13270 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13280 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13290 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
132a0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
132b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
132c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
132d0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
132e0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
132f0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
13300 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
13310 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13320 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
13330 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
13340 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
13350 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13360 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13370 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13380 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13390 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
133a0 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
133b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
133c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
133d0 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65  c;.  c = !sqlite
133e0 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
133f0 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
13400 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  , !pOp->p3);.  V
13410 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13420 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13430 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
13440 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
13450 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
13460 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
13470 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
13480 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
13490 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
134a0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
134b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
134c0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
134d0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
134e0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
134f0 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
13500 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
13510 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13520 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
13530 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
13540 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
13550 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
13560 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
13570 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
13580 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13590 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
135a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
135b0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
135c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
135d0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
135e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
135f0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13600 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13610 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
13620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
13630 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
13640 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
13650 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
13660 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
13670 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13680 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13690 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
136a0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
136b0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
136c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
136d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
136e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
136f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13700 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f  Opcode: IfNullRo
13710 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  w P1 P2 P3 * *.*
13720 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50  * Synopsis: if P
13730 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72  1.nullRow then r
13740 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20  [P3]=NULL, goto 
13750 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  P2.**.** Check t
13760 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
13770 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72  see if it is cur
13780 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
13790 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a  at a NULL row..*
137a0 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e  * If it is, then
137b0 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33   set register P3
137c0 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d   to NULL and jum
137d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
137e0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73   P2..** If P1 is
137f0 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72   not on a NULL r
13800 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ow, then fall th
13810 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61  rough without ma
13820 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e  king any.** chan
13830 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ges..*/.case OP_
13840 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20  IfNullRow: {    
13850 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
13860 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13870 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
13880 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
13890 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
138a0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
138b0 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
138c0 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77  Op->p1]->nullRow
138d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
138e0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d  dbeMemSetNull(aM
138f0 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  em + pOp->p3);. 
13900 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
13910 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
13920 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
13930 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13940 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f  SQL_FUNC./* Opco
13950 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32  de: Offset P1 P2
13960 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
13970 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c  sis: r[P3] = sql
13980 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a  ite_offset(P1).*
13990 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
139a0 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65  gister r[P3] the
139b0 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74   byte offset int
139c0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
139d0 69 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a  ile that is the.
139e0 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  ** start of the 
139f0 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20  payload for the 
13a00 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
13a10 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69  that cursor P1 i
13a20 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70  s currently.** p
13a30 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50  ointing..**.** P
13a40 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  2 is the column 
13a50 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61  number for the a
13a60 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
13a70 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66  qlite_offset() f
13a80 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73  unction..** This
13a90 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74   opcode does not
13aa0 20 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20   use P2 itself, 
13ab0 62 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65  but the P2 value
13ac0 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a   is used by the.
13ad0 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  ** code generato
13ae0 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20  r.  The P1, P2, 
13af0 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20  and P3 operands 
13b00 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  to this opcode a
13b10 72 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  re the.** same a
13b20 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e  s for OP_Column.
13b30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
13b40 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  de is only avail
13b50 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
13b60 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
13b70 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f  the.** -DSQLITE_
13b80 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13b90 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a  L_FUNC option..*
13ba0 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
13bb0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
13bc0 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75  out3 */.  VdbeCu
13bd0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
13be0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13bf0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
13c00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
13c10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
13c20 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
13c30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
13c40 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
13c50 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56  ->p3];.  if( NEV
13c60 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d  ER(pC==0) || pC-
13c70 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13c80 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
13c90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13ca0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
13cb0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
13cc0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
13cd0 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74  (pOut, sqlite3Bt
13ce0 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63  reeOffset(pC->uc
13cf0 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a  .pCursor));.  }.
13d00 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
13d10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
13d20 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
13d30 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NC */../* Opcode
13d40 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
13d50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
13d60 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13d70 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13d80 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13d90 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13da0 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13db0 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13dc0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13dd0 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13de0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
13df0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
13e00 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
13e10 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
13e20 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
13e30 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
13e40 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
13e50 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
13e60 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13e70 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13e80 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13e90 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13ea0 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13eb0 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13ec0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13ed0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13ee0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f  *.** If the reco
13ef0 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  rd contains fewe
13f00 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
13f10 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
13f20 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
13f30 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
13f40 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
13f50 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
13f60 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13f70 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13f80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13f90 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13fa0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13fb0 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13fc0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13fd0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13fe0 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
13ff0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
14000 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
14010 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
14020 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
14030 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
14040 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
14050 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
14060 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
14070 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
14080 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
14090 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
140a0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
140b0 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
140c0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
140d0 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
140e0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  then.** the resu
140f0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
14100 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
14110 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
14120 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
14130 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
14140 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
14150 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
14160 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
14170 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
14180 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
14190 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
141a0 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
141b0 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
141c0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
141d0 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
141e0 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
141f0 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
14200 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
14210 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
14220 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
14230 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
14240 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
14250 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
14260 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
14270 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
14280 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
14290 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
142a0 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
142b0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
142c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
142d0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
142e0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
142f0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
14300 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
14310 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
14320 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
14330 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
14340 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
14350 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
14360 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
14370 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
14380 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
14390 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
143a0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
143b0 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
143c0 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
143d0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
143e0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
143f0 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
14400 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
14410 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
14420 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
14430 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
14440 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
14450 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
14460 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
14470 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
14480 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
14490 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
144a0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
144b0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
144c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
144d0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
144e0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
144f0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
14500 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
14510 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
14520 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
14530 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
14540 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28  cache is stale (
14550 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f  meaning it is no
14560 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  t currently poin
14570 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f  t at.  ** the co
14580 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20  rrect row) then 
14590 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
145a0 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65  ate by doing the
145b0 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a   necessary .  **
145c0 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f   B-Tree seek. */
145d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
145e0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
145f0 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28  &pC, &p2);.  if(
14600 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
14610 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
14620 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14630 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
14640 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
14650 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
14660 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
14670 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
14680 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
14690 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
146a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
146b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
146c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
146d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
146e0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
146f0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
14700 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
14710 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
14720 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
14730 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
14740 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
14750 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
14760 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65  ullRow );.  asse
14770 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
14780 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  !=CURTYPE_SORTER
14790 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63   );..  if( pC->c
147a0 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
147b0 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20  acheCtr ){      
147c0 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49            /*OPTI
147d0 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
147e0 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  E*/.    if( pC->
147f0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
14800 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
14810 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
14820 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  O ){.        /* 
14830 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20  For the special 
14840 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64  case of as pseud
14850 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65  o-cursor, the se
14860 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20  ekResult field. 
14870 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69         ** identi
14880 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65  fies the registe
14890 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
148a0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20   record */.     
148b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
148c0 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20  eekResult>0 );. 
148d0 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
148e0 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75  Mem[pC->seekResu
148f0 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  lt];.        ass
14900 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
14910 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
14920 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
14930 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
14940 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
14950 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
14960 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e  >szRow = pReg->n
14970 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
14980 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
14990 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
149a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
149b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
149c0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
149d0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
149e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
149f0 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72  lse{.      pCrsr
14a00 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
14a10 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  r;.      assert(
14a20 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
14a30 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
14a40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
14a50 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73  rsr );.      ass
14a60 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
14a70 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
14a80 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70  Crsr) );.      p
14a90 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
14aa0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
14ab0 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
14ac0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
14ad0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
14ae0 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72  yloadFetch(pCrsr
14af0 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20  , &pC->szRow);. 
14b00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14b10 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c  >szRow<=pC->payl
14b20 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20  oadSize );.     
14b30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
14b40 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  ow<=65536 );  /*
14b50 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
14b60 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14b70 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14b80 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
14b90 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
14ba0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
14bb0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14bc0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
14bd0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
14be0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
14bf0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
14c00 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
14c10 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
14c20 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29  Row, aOffset[0])
14c30 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
14c40 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20  rsed = 0;...    
14c50 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f  if( pC->szRow<aO
14c60 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20  ffset[0] ){     
14c70 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
14c80 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
14c90 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
14ca0 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
14cb0 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
14cc0 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
14cd0 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
14ce0 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
14cf0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
14d00 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
14d10 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
14d20 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
14d30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
14d40 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
14d50 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
14d60 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
14d70 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
14d80 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
14d90 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
14da0 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
14db0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
14dc0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14dd0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
14de0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
14df0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
14e00 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
14e10 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
14e20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
14e30 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
14e40 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
14e50 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
14e60 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
14e70 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
14e80 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
14e90 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
14ea0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
14eb0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
14ec0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
14ed0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
14ee0 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
14ef0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
14f00 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
14f10 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
14f20 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
14f30 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
14f40 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
14f50 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
14f60 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
14f70 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
14f80 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
14f90 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
14fa0 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
14fb0 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
14fc0 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
14fd0 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
14fe0 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66  ] > 98307 || aOf
14ff0 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61  fset[0] > pC->pa
15000 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
15010 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
15020 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
15030 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
15040 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
15050 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
15060 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f  .  By skipping o
15070 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65  ver the first fe
15080 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a  w tests.      **
15090 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61   (ex: pC->nHdrPa
150a0 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65  rsed<=p2) in the
150b0 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77   next section, w
150c0 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20  e achieve a.    
150d0 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20    ** measurable 
150e0 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e  performance gain
150f0 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
15100 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   ** This branch 
15110 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66  is taken even if
15120 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20   aOffset[0]==0. 
15130 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69   Such a record i
15140 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a  s never.      **
15150 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51   generated by SQ
15160 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20  Lite, and could 
15170 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  be considered co
15180 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65  rruption, but we
15190 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74  .      ** accept
151a0 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63   it for historic
151b0 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65  al reasons.  Whe
151c0 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c  n aOffset[0]==0,
151d0 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20   the code this. 
151e0 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a       ** branch j
151f0 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61  umps to reads pa
15200 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
15210 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65  e record, but ne
15220 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a  ver more.      *
15230 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74  * than a few byt
15240 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65  es.  Even if the
15250 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61   record occurs a
15260 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15270 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63   page.      ** c
15280 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65  ontent area, the
15290 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63   "page header" c
152a0 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70  omes after the p
152b0 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  age content and 
152c0 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73  so.      ** this
152d0 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72   overread is har
152e0 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20  mless.  Similar 
152f0 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63  overreads can oc
15300 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70  cur for a corrup
15310 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62  t.      ** datab
15320 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20  ase file..      
15330 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
15340 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
15350 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
15360 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
15370 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
15380 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
15390 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
153a0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
153b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
153c0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
153d0 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
153e0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
153f0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
15400 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
15410 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
15420 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
15430 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
15440 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
15450 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
15460 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
15470 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15480 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
15490 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
154a0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
154b0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
154c0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
154d0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
154e0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
154f0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
15500 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
15510 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
15520 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
15530 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
15540 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
15550 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
15560 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
15570 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
15580 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
15590 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
155a0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
155b0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
155c0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
155d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
155e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
155f0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
15600 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
15610 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
15620 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15630 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15640 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15650 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
15660 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
15670 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15680 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15690 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
156a0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
156b0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
156c0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
156d0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
156e0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
156f0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
15700 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
15710 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
15720 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
15730 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
15740 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
15750 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
15760 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
15770 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
15780 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
15790 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72    testcase( zHdr
157a0 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  >=zEndHdr );.   
157b0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
157c0 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
157d0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
157e0 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
157f0 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
15800 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
15810 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
15820 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
15830 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
15840 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
15850 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
15860 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
15870 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
15880 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15890 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
158a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
158b0 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
158c0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
158d0 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
158e0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
158f0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
15900 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
15910 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
15920 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
15930 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
15940 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
15950 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
15960 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
15970 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
15980 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
15990 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
159a0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
159b0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
159c0 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
159d0 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
159e0 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
159f0 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
15a00 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
15a10 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
15a20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
15a30 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15a40 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
15a50 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
15a60 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
15a70 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
15a80 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
15a90 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
15aa0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
15ab0 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
15ac0 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
15ad0 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
15ae0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
15af0 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
15b00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
15b10 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15b20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15b30 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15b40 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
15b50 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
15b60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15b70 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
15b80 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
15b90 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15ba0 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
15bb0 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
15bc0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
15bd0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
15be0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
15bf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15c00 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
15c10 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
15c20 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
15c30 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
15c40 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
15c50 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
15c60 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
15c70 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
15c80 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
15c90 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
15ca0 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
15cb0 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
15cc0 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
15cd0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
15ce0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
15cf0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
15d00 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
15d10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
15d20 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
15d30 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
15d40 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
15d50 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
15d60 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
15d70 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
15d80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
15d90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
15da0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
15db0 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
15dc0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
15dd0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
15de0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
15df0 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
15e00 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
15e10 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
15e20 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
15e30 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
15e40 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
15e50 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
15e60 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
15e70 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
15e80 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
15e90 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
15ea0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
15eb0 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
15ec0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
15ed0 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
15ee0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
15ef0 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
15f00 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
15f10 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
15f20 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
15f30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15f40 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
15f50 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
15f60 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
15f70 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
15f80 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
15f90 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
15fa0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
15fb0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
15fc0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
15fd0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
15fe0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
15ff0 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
16000 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
16010 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
16020 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
16030 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
16040 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
16050 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
16060 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
16070 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
16080 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
16090 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
160a0 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
160b0 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
160c0 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
160d0 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
160e0 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
160f0 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
16100 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
16110 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
16120 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
16130 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
16140 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
16150 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
16160 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
16170 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
16180 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
16190 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
161a0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
161b0 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
161c0 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
161d0 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
161e0 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
161f0 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
16200 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
16210 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
16220 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
16230 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
16240 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16250 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
16260 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
16270 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16280 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
16290 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
162a0 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
162b0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
162c0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
162d0 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
162e0 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
162f0 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
16300 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
16310 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
16320 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
16330 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
16340 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
16350 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
16360 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
16370 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
16380 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
16390 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
163a0 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
163b0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
163c0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
163d0 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
163e0 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
163f0 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
16400 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
16410 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
16420 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
16430 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
16440 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
16450 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
16460 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
16470 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
16480 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
16490 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
164a0 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
164b0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
164c0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
164d0 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
164e0 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
164f0 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
16500 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
16510 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
16520 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
16530 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
16540 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
16550 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
16560 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
16570 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
16580 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
16590 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
165a0 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
165b0 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
165c0 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
165d0 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
165e0 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
165f0 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
16600 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
16610 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
16620 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
16630 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
16640 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16650 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
16660 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
16670 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
16680 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
16690 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
166a0 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
166b0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
166c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
166d0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
166e0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
166f0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
16700 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
16710 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16720 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16740 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16750 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
16760 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
16770 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
16780 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
16790 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
167a0 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
167b0 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
167c0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
167d0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
167e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
167f0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
16800 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
16810 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
16820 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
16830 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
16840 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
16850 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
16860 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
16870 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
16880 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16890 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
168a0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
168b0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
168c0 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
168d0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
168e0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
168f0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
16900 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
16910 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
16920 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
16930 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16940 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16950 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
16960 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
16970 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
16980 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
16990 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
169a0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
169b0 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
169c0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
169d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
169e0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
169f0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
16a00 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
16a10 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
16a20 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
16a30 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16a40 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16a50 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
16a60 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
16a70 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
16a80 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
16a90 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
16aa0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
16ab0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
16ac0 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
16ad0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
16ae0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
16af0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16b00 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
16b10 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
16b20 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
16b30 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
16b40 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
16b50 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
16b60 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
16b70 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
16b80 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
16b90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
16ba0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
16bb0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
16bc0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
16bd0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
16be0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
16bf0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
16c00 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
16c10 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
16c20 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
16c30 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
16c40 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
16c50 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
16c60 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
16c70 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
16c80 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
16c90 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
16ca0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
16cb0 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
16cc0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
16cd0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
16ce0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
16cf0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
16d00 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
16d10 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16d20 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16d30 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16d40 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16d50 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16d60 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16d70 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16d80 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16d90 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16da0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16db0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
16dc0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
16dd0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
16de0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
16df0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
16e00 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
16e10 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16e20 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16e30 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16e40 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16e50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16e60 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16e70 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16e80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16e90 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16ea0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16eb0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
16ec0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16ed0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16ee0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
16ef0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
16f00 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
16f10 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16f20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16f30 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16f40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16f50 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16f60 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16f70 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16f80 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16f90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16fa0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16fb0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
16fc0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
16fd0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
16fe0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
16ff0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
17000 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
17010 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
17020 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
17030 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
17040 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
17050 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
17060 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
17070 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17080 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
17090 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
170a0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
170b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
170c0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
170d0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
170e0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
170f0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
17100 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
17110 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
17120 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
17130 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
17140 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
17150 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
17160 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
17170 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
17180 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
17190 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
171a0 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
171b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
171c0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
171d0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
171e0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
171f0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
17200 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
17210 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
17220 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
17230 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
17240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17270 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
17280 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
17290 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
172a0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
172b0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
172c0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
172d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17310 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
17320 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
17330 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
17340 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
17350 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
17360 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
17370 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
17380 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
17390 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
173a0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
173b0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
173c0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
173d0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
173e0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
173f0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
17400 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
17410 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
17420 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
17430 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
17440 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
17450 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
17460 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
17470 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
17480 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17490 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
174a0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
174b0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
174c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
174d0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
174e0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
174f0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17500 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
17510 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
17520 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17530 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
17540 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
17550 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
17560 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
17570 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
17580 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
17590 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
175a0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
175b0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
175c0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
175d0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
175e0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
175f0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
17600 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
17610 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
17620 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
17630 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
17640 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
17650 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
17660 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
17670 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
17680 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
17690 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
176a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
176b0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
176c0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
176d0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
176e0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
176f0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
17700 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
17710 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
17720 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
17730 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
17740 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
17750 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
17760 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17770 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
17780 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
17790 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
177a0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
177b0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
177c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
177d0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
177e0 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
177f0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
17800 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
17810 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
17820 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
17830 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
17840 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
17850 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
17860 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
17870 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
17880 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
17890 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
178a0 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
178b0 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
178c0 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
178d0 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
178e0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
178f0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
17900 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
17910 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
17920 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
17930 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
17940 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
17950 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
17960 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
17970 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
17980 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
17990 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
179a0 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
179b0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
179c0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
179d0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
179e0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
179f0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
17a00 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
17a10 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
17a20 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
17a30 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
17a40 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
17a50 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
17a60 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
17a70 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
17a80 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
17a90 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
17aa0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
17ab0 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
17ac0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
17ad0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
17ae0 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  f( serial_type==
17af0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
17b00 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f  Values with MEM_
17b10 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72  Null and MEM_Zer
17b20 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79  o are created by
17b30 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c   xColumn virtual
17b40 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
17b50 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e  e methods that n
17b60 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69  ever invoke sqli
17b70 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78  te3_result_xxxxx
17b80 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20  () while.       
17b90 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e   ** computing an
17ba0 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
17bb0 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55  mn value in an U
17bc0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
17bd0 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65  .        ** Give
17be0 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73   such values a s
17bf0 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d  pecial internal-
17c00 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d  use-only serial-
17c10 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20  type of 10.     
17c20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68     ** so that th
17c30 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  ey can be passed
17c40 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64   through to xUpd
17c50 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20  ate and have.   
17c60 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73       ** a true s
17c70 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
17c80 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20  hange(). */.    
17c90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17ca0 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48  >p5==OPFLAG_NOCH
17cb0 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52  NG_MAGIC || CORR
17cc0 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
17cd0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
17ce0 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  10;.      }else 
17cf0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
17d00 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
17d10 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
17d20 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
17d30 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
17d40 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
17d50 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
17d60 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
17d70 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
17d80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17d90 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
17da0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17db0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
17dc0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
17dd0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
17de0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
17df0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
17e00 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
17e10 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
17e20 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63  _type);.    pRec
17e30 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
17e40 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70  _type;.    if( p
17e50 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
17e60 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
17e70 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
17e80 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
17e90 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
17ea0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
17eb0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
17ec0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
17ed0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
17ee0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
17ef0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
17f00 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
17f10 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
17f20 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
17f30 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
17f40 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
17f50 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
17f60 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
17f70 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
17f80 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
17f90 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
17fa0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
17fb0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
17fc0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
17fd0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
17fe0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
17ff0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
18000 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
18010 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
18020 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
18030 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
18040 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
18050 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
18060 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
18070 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
18080 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
18090 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
180a0 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
180b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
180c0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
180d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
180e0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
180f0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
18100 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
18110 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
18120 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
18130 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
18140 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
18150 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
18160 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
18170 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
18180 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
18190 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
181a0 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
181b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
181c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
181d0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
181e0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
181f0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
18200 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
18210 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
18220 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
18230 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
18240 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
18250 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
18260 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
18270 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
18280 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
18290 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
182a0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
182b0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
182c0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
182d0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
182e0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
182f0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
18300 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
18310 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
18320 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
18330 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
18340 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
18350 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
18360 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
18370 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
18380 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
18390 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
183a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
183b0 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
183c0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
183d0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
183e0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
183f0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
18400 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
18410 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
18420 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
18430 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
18440 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
18450 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
18460 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
18470 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
18480 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
18490 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
184a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
184b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
184c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
184d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
184e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
184f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
18500 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
18510 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
18520 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
18530 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
18540 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
18550 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
18560 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
18570 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
18580 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
18590 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ro;.  }.  REGIST
185a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
185b0 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
185c0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
185d0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
185e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
185f0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
18600 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
18610 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
18620 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
18630 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
18640 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
18650 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
18660 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
18670 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
18680 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
18690 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
186a0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
186b0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
186c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
186d0 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
186e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
186f0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  r;..  assert( p-
18700 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
18710 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
18720 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
18730 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
18740 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72  Op->p1]->uc.pCur
18750 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
18760 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
18770 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
18780 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
18790 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
187a0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
187b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
187c0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
187d0 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  y);.  if( rc ) g
187e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
187f0 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d  _error;.  pOut =
18800 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
18810 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
18820 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
18830 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
18840 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
18850 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
18860 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
18870 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
18880 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
18890 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
188a0 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
188b0 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
188c0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
188d0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
188e0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
188f0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
18900 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
18910 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
18920 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
18930 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
18940 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
18950 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
18960 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
18990 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
189a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
189d0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
189e0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
189f0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
18a00 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
18a10 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
18a20 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
18a30 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
18a40 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
18a50 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
18a60 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
18a70 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
18a80 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
18a90 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
18aa0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
18ab0 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
18ac0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
18ad0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
18ae0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
18af0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
18b00 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
18b10 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
18b20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
18b30 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
18b40 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
18b50 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
18b60 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
18b70 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
18b80 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
18b90 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18ba0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
18bb0 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
18bc0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
18bd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18be0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
18bf0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
18c00 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
18c10 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
18c20 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
18c30 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
18c40 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
18c50 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
18c60 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
18c70 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
18c80 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
18c90 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
18ca0 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
18cb0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
18cc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
18cd0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  or(p, "cannot op
18ce0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  en savepoint - S
18cf0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18d00 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18d10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18d20 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18d30 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
18d40 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
18d50 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
18d60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18d70 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
18d80 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
18d90 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
18da0 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
18db0 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
18dc0 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
18dd0 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
18de0 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
18df0 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
18e00 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
18e10 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
18e20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
18e30 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18e40 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
18e50 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
18e60 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
18e70 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
18e80 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
18e90 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18ea0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
18eb0 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
18ec0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
18ed0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18ee0 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18ef0 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18f20 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
18f30 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
18f40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18f50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18f60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
18f70 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
18f80 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
18f90 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
18fa0 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
18fb0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
18fc0 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  NN(db, sizeof(Sa
18fd0 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
18fe0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
18ff0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
19000 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
19010 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
19020 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
19030 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
19040 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
19050 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
19060 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
19070 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
19080 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
19090 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
190a0 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
190b0 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
190c0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
190d0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
190e0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
190f0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
19100 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19110 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19120 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
19130 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
19140 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
19150 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
19160 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
19170 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
19180 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
19190 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
191a0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
191b0 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
191c0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
191d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
191e0 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
191f0 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
19200 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19210 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
19220 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
19230 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19240 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19250 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
19260 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
19270 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
19280 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
19290 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
192a0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
192b0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
192c0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
192d0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
192e0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
192f0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
19300 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
19310 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
19320 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
19330 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
19340 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
19350 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
19360 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19370 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
19380 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
19390 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
193a0 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
193b0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
193c0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
193d0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
193e0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
193f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19400 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
19410 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
19420 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
19430 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19440 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
19450 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
19460 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
19470 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
19480 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
19490 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
194a0 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
194b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
194c0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
194d0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65  (p, "cannot rele
194e0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
194f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
19500 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
19510 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
19520 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
19530 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
19540 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
19550 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
19560 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
19570 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
19580 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
19590 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
195a0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
195b0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
195c0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
195d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
195e0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
195f0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
19600 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
19610 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
19620 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
19630 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
19640 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
19650 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
19660 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 7c  bConcurrent==0 |
19670 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
19680 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
19690 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  );.      if( isT
196a0 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
196b0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
196c0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
196d0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
196e0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
196f0 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
19700 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
19710 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
19720 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
19730 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
19740 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
19750 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
19760 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
19770 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
19780 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
19790 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20  aOp);.          
197a0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
197b0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
197c0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
197d0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
197e0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
197f0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
19800 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
19810 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
19820 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
19830 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
19840 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
19850 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  nt isSchemaChang
19860 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e;.        iSave
19870 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
19880 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
19890 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
198a0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
198b0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
198c0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
198d0 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d  aChange = (db->m
198e0 44 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47  DbFlags & DBFLAG
198f0 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d  _SchemaChange)!=
19900 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
19910 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
19920 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
19930 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19940 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
19950 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
19960 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
19990 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
199a0 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
199d0 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
199e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
199f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
19a00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19a10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
19a20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
19a30 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
19a40 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
19a50 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19a60 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
19a70 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
19a80 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
19a90 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
19aa0 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
19ab0 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
19ac0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
19ad0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19ae0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
19af0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19b00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19b10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19b20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
19b30 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
19b40 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19b50 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
19b60 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
19b70 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
19b80 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
19b90 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
19ba0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d  .          db->m
19bb0 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41  DbFlags |= DBFLA
19bc0 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  G_SchemaChange;.
19bd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19be0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
19bf0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
19c00 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
19c10 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
19c20 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
19c30 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
19c40 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
19c50 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
19c60 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
19c70 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
19c80 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
19c90 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
19ca0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
19cb0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
19cc0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
19cd0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
19ce0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
19cf0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
19d00 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
19d10 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
19d20 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
19d30 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
19d40 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
19d50 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
19d60 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
19d70 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
19d80 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
19d90 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
19da0 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
19db0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
19dc0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
19dd0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
19de0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
19df0 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
19e00 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
19e10 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
19e20 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
19e30 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
19e40 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
19e50 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
19e60 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
19e70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
19e80 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
19e90 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
19ea0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
19eb0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
19ec0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
19ed0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
19ee0 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
19ef0 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
19f00 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
19f10 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
19f20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19f30 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
19f40 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
19f50 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
19f60 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
19f70 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
19f80 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
19f90 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
19fa0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
19fb0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
19fc0 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
19fd0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
19fe0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19ff0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
1a000 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
1a010 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
1a020 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1a030 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1a040 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1a050 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
1a060 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1a070 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a080 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
1a090 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
1a0a0 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
1a0b0 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
1a0c0 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
1a0d0 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
1a0e0 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
1a0f0 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
1a100 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
1a110 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
1a120 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
1a130 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
1a140 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
1a150 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
1a160 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
1a170 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
1a180 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
1a190 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
1a1a0 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
1a1b0 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
1a1c0 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
1a1d0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69  e..**.** If P3 i
1a1e0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1a1f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a200 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
1a210 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 0a 2a  ted as part of.*
1a220 2a 20 61 20 22 42 45 47 49 4e 20 43 4f 4e 43 55  * a "BEGIN CONCU
1a230 52 52 45 4e 54 22 20 63 6f 6d 6d 61 6e 64 2e 0a  RRENT" command..
1a240 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a250 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
1a260 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
1a270 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
1a280 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
1a290 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
1a2a0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
1a2b0 0a 20 20 69 6e 74 20 62 43 6f 6e 63 75 72 72 65  .  int bConcurre
1a2c0 6e 74 3b 0a 20 20 69 6e 74 20 68 72 63 3b 0a 0a  nt;.  int hrc;..
1a2d0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
1a2e0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
1a2f0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
1a300 2d 3e 70 32 3b 0a 20 20 62 43 6f 6e 63 75 72 72  ->p2;.  bConcurr
1a310 65 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  ent = pOp->p3;. 
1a320 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
1a330 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
1a340 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1a350 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
1a360 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1a370 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
1a380 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
1a390 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a3a0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 62 43 6f  Commit==0 || bCo
1a3b0 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20  ncurrent==0 );. 
1a3c0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
1a3d0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
1a3e0 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30  ->bConcurrent==0
1a3f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1a400 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
1a410 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
1a420 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
1a430 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
1a440 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a450 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65  );..  if( desire
1a460 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
1a470 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
1a480 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
1a490 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a4a0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a4b0 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
1a4c0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1a4d0 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
1a4e0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
1a4f0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
1a500 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 64  mit = 1;.      d
1a510 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d  b->bConcurrent =
1a520 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
1a530 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a540 6d 69 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  mit.            
1a550 26 26 20 28 64 62 2d 3e 6e 56 64 62 65 57 72 69  && (db->nVdbeWri
1a560 74 65 3e 30 20 7c 7c 20 28 64 62 2d 3e 62 43 6f  te>0 || (db->bCo
1a570 6e 63 75 72 72 65 6e 74 20 26 26 20 64 62 2d 3e  ncurrent && db->
1a580 6e 56 64 62 65 41 63 74 69 76 65 3e 31 29 29 20  nVdbeActive>1)) 
1a590 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 74 72  ){.      /* A tr
1a5a0 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 6e  ansaction may on
1a5b0 6c 79 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20  ly be committed 
1a5c0 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
1a5d0 6f 74 68 65 72 20 61 63 74 69 76 65 0a 20 20 20  other active.   
1a5e0 20 20 20 2a 2a 20 77 72 69 74 65 72 20 56 4d 73     ** writer VMs
1a5f0 2e 20 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  . If the transac
1a600 74 69 6f 6e 20 69 73 20 43 4f 4e 43 55 52 52 45  tion is CONCURRE
1a610 4e 54 2c 20 74 68 65 6e 20 69 74 20 6d 61 79 20  NT, then it may 
1a620 6f 6e 6c 79 20 62 65 0a 20 20 20 20 20 20 2a 2a  only be.      **
1a630 20 63 6f 6d 6d 69 74 74 65 64 20 69 66 20 74 68   committed if th
1a640 65 72 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76  ere are no activ
1a650 65 20 56 4d 73 20 61 74 20 61 6c 6c 20 28 72 65  e VMs at all (re
1a660 61 64 65 72 73 20 6f 72 20 77 72 69 74 65 72 73  aders or writers
1a670 29 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  )..      **.    
1a680 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 6e 73    ** If this ins
1a690 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 43 4f  truction is a CO
1a6a0 4d 4d 49 54 20 61 6e 64 20 74 68 65 20 74 72 61  MMIT and the tra
1a6b0 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6e 6f 74  nsaction may not
1a6c0 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d   be.      ** com
1a6d0 6d 69 74 74 65 64 20 64 75 65 20 74 6f 20 6f 6e  mitted due to on
1a6e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 64 69 74 69  e of the conditi
1a6f0 6f 6e 73 20 61 62 6f 76 65 2c 20 72 65 74 75 72  ons above, retur
1a700 6e 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20  n an error.     
1a710 20 2a 2a 20 69 6e 64 69 63 61 74 69 6e 67 20 74   ** indicating t
1a720 68 61 74 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  hat other VMs mu
1a730 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f  st complete befo
1a740 72 65 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61  re the COMMIT ca
1a750 6e 20 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 70  n .      ** be p
1a760 72 6f 63 65 73 73 65 64 2e 20 20 2a 2f 0a 20 20  rocessed.  */.  
1a770 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
1a780 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
1a790 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
1a7a0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  on - ".         
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
1a7d0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
1a7e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a7f0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
1a800 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a810 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
1a820 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
1a830 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
1a840 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
1a850 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
1a860 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
1a870 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
1a880 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
1a890 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
1a8a0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 68 72  it;.    }.    hr
1a8b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
1a8c0 61 6c 74 28 70 29 3b 0a 20 20 20 20 69 66 28 20  alt(p);.    if( 
1a8d0 28 68 72 63 20 26 20 30 78 46 46 29 3d 3d 53 51  (hrc & 0xFF)==SQ
1a8e0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
1a8f0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
1a900 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
1a910 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
1a920 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
1a930 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
1a940 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 68 72 63       p->rc = hrc
1a950 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
1a960 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
1a970 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1a980 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
1a990 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d 20 28 75  bConcurrent = (u
1a9a0 38 29 62 43 6f 6e 63 75 72 72 65 6e 74 3b 0a 20  8)bConcurrent;. 
1a9b0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
1a9c0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
1a9d0 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
1a9e0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
1a9f0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
1aa00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1aa10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
1aa20 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
1aa30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1aa40 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1aa50 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
1aa60 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
1aa70 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
1aa80 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64  r(p,.        (!d
1aa90 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1aaa0 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
1aab0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
1aac0 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
1aad0 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
1aae0 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
1aaf0 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
1ab00 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
1ab10 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
1ab20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
1ab30 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
1ab40 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
1ab50 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
1ab60 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
1ab70 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
1ab80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ab90 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
1aba0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1abb0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
1abc0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
1abd0 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
1abe0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
1abf0 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
1ac00 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
1ac10 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
1ac20 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
1ac30 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
1ac40 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
1ac50 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
1ac60 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
1ac70 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
1ac80 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
1ac90 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
1aca0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
1acb0 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
1acc0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
1acd0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1ace0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
1acf0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
1ad00 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
1ad10 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
1ad20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
1ad30 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
1ad40 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
1ad50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1ad60 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
1ad70 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
1ad80 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
1ad90 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
1ada0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
1adb0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
1adc0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1add0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
1ade0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
1adf0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
1ae00 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
1ae10 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
1ae20 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
1ae30 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
1ae40 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
1ae50 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
1ae60 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
1ae70 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1ae80 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
1ae90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
1aea0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
1aeb0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
1aec0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
1aed0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
1aee0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
1aef0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
1af00 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
1af10 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
1af20 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
1af30 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
1af40 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
1af50 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
1af60 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1af70 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
1af80 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
1af90 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
1afa0 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
1afb0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
1afc0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
1afd0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
1afe0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
1aff0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
1b000 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
1b010 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1b020 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
1b030 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
1b040 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
1b050 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
1b060 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
1b070 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
1b080 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
1b090 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
1b0a0 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
1b0b0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
1b0c0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
1b0d0 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
1b0e0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
1b0f0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
1b100 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1b110 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
1b120 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
1b130 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
1b140 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
1b150 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
1b160 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
1b170 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
1b180 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
1b190 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
1b1a0 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
1b1b0 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
1b1c0 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
1b1d0 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
1b1e0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
1b1f0 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
1b200 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
1b210 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
1b220 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
1b230 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
1b240 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
1b250 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
1b260 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
1b270 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
1b280 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
1b290 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
1b2a0 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
1b2b0 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
1b2c0 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
1b2d0 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
1b2e0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
1b2f0 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
1b300 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
1b310 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
1b320 69 6e 74 20 69 4d 65 74 61 20 3d 20 30 3b 0a 0a  int iMeta = 0;..
1b330 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1b340 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1b350 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1b360 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
1b370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b380 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b390 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1b3a0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1b3b0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1b3c0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1b3d0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
1b3e0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
1b3f0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
1b400 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1b410 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
1b420 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b430 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
1b440 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
1b450 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
1b460 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
1b470 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b480 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
1b490 70 4f 70 2d 3e 70 32 2c 20 26 69 4d 65 74 61 29  pOp->p2, &iMeta)
1b4a0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1b4b0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1b4c0 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
1b4d0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1b4e0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
1b4f0 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  RY );.    if( rc
1b500 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b510 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66       if( (rc&0xf
1b520 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
1b530 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
1b540 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1b550 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Op);.        p->
1b560 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20  rc = rc;.       
1b570 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1b580 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
1b590 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b5a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1b5b0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
1b5c0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
1b5d0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
1b5e0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
1b5f0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
1b600 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
1b610 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1b620 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
1b630 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
1b640 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
1b650 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
1b660 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
1b670 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
1b680 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
1b690 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
1b6a0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
1b6b0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
1b6c0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
1b6d0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
1b6e0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
1b6f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b700 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1b710 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
1b720 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
1b730 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
1b740 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1b750 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1b760 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1b770 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
1b780 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
1b790 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
1b7a0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
1b7b0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
1b7c0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
1b7d0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
1b7e0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
1b7f0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
1b800 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
1b810 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
1b820 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
1b830 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1b840 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
1b850 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
1b860 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
1b870 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
1b880 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
1b890 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
1b8a0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
1b8b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
1b8c0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ons;.    }.  }. 
1b8d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1b8e0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
1b8f0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1b900 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 0a 20 20    if( pOp->p5.  
1b910 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d   && (iMeta!=pOp-
1b920 3e 70 33 0a 20 20 20 20 20 20 7c 7c 20 64 62 2d  >p3.      || db-
1b930 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1b940 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
1b950 6f 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a 20  on!=pOp->p4.i). 
1b960 20 29 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   ){.    /*.    *
1b970 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
1b980 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31  -OF: R-03189-511
1b990 33 35 20 41 73 20 65 61 63 68 20 53 51 4c 20 73  35 As each SQL s
1b9a0 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74  tatement runs, t
1b9b0 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a  he schema.    **
1b9c0 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63   version is chec
1b9d0 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ked to ensure th
1b9e0 61 74 20 74 68 65 20 73 63 68 65 6d 61 20 68 61  at the schema ha
1b9f0 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69  s not changed si
1ba00 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53  nce the.    ** S
1ba10 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73  QL statement was
1ba20 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a   prepared..    *
1ba30 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  /.    sqlite3DbF
1ba40 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
1ba50 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
1ba60 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
1ba70 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
1ba80 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1ba90 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
1baa0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
1bab0 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
1bac0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
1bad0 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
1bae0 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
1baf0 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
1bb00 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
1bb10 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
1bb20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
1bb30 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
1bb40 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1bb50 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
1bb60 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
1bb70 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
1bb80 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
1bb90 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
1bba0 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
1bbb0 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
1bbc0 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
1bbd0 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
1bbe0 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
1bbf0 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
1bc00 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
1bc10 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
1bc20 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
1bc30 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
1bc40 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
1bc50 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
1bc60 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
1bc70 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
1bc80 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
1bc90 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1bca0 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
1bcb0 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
1bcc0 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
1bcd0 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
1bce0 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
1bcf0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
1bd00 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
1bd10 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
1bd20 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
1bd30 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
1bd40 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
1bd50 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
1bd60 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
1bd70 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1bd80 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1bd90 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
1bda0 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
1bdb0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1bdc0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
1bdd0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1bde0 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
1bdf0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
1be00 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
1be10 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1be20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1be30 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1be40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1be50 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1be60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1be70 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1be80 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1be90 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1bea0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1beb0 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1bec0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1bed0 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1bee0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1bef0 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1bf00 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1bf10 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1bf20 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1bf30 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1bf40 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1bf50 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1bf60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1bf70 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1bf80 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1bf90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1bfa0 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1bfb0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1bfc0 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1bfd0 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1bfe0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1bff0 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1c000 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1c010 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1c020 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1c030 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1c040 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1c050 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1c060 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1c070 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1c080 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1c090 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1c0a0 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1c0b0 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1c0c0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1c0d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1c0e0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1c0f0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1c100 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1c110 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1c120 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1c130 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1c140 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1c150 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1c160 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1c170 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1c180 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1c190 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1c1a0 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1c1b0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1c1c0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1c1d0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1c1e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c1f0 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1c200 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1c210 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1c220 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1c230 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1c240 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1c250 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1c260 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1c270 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1c280 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1c290 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1c2a0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1c2b0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1c2c0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1c2d0 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1c2e0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1c2f0 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1c300 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1c310 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1c320 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1c330 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1c340 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1c350 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1c360 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1c370 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1c380 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1c390 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69  Db *pDb;..  sqli
1c3a0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
1c3b0 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
1c3c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1c3d0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1c3e0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1c3f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c400 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
1c410 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1c420 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1c430 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
1c440 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
1c450 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
1c460 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
1c470 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1c480 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
1c490 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1c4a0 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1c4b0 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ld(db, pOp->p1, 
1c4c0 30 29 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  0) );.#ifndef SQ
1c4d0 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 43 55 52  LITE_OMIT_CONCUR
1c4e0 52 45 4e 54 0a 20 20 69 66 28 20 64 62 2d 3e 62  RENT.  if( db->b
1c4f0 43 6f 6e 63 75 72 72 65 6e 74 20 0a 20 20 20 26  Concurrent .   &
1c500 26 20 28 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  & (pOp->p2==BTRE
1c510 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 20 7c  E_USER_VERSION |
1c520 7c 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  | pOp->p2==BTREE
1c530 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44 29  _APPLICATION_ID)
1c540 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  .  ){.    rc = S
1c550 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1c560 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
1c570 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6d 6f 64  r(p, "cannot mod
1c580 69 66 79 20 25 73 20 77 69 74 68 69 6e 20 43 4f  ify %s within CO
1c590 4e 43 55 52 52 45 4e 54 20 74 72 61 6e 73 61 63  NCURRENT transac
1c5a0 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 70  tion",.        p
1c5b0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 55 53  Op->p2==BTREE_US
1c5c0 45 52 5f 56 45 52 53 49 4f 4e 20 3f 20 22 75 73  ER_VERSION ? "us
1c5d0 65 72 5f 76 65 72 73 69 6f 6e 22 20 3a 20 22 61  er_version" : "a
1c5e0 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 22 0a 20  pplication_id". 
1c5f0 20 20 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61     );.    goto a
1c600 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c610 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  r;.  }.#endif.  
1c620 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
1c630 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
1c640 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
1c650 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
1c660 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
1c670 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
1c680 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  ->p2, pOp->p3);.
1c690 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
1c6a0 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
1c6b0 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
1c6c0 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
1c6d0 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
1c6e0 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
1c6f0 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
1c700 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
1c710 70 2d 3e 70 31 3d 3d 31 20 7c 7c 20 64 62 2d 3e  p->p1==1 || db->
1c720 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29  bConcurrent==0 )
1c730 3b 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  ;.    pDb->pSche
1c740 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1c750 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  e = pOp->p3;.   
1c760 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d   db->mDbFlags |=
1c770 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
1c780 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ange;.  }else if
1c790 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1c7a0 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1c7b0 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1c7c0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1c7d0 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1c7e0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1c7f0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d  le_format = pOp-
1c800 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  >p3;.  }.  if( p
1c810 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
1c820 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
1c830 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
1c840 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
1c850 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
1c860 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
1c870 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
1c880 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
1c890 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
1c8a0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
1c8b0 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
1c8c0 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
1c8d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1c8e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c8f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c900 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
1c910 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
1c920 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1c930 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1c940 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
1c950 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
1c960 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1c970 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
1c980 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
1c990 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
1c9a0 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
1c9b0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
1c9c0 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
1c9d0 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
1c9e0 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
1c9f0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
1ca00 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
1ca10 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1ca20 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
1ca30 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
1ca40 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
1ca50 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
1ca60 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
1ca70 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
1ca80 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
1ca90 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
1caa0 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
1cab0 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
1cac0 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
1cad0 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
1cae0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
1caf0 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
1cb00 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  tive..**.** Allo
1cb10 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20  wed P5 bits:.** 
1cb20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  <ul>.** <li>  <b
1cb30 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45  >0x02 OPFLAG_SEE
1cb40 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  KEQ</b>: This cu
1cb50 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  rsor will only b
1cb60 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20  e used for.**   
1cb70 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f      equality loo
1cb80 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65  kups (implemente
1cb90 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f  d as a pair of o
1cba0 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45  pcodes OP_SeekGE
1cbb0 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20  /OP_IdxGT.**    
1cbc0 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f     of OP_SeekLE/
1cbd0 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75  OP_IdxGT).** </u
1cbe0 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  l>.**.** The P4 
1cbf0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1cc00 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1cc10 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1cc20 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1cc30 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1cc40 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1cc50 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1cc60 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1cc70 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20  ** object, then 
1cc80 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1cc90 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69  ed must be an [i
1cca0 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65  ndex b-tree] whe
1ccb0 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66  re the.** KeyInf
1ccc0 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73  o object defines
1ccd0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1cce0 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1ccf0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20  equence of that 
1cd00 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74  index b-tree. Ot
1cd10 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1cd20 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1cd30 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65   value, then the
1cd40 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1cd50 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74  ned must be a [t
1cd60 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74  able b-tree] wit
1cd70 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  h a.** number of
1cd80 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73   columns no less
1cd90 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20   than the value 
1cda0 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  of P4..**.** See
1cdb0 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65   also: OpenWrite
1cdc0 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f  , ReopenIdx.*/./
1cdd0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e  * Opcode: Reopen
1cde0 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20  Idx P1 P2 P3 P4 
1cdf0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1ce00 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1ce10 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1ce20 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  dx opcode works 
1ce30 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  like OP_OpenRead
1ce40 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1ce50 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20  first.** checks 
1ce60 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75  to see if the cu
1ce70 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c  rsor on P1 is al
1ce80 72 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68  ready open on th
1ce90 65 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65  e same.** b-tree
1cea0 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68   and if it is th
1ceb0 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65  is opcode become
1cec0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f  s a no-op.  In o
1ced0 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69  ther words,.** i
1cee0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1cef0 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f  already open, do
1cf00 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a   not reopen it..
1cf10 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1cf20 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f  Idx opcode may o
1cf30 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68  nly be used with
1cf40 20 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50   P5==0 or P5==OP
1cf50 46 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61  FLAG_SEEKEQ.** a
1cf60 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1cf70 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1cf80 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1cf90 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1cfa0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65 20   must.** be the 
1cfb0 73 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f 74  same as every ot
1cfc0 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1cfd0 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1cfe0 65 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a  e same cursor.**
1cff0 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41   number..**.** A
1d000 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a  llowed P5 bits:.
1d010 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20  ** <ul>.** <li> 
1d020 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f   <b>0x02 OPFLAG_
1d030 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73  SEEKEQ</b>: This
1d040 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c   cursor will onl
1d050 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a  y be used for.**
1d060 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20         equality 
1d070 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65  lookups (impleme
1d080 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f  nted as a pair o
1d090 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65  f opcodes OP_See
1d0a0 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20  kGE/OP_IdxGT.** 
1d0b0 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b        of OP_Seek
1d0c0 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20  LE/OP_IdxGT).** 
1d0d0 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  </ul>.**.** See 
1d0e0 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61  also: OP_OpenRea
1d0f0 64 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a  d, OP_OpenWrite.
1d100 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1d110 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
1d120 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1d130 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1d140 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1d150 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1d160 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
1d170 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1d180 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
1d190 61 67 65 20 69 73 20 50 32 20 28 6f 72 20 77 68  age is P2 (or wh
1d1a0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1d1b0 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
1d1c0 72 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f  r P2 if the.** O
1d1d0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62 69  PFLAG_P2ISREG bi
1d1e0 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 2d  t is set in P5 -
1d1f0 20 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a   see below)..**.
1d200 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1d210 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1d220 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1d230 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1d240 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1d250 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1d260 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1d270 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1d280 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a   KeyInfo .** obj
1d290 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20  ect, then table 
1d2a0 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73  being opened mus
1d2b0 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62  t be an [index b
1d2c0 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74 68 65  -tree] where the
1d2d0 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  .** KeyInfo obje
1d2e0 63 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  ct defines the c
1d2f0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1d300 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1d310 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20  e of that index 
1d320 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73  b-tree. Otherwis
1d330 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1d340 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1d350 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1d360 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75   being opened mu
1d370 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62  st be a [table b
1d380 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a  -tree] with a.**
1d390 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1d3a0 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  ns no less than 
1d3b0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e  the value of P4.
1d3c0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50  .**.** Allowed P
1d3d0 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a  5 bits:.** <ul>.
1d3e0 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32  ** <li>  <b>0x02
1d3f0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f   OPFLAG_SEEKEQ</
1d400 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1d410 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65  will only be use
1d420 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65  d for.**       e
1d430 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20  quality lookups 
1d440 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20  (implemented as 
1d450 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65  a pair of opcode
1d460 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49  s OP_SeekGE/OP_I
1d470 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66  dxGT.**       of
1d480 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64   OP_SeekLE/OP_Id
1d490 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  xGT).** <li>  <b
1d4a0 3e 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52  >0x08 OPFLAG_FOR
1d4b0 44 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73  DELETE</b>: This
1d4c0 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1d4d0 6f 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20  only to seek.** 
1d4e0 20 20 20 20 20 20 61 6e 64 20 73 75 62 73 65 71        and subseq
1d4f0 75 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65 6e  uently delete en
1d500 74 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64 65  tries in an inde
1d510 78 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  x btree.  This i
1d520 73 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e  s a.**       hin
1d530 74 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67 65  t to the storage
1d540 20 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68 65   engine that the
1d550 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20   storage engine 
1d560 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a  is allowed to.**
1d570 20 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20 20         ignore.  
1d580 54 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74 20  The hint is not 
1d590 75 73 65 64 20 62 79 20 74 68 65 20 6f 66 66 69  used by the offi
1d5a0 63 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74 72  cial SQLite b*tr
1d5b0 65 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20  ee storage.**   
1d5c0 20 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74 20      engine, but 
1d5d0 69 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44 42  is used by COMDB
1d5e0 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30  2..** <li>  <b>0
1d5f0 78 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  x10 OPFLAG_P2ISR
1d600 45 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65 20  EG</b>: Use the 
1d610 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1d620 74 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20 20  ter P2.**       
1d630 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
1d640 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
1d650 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1d660 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69   </ul>.**.** Thi
1d670 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1d680 72 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  rks like OpenRea
1d690 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1d6a0 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
1d6b0 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
1d6c0 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53  te mode..**.** S
1d6d0 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e  ee also: OP_Open
1d6e0 52 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49  Read, OP_ReopenI
1d6f0 64 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  dx.*/.case OP_Re
1d700 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74  openIdx: {.  int
1d710 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1d720 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1d730 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1d740 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1d750 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1d760 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1d770 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1d780 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1d790 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1d7a0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1d7b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d7c0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1d7d0 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1d7e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1d7f0 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1d800 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1d810 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1d820 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1d830 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1d840 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1d850 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1d860 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1d870 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f   goto open_curso
1d880 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d  r_set_hints;.  }
1d890 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1d8a0 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1d8b0 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1d8c0 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1d8d0 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1d8e0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1d8f0 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1d900 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1d910 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  open */.case OP_
1d920 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1d930 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20  P_OpenWrite:..  
1d940 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1d950 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1d960 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1d970 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1d980 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1d990 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1d9a0 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1d9b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1d9c0 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1d9d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1d9e0 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1d9f0 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1da00 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1da10 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
1da20 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1da30 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67  _ROLLBACK;.    g
1da40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1da50 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e  _error;.  }..  n
1da60 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1da70 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1da80 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1da90 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1daa0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1dab0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1dac0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1dad0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1dae0 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1daf0 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1db00 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1db10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1db20 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1db30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1db40 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65  rite ){.    asse
1db50 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  rt( OPFLAG_FORDE
1db60 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44  LETE==BTREE_FORD
1db70 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46  ELETE );.    wrF
1db80 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53  lag = BTREE_WRCS
1db90 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  R | (pOp->p5 & O
1dba0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
1dbb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1dbc0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1dbd0 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
1dbe0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
1dbf0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1dc00 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
1dc10 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
1dc20 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
1dc30 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
1dc40 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1dc50 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
1dc60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
1dc70 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
1dc80 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1dc90 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20  LAG_P2ISREG ){. 
1dca0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
1dcb0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1dcc0 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
1dcd0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1dce0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1dcf0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1dd00 72 69 74 65 20 29 3b 0a 20 20 20 20 70 49 6e 32  rite );.    pIn2
1dd10 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1dd20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1dd30 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1dd40 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1dd50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1dd60 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1dd70 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1dd80 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1dd90 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1dda0 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1ddb0 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1ddc0 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1ddd0 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  or OP_CreateBtre
1dde0 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1ddf0 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1de00 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1de10 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1de20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1de30 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1de40 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1de50 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1de60 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1de70 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1de80 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1de90 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1dea0 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1deb0 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29   assert( p2>=2 )
1dec0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1ded0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1dee0 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1def0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1df00 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1df10 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1df20 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1df30 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1df40 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1df50 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1df60 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a  nfo->nAllField;.
1df70 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1df80 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1df90 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1dfa0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1dfb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dfc0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1dfd0 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1dfe0 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1dff0 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1e000 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1e010 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1e020 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1e030 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1e040 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1e050 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1e060 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1e070 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1e080 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e090 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1e0a0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1e0b0 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1e0c0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1e0d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1e0e0 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46  EBUG.  pCur->wrF
1e0f0 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65  lag = wrFlag;.#e
1e100 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
1e110 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1e120 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1e130 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75  KeyInfo, pCur->u
1e140 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  c.pCursor);.  pC
1e150 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1e160 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65  KeyInfo;.  /* Se
1e170 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1e180 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c  .isTable variabl
1e190 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  e. Previous vers
1e1a0 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c  ions of.  ** SQL
1e1b0 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63  ite used to chec
1e1c0 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  k if the root-pa
1e1d0 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61  ge flags were sa
1e1e0 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ne at this point
1e1f0 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74  .  ** and report
1e200 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
1e210 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72  tion if they wer
1e220 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20  e not, but this 
1e230 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73  check has.  ** s
1e240 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  ince moved into 
1e250 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
1e260 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69    */  .  pCur->i
1e270 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
1e280 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
1e290 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73  ;..open_cursor_s
1e2a0 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65  et_hints:.  asse
1e2b0 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1e2c0 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1e2d0 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AD );.  assert( 
1e2e0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42  OPFLAG_SEEKEQ==B
1e2f0 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a  TREE_SEEK_EQ );.
1e300 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
1e310 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1e320 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53  KCSR );.#ifdef S
1e330 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
1e340 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74  SOR_HINTS.  test
1e350 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20  case( pOp->p2 & 
1e360 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1e370 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
1e380 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1e390 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70  Flags(pCur->uc.p
1e3a0 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20  Cursor,.        
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
1e3d0 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  & (OPFLAG_BULKCS
1e3e0 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1e3f0 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  ));.  if( rc ) g
1e400 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e410 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1e420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e430 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a  penDup P1 P2 * *
1e440 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
1e450 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68  new cursor P1 th
1e460 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  at points to the
1e470 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20   same ephemeral 
1e480 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73  table as.** curs
1e490 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63  or P2.  The P2 c
1e4a0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
1e4b0 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61  been opened by a
1e4c0 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70   prior OP_OpenEp
1e4d0 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64  hemeral.** opcod
1e4e0 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72  e.  Only ephemer
1e4f0 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62  al cursors may b
1e500 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a  e duplicated..**
1e510 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70  .** Duplicate ep
1e520 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20  hemeral cursors 
1e530 61 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c  are used for sel
1e540 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72  f-joins of mater
1e550 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a  ialized views..*
1e560 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75  /.case OP_OpenDu
1e570 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  p: {.  VdbeCurso
1e580 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20  r *pOrig;    /* 
1e590 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72  The original cur
1e5a0 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63  sor to be duplic
1e5b0 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  ated */.  VdbeCu
1e5c0 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20  rsor *pCx;      
1e5d0 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f  /* The new curso
1e5e0 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20  r */..  pOrig = 
1e5f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32  p->apCsr[pOp->p2
1e600 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72  ];.  assert( pOr
1e610 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20  ig->pBtx!=0 );  
1e620 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  /* Only ephemera
1e630 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65  l cursors can be
1e640 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a   duplicated */..
1e650 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1e660 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1e670 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64  1, pOrig->nField
1e680 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1e690 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1e6a0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e6b0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1e6c0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1e6d0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1e6e0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1e6f0 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b  pOrig->pKeyInfo;
1e700 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1e710 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65  = pOrig->isTable
1e720 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1e730 42 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69  BtreeCursor(pOri
1e740 67 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f  g->pBtx, MASTER_
1e750 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1e760 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78               pCx
1e780 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d  ->pKeyInfo, pCx-
1e790 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1e7a0 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74  /* The sqlite3Bt
1e7b0 72 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74  reeCursor() rout
1e7c0 69 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69  ine can only fai
1e7d0 6c 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  l for the first 
1e7e0 63 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e  cursor.  ** open
1e7f0 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
1e800 65 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20  e.  Since there 
1e810 69 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70  is already an op
1e820 65 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74  en cursor when t
1e830 68 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20  his.  ** opcode 
1e840 69 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69  is run, the sqli
1e850 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
1e860 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
1e870 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1e880 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65  LITE_OK );.  bre
1e890 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1e8a0 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1e8b0 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1e8c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1e8d0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1e8e0 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1e8f0 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1e900 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1e910 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1e920 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1e930 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1e940 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1e950 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1e960 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1e970 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1e980 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1e990 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1e9a0 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1e9b0 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1e9c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1e9d0 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1e9e0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1e9f0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1ea00 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1ea10 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1ea20 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1ea30 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1ea40 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1ea50 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1ea60 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1ea70 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1ea80 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1ea90 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1eaa0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1eab0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1eac0 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1ead0 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1eae0 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1eaf0 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1eb00 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1eb10 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1eb20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1eb30 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1eb40 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1eb50 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1eb60 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1eb70 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1eb80 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1eb90 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1eba0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1ebb0 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1ebc0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1ebd0 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1ebe0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1ebf0 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1ec00 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1ec10 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1ec20 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1ec30 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1ec40 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1ec50 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1ec60 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1ec70 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1ec80 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1ec90 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1eca0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1ecb0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1ecc0 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1ecd0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1ece0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1ecf0 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1ed00 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1ed10 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ed20 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1ed30 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1ed40 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1ed50 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1ed60 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1ed70 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1ed80 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1ed90 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1eda0 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1edb0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1edc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1edd0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1ede0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1edf0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1ee00 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1ee10 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1ee20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1ee30 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1ee40 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1ee50 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1ee60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1ee70 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1ee80 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1ee90 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20  >pBtx, .        
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1eec0 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1eed0 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1eee0 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1eef0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1ef00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ef10 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1ef20 43 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b  Cx->pBtx, 1, 0);
1ef30 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1ef40 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1ef50 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1ef60 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1ef70 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1ef80 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1ef90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1efa0 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1efb0 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1efc0 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1efd0 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1efe0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1eff0 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1f000 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1f010 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1f020 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1f030 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1f040 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1f050 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1f060 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d  */.    if( (pCx-
1f070 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1f080 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1f090 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1f0a0 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1f0b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f0c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1f0d0 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1f0e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1f0f0 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1f100 70 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52  pBtx, &pgno, BTR
1f110 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1f120 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1f130 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1f140 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1f150 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1f160 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1f170 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1f180 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1f190 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1f1a0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1f1b0 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1f1c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f1d0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1f1e0 78 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57  x, pgno, BTREE_W
1f1f0 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20        pKeyInfo, 
1f220 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1f230 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1f240 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1f250 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1f260 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f270 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1f280 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  pBtx, MASTER_ROO
1f290 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  T, BTREE_WRCSR,.
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
1f2c0 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1f2d0 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
1f2e0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
1f2f0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1f300 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f310 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e  o_error;.  pCx->
1f320 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70  isOrdered = (pOp
1f330 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52  ->p5!=BTREE_UNOR
1f340 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b  DERED);.  break;
1f350 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1f360 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20  orterOpen P1 P2 
1f370 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  P3 P4 *.**.** Th
1f380 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1f390 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1f3a0 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1f3b0 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1f3c0 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1f3d0 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1f3e0 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1f3f0 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1f400 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1f410 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1f420 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a  rt algorithm..**
1f430 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20  .** If argument 
1f440 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P3 is non-zero, 
1f450 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65  then it indicate
1f460 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65  s that the sorte
1f470 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20  r may.** assume 
1f480 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f  that a stable so
1f490 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74  rt considering t
1f4a0 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c  he first P3 fiel
1f4b0 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65  ds of each.** ke
1f4c0 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20  y is sufficient 
1f4d0 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72  to produce the r
1f4e0 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e  equired results.
1f4f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1f500 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1f510 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1f520 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f530 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f540 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1f550 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1f560 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1f570 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55   pOp->p2, -1, CU
1f580 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20  RTYPE_SORTER);. 
1f590 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1f5a0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1f5b0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1f5c0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1f5d0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1f5e0 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1f5f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1f600 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d  >pKeyInfo->enc==
1f610 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20  ENC(db) );.  rc 
1f620 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
1f630 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d  terInit(db, pOp-
1f640 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28  >p3, pCx);.  if(
1f650 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1f660 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f670 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f680 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65  code: SequenceTe
1f690 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
1f6a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20  * Synopsis: if( 
1f6b0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
1f6c0 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a   ) pc = P2.**.**
1f6d0 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
1f6e0 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73  cursor. If the s
1f6f0 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20  equence counter 
1f700 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
1f710 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  o, jump.** to P2
1f720 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
1f730 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1f740 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
1f750 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a  , increment the.
1f760 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ** the sequence 
1f770 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
1f780 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20  P_SequenceTest: 
1f790 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1f7a0 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  pC;.  assert( pO
1f7b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f7c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f7d0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f7e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f7f0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
1f800 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  C) );.  if( (pC-
1f810 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1f820 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
1f830 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
1f840 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1f850 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1f860 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1f870 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1f880 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1f890 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1f8a0 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1f8b0 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1f8c0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1f8d0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1f8e0 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1f8f0 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1f900 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1f910 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1f920 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1f930 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1f940 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1f950 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1f960 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1f970 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1f980 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1f990 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1f9a0 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1f9b0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1f9c0 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1f9d0 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1f9e0 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1f9f0 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1fa00 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1fa10 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1fa20 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1fa30 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1fa40 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1fa50 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1fa60 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1fa70 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1fa80 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1fa90 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1faa0 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1fab0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1fac0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1fad0 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1fae0 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1faf0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1fb00 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1fb10 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1fb20 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1fb30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1fb40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fb50 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1fb60 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1fb70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1fb80 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p3, -1, CURTYPE_
1fb90 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70  PSEUDO);.  if( p
1fba0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1fbb0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1fbc0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1fbd0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
1fbe0 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1fbf0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47  able = 1;.  /* G
1fc00 69 76 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d  ive this pseudo-
1fc10 63 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74  cursor a fake Bt
1fc20 43 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73  Cursor pointer s
1fc30 6f 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20  o that pCx.  ** 
1fc40 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61  can be safely pa
1fc50 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56  ssed to sqlite3V
1fc60 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1fc70 29 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20  ).  This avoids 
1fc80 61 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20  a test.  ** for 
1fc90 70 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  pCx->eCurType==C
1fca0 55 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73  URTYPE_BTREE ins
1fcb0 69 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64  ide of sqlite3Vd
1fcc0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
1fcd0 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61  .  ** which is a
1fce0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74   performance opt
1fcf0 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70  imization */.  p
1fd00 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
1fd10 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b   sqlite3BtreeFak
1fd20 65 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a  eValidCursor();.
1fd30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fd40 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  5==0 );.  break;
1fd50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1fd60 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1fd70 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1fd80 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1fd90 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1fda0 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1fdb0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1fdc0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1fdd0 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1fde0 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1fdf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fe00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1fe10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fe20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1fe30 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1fe40 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1fe50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1fe60 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1fe70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1fe80 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1fe90 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64  ED_MASK./* Opcod
1fea0 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50  e: ColumnsUsed P
1feb0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1fec0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68   This opcode (wh
1fed0 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20  ich only exists 
1fee0 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f  if SQLite was co
1fef0 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53  mpiled with.** S
1ff00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1ff10 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69  UMN_USED_MASK) i
1ff20 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20  dentifies which 
1ff30 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a  columns of the.*
1ff40 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
1ff50 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61   for cursor P1 a
1ff60 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20  re used.  P4 is 
1ff70 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
1ff80 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69  .** (P4_INT64) i
1ff90 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73  n which the firs
1ffa0 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e  t 63 bits are on
1ffb0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
1ffc0 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f  e.** first 63 co
1ffd0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
1ffe0 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74  le or index that
1fff0 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73   are actually us
20000 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72  ed.** by the cur
20010 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f  sor.  The high-o
20020 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20  rder bit is set 
20030 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66  if any column af
20040 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20  ter.** the 64th 
20050 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65  is used..*/.case
20060 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a   OP_ColumnsUsed:
20070 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
20080 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  *pC;.  pC = p->a
20090 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
200a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
200b0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
200c0 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61  TREE );.  pC->ma
200d0 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29  skUsed = *(u64*)
200e0 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
200f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
20100 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
20110 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
20120 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20130 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
20140 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
20150 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
20160 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
20170 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
20180 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
20190 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
201a0 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
201b0 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
201c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
201d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
201e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
201f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
20200 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
20210 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
20220 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
20230 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
20240 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
20250 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
20260 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
20270 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
20280 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
20290 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
202a0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
202b0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
202c0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
202d0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
202e0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
202f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
20300 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
20310 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
20320 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
20330 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
20340 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
20350 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
20360 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
20370 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
20380 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
20390 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
203a0 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
203b0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
203c0 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
203d0 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
203e0 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
203f0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
20400 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
20410 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxLE opcode with
20420 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
20430 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c  nts..** The IdxL
20440 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
20450 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
20460 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
20470 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
20480 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
20490 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
204a0 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
204b0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ions..**.** This
204c0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
204d0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
204e0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
204f0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
20500 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
20510 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
20520 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
20530 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
20540 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
20550 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
20560 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
20570 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20580 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
20590 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
205a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
205b0 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
205c0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
205d0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
205e0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
205f0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
20600 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
20610 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
20620 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
20630 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
20640 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
20650 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
20660 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
20670 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
20680 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
20690 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
206a0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
206b0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
206c0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
206d0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
206e0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
206f0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
20700 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
20710 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
20720 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
20730 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
20740 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
20750 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
20760 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
20770 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
20780 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
20790 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
207a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
207b0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
207c0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
207d0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
207e0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
207f0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
20800 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
20810 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
20820 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
20830 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
20840 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
20850 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20860 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
20870 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
20880 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
20890 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20  code: SeekLT P1 
208a0 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
208b0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
208c0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
208d0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
208e0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
208f0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
20900 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
20910 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
20920 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
20930 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
20940 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20950 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
20960 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
20970 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
20980 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
20990 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
209a0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
209b0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
209c0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
209d0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
209e0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
209f0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
20a00 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
20a10 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
20a20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
20a30 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
20a40 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
20a50 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
20a60 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
20a70 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
20a80 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20a90 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20aa0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
20ab0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
20ac0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
20ad0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
20ae0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
20af0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
20b00 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
20b10 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
20b20 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
20b30 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20b40 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20b50 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
20b60 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
20b70 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31  pcode: SeekLE P1
20b80 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20b90 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20ba0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
20bb0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20bc0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
20bd0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
20be0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
20bf0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
20c00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
20c10 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
20c20 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20c30 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
20c40 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
20c50 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
20c60 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
20c70 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
20c80 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
20c90 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
20ca0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
20cb0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
20cc0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
20cd0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
20ce0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
20cf0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
20d00 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
20d10 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
20d20 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
20d30 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
20d40 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
20d50 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
20d60 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
20d70 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
20d80 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
20d90 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
20da0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
20db0 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
20dc0 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
20dd0 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
20de0 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
20df0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
20e00 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
20e10 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
20e20 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  t Next..**.** If
20e30 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
20e40 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
20e50 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
20e60 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
20e70 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
20e80 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
20e90 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
20ea0 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
20eb0 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
20ec0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
20ed0 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
20ee0 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
20ef0 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
20f00 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
20f10 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
20f20 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  n IdxGE opcode w
20f30 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
20f40 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
20f50 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
20f60 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
20f70 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
20f80 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
20f90 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
20fa0 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
20fb0 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
20fc0 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53  rations..**.** S
20fd0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20fe0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
20ff0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
21000 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
21010 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LT:         /* j
21020 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
21030 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20   OP_SeekLE:     
21040 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
21050 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
21060 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  GE:         /* j
21070 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
21080 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20   OP_SeekGT: {   
21090 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
210a0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
210b0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
210c0 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f  arison result */
210d0 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20  .  int oc;      
210e0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
210f0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21100 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63  *pC;    /* The c
21110 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f  ursor to seek */
21120 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21130 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79  d r;  /* The key
21140 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a   to seek for */.
21150 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
21160 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21170 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65  f columns or fie
21180 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a  lds in the key *
21190 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
211a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f         /* The ro
211b0 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
211c0 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65  ek to */.  int e
211d0 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a  qOnly;        /*
211e0 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64   Only interested
211f0 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a   in == results *
21200 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
21210 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21220 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21230 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21240 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
21250 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21260 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21270 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21280 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
21290 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
212a0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
212b0 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  LE == OP_SeekLT+
212c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
212d0 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53  P_SeekGE == OP_S
212e0 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73  eekLT+2 );.  ass
212f0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d  ert( OP_SeekGT =
21300 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b  = OP_SeekLT+3 );
21310 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
21320 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
21330 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
21340 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
21350 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
21360 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70   eqOnly = 0;.  p
21370 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
21380 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21390 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
213a0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
213b0 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43  #endif..  if( pC
213c0 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
213d0 20 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45   /* The BTREE_SE
213e0 45 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e  EK_EQ flag is on
213f0 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20  ly set on index 
21400 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61  cursors */.    a
21410 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
21420 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
21430 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
21440 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d   BTREE_SEEK_EQ)=
21450 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =0.             
21460 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
21470 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  ;..    /* The in
21480 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
21490 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
214a0 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
214b0 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
214c0 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
214d0 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
214e0 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
214f0 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
21500 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65  do.    ** the se
21510 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69  ek, so convert i
21520 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
21530 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
21540 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
21550 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
21560 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
21570 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
21580 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
21590 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
215a0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
215b0 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
215c0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
215d0 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
215e0 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
215f0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
21600 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
21610 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
21620 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
21630 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
21640 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
21650 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
21660 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
21670 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
21680 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
21690 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
216a0 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
216b0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
216c0 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
216d0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
216e0 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
216f0 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
21700 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
21710 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
21720 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
21730 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  /.        VdbeBr
21740 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20  anchTaken(1,2); 
21750 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21760 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
21770 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
21780 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
21790 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
217a0 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
217b0 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
217c0 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
217d0 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
217e0 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
217f0 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
21800 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
21810 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
21820 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
21830 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
21840 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
21850 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
21860 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
21870 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
21880 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
21890 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
218a0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
218b0 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
218c0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
218d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
218e0 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
218f0 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
21900 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
21910 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
21920 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
21930 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
21940 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
21950 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
21960 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
21970 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
21980 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
21990 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
219a0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
219b0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
219c0 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
219d0 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
219e0 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
219f0 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
21a00 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
21a10 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
21a20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
21a30 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
21a40 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
21a50 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
21a60 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
21a70 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
21a80 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
21a90 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
21aa0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
21ab0 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
21ac0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
21ad0 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
21ae0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
21af0 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
21b00 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
21b10 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
21b20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63   }.    } .    rc
21b30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21b40 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21b50 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
21b60 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
21b70 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  res);.    pC->mo
21b80 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
21b90 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
21ba0 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20  P_Delete */.    
21bb0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
21bc0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
21bd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21be0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  or;.    }.  }els
21bf0 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20  e{.    /* For a 
21c00 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20  cursor with the 
21c10 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69  BTREE_SEEK_EQ hi
21c20 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f  nt, only the OP_
21c30 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a  SeekGE and.    *
21c40 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f  * OP_SeekLE opco
21c50 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  des are allowed,
21c60 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20   and these must 
21c70 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  be immediately f
21c80 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62  ollowed.    ** b
21c90 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72  y an OP_IdxGT or
21ca0 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65   OP_IdxLT opcode
21cb0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  , respectively, 
21cc0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
21cd0 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  y..    */.    if
21ce0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
21cf0 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
21d00 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
21d10 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20  E_SEEK_EQ) ){.  
21d20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a      eqOnly = 1;.
21d30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
21d40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
21d50 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
21d60 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
21d70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
21d80 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
21d90 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
21da0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
21db0 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  GT );.      asse
21dc0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70  rt( pOp[1].p1==p
21dd0 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20  Op[0].p1 );.    
21de0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
21df0 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29  .p2==pOp[0].p2 )
21e00 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
21e10 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30  pOp[1].p3==pOp[0
21e20 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p3 );.      as
21e30 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
21e40 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
21e50 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69  ;.    }..    nFi
21e60 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
21e70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
21e80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
21e90 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
21ea0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
21eb0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
21ec0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
21ed0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
21ee0 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
21ef0 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
21f00 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
21f10 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
21f20 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
21f30 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
21f40 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
21f50 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
21f60 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
21f70 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
21f80 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
21f90 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
21fa0 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
21fb0 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
21fc0 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
21fd0 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
21fe0 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
21ff0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
22000 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
22010 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
22020 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
22030 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
22040 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
22050 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
22060 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
22070 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
22080 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
22090 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
220a0 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
220b0 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
220c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
220d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
220e0 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
220f0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
22100 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
22110 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
22120 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
22130 6e 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65  ndif.    r.eqSee
22140 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  n = 0;.    rc = 
22150 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
22160 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
22170 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  c.pCursor, &r, 0
22180 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
22190 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
221a0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
221b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
221c0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
221d0 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71  ( eqOnly && r.eq
221e0 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Seen==0 ){.     
221f0 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20   assert( res!=0 
22200 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65  );.      goto se
22210 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20  ek_not_found;.  
22220 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65    }.  }.  pC->de
22230 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22240 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22250 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22260 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
22270 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
22280 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
22290 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e  #endif.  if( oc>
222a0 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61  =OP_SeekGE ){  a
222b0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
222c0 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGE || oc==OP_S
222d0 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28  eekGT );.    if(
222e0 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
222f0 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
22300 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  GT) ){.      res
22310 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
22320 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
22330 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
22340 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
22350 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
22360 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
22370 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
22380 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
22390 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
223a0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
223b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
223c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
223d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
223e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
223f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
22400 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
22410 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
22420 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
22430 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
22440 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
22450 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
22460 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
22470 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
22480 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
22490 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
224a0 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72  ious(pC->uc.pCur
224b0 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  sor, 0);.      i
224c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
224d0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
224e0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
224f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
22500 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
22510 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
22520 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
22530 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
22540 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22550 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
22560 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
22570 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
22580 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
22590 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
225a0 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
225b0 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
225c0 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
225d0 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
225e0 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
225f0 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75  e3BtreeEof(pC->u
22600 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
22610 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66  }.  }.seek_not_f
22620 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20  ound:.  assert( 
22630 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56  pOp->p2>0 );.  V
22640 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
22650 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
22660 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  res ){.    goto 
22670 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
22680 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29  lse if( eqOnly )
22690 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
226a0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
226b0 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
226c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
226d0 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f   );.    pOp++; /
226e0 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64  * Skip the OP_Id
226f0 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20  xLt or OP_IdxGT 
22700 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a  that follows */.
22710 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22720 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48  /* Opcode: SeekH
22730 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
22740 2a 20 53 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b  * Synopsis: seek
22750 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74  Hit=P2.**.** Set
22760 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61   the seekHit fla
22770 67 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 74  g on cursor P1 t
22780 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
22790 32 2e 0a 2a 2a 20 54 68 65 20 73 65 65 6b 48 69  2..** The seekHi
227a0 74 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 62  t flag is used b
227b0 79 20 74 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f  y the IfNoHope o
227c0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  pcode..**.** P1 
227d0 6d 75 73 74 20 62 65 20 61 20 76 61 6c 69 64 20  must be a valid 
227e0 62 2d 74 72 65 65 20 63 75 72 73 6f 72 2e 20 20  b-tree cursor.  
227f0 50 32 20 6d 75 73 74 20 62 65 20 61 20 62 6f 6f  P2 must be a boo
22800 6c 65 61 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65  lean value,.** e
22810 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f  ither 0 or 1..*/
22820 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 48 69 74  .case OP_SeekHit
22830 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
22840 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
22850 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22860 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22870 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22880 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22890 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
228a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
228b0 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  p2==0 || pOp->p2
228c0 3d 3d 31 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65  ==1 );.  pC->see
228d0 6b 48 69 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26  kHit = pOp->p2 &
228e0 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
228f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
22900 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
22910 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
22920 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
22930 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
22940 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
22950 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
22960 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
22970 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
22980 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
22990 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
229a0 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
229b0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
229c0 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
229d0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
229e0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
229f0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
22a00 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
22a10 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61  3 and P4.** is a
22a20 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
22a30 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
22a40 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
22a50 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69  o P2 and.** P1 i
22a60 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
22a70 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
22a80 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
22a90 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
22aa0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
22ab0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
22ac0 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61  t can be.** adva
22ad0 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77  nced in the forw
22ae0 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  ard direction.  
22af0 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63  The Next instruc
22b00 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a  tion will work,.
22b10 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50  ** but not the P
22b20 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  rev instruction.
22b30 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22b40 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
22b50 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73  flict, NotExists
22b60 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f  . SeekGe.*/./* O
22b70 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
22b80 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
22b90 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
22ba0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
22bb0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
22bc0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
22bd0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
22be0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
22bf0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
22c00 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
22c10 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
22c20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
22c30 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
22c40 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
22c50 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
22c60 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
22c70 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
22c80 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
22c90 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
22ca0 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
22cb0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
22cc0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
22cd0 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
22ce0 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
22cf0 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
22d00 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
22d10 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
22d20 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
22d30 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
22d40 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
22d50 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
22d60 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
22d70 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
22d80 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
22d90 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
22da0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22db0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22dc0 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
22dd0 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
22de0 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
22df0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22e00 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
22e10 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
22e20 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
22e30 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
22e40 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22e50 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
22e60 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49  s, NoConflict, I
22e70 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70  fNoHope.*/./* Op
22e80 63 6f 64 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50  code: IfNoHope P
22e90 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
22ea0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
22eb0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  P3@P4].**.** Reg
22ec0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
22ed0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
22ee0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
22ef0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
22f00 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72  ecord..**.** Cur
22f10 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
22f20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
22f30 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61   the seekHit fla
22f40 67 20 69 73 20 73 65 74 20 6f 6e 20 50 31 2c 20  g is set on P1, 
22f50 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63  then.** this opc
22f60 6f 64 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  ode is a no-op. 
22f70 20 42 75 74 20 69 66 20 74 68 65 20 73 65 65 6b   But if the seek
22f80 48 69 74 20 66 6c 61 67 20 6f 66 20 50 31 20 69  Hit flag of P1 i
22f90 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a  s clear, then.**
22fa0 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   check to see if
22fb0 20 74 68 65 72 65 20 69 73 20 61 6e 79 20 65 6e   there is any en
22fc0 74 72 79 20 69 6e 20 50 31 20 74 68 61 74 20 6d  try in P1 that m
22fd0 61 74 63 68 65 73 20 74 68 65 0a 2a 2a 20 70 72  atches the.** pr
22fe0 65 66 69 78 20 69 64 65 6e 74 69 66 69 65 64 20  efix identified 
22ff0 62 79 20 50 33 20 61 6e 64 20 50 34 2e 20 20 49  by P3 and P4.  I
23000 66 20 6e 6f 20 65 6e 74 72 79 20 6d 61 74 63 68  f no entry match
23010 65 73 20 74 68 65 20 70 72 65 66 69 78 2c 0a 2a  es the prefix,.*
23020 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  * jump to P2.  O
23030 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
23040 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  rough..**.** Thi
23050 73 20 6f 70 63 6f 64 65 20 62 65 68 61 76 65 73  s opcode behaves
23060 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e   like OP_NotFoun
23070 64 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  d if the seekHit
23080 0a 2a 2a 20 66 6c 61 67 20 69 73 20 63 6c 65 61  .** flag is clea
23090 72 20 61 6e 64 20 69 74 20 62 65 68 61 76 65 73  r and it behaves
230a0 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66   like OP_Noop if
230b0 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61   the seekHit fla
230c0 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
230d0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
230e0 73 65 64 20 69 6e 20 49 4e 20 63 6c 61 75 73 65  sed in IN clause
230f0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
23100 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b  a multi-column k
23110 65 79 2e 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20  ey..** If an IN 
23120 63 6c 61 75 73 65 20 69 73 20 61 74 74 61 63 68  clause is attach
23130 65 64 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74  ed to an element
23140 20 6f 66 20 74 68 65 20 6b 65 79 20 6f 74 68 65   of the key othe
23150 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65  r than the.** le
23160 66 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c  ft-most element,
23170 20 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72   and if there ar
23180 65 20 6e 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20  e no matches on 
23190 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a  the most recent.
231a0 2a 2a 20 73 65 65 6b 20 6f 76 65 72 20 74 68 65  ** seek over the
231b0 20 77 68 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e   whole key, then
231c0 20 69 74 20 6d 69 67 68 74 20 62 65 20 74 68 61   it might be tha
231d0 74 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79  t one of the key
231e0 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74   element.** to t
231f0 68 65 20 6c 65 66 74 20 69 73 20 70 72 6f 68 69  he left is prohi
23200 62 69 74 69 6e 67 20 61 20 6d 61 74 63 68 2c 20  biting a match, 
23210 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20  and hence there 
23220 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a  is "no hope" of.
23230 2a 2a 20 61 6e 79 20 6d 61 74 63 68 20 72 65 67  ** any match reg
23240 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d  ardless of how m
23250 61 6e 79 20 49 4e 20 63 6c 61 75 73 65 20 65 6c  any IN clause el
23260 65 6d 65 6e 74 73 20 61 72 65 20 63 68 65 63 6b  ements are check
23270 65 64 2e 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61  ed..** In such a
23280 20 63 61 73 65 2c 20 77 65 20 61 62 61 6e 64 6f   case, we abando
23290 6e 20 74 68 65 20 49 4e 20 63 6c 61 75 73 65 20  n the IN clause 
232a0 73 65 61 72 63 68 20 65 61 72 6c 79 2c 20 75 73  search early, us
232b0 69 6e 67 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  ing this.** opco
232c0 64 65 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20  de.  The opcode 
232d0 6e 61 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20  name comes from 
232e0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68  the fact that th
232f0 65 0a 2a 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b  e.** jump is tak
23300 65 6e 20 69 66 20 74 68 65 72 65 20 69 73 20 22  en if there is "
23310 6e 6f 20 68 6f 70 65 22 20 6f 66 20 61 63 68 69  no hope" of achi
23320 65 76 69 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a  eving a match..*
23330 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
23340 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74  otFound, SeekHit
23350 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
23360 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20  oConflict P1 P2 
23370 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
23380 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
23390 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
233a0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
233b0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
233c0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
233d0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
233e0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
233f0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
23400 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
23410 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
23420 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
23430 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
23440 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
23450 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
23460 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
23470 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
23480 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
23490 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
234a0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
234b0 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
234c0 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
234d0 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
234e0 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
234f0 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
23500 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
23510 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
23520 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
23530 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
23540 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
23550 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
23560 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
23570 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
23580 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
23590 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
235a0 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
235b0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
235c0 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
235d0 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
235e0 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
235f0 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
23600 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
23610 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
23620 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
23630 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
23640 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
23650 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
23660 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
23670 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
23680 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
23690 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
236a0 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
236b0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
236c0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
236d0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
236e0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
236f0 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
23700 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
23710 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
23720 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
23730 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  und, Found, NotE
23740 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50  xists.*/.case OP
23750 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20  _IfNoHope: {    
23760 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
23770 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23780 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
23790 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
237a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
237b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
237c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
237d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
237e0 69 66 28 20 70 43 2d 3e 73 65 65 6b 48 69 74 20  if( pC->seekHit 
237f0 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
23800 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
23810 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d  OP_NotFound */.}
23820 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  .case OP_NoConfl
23830 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70  ict:     /* jump
23840 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
23850 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
23860 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
23870 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
23880 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23890 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
238a0 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
238b0 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20  int takeJump;.  
238c0 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75  int ii;.  VdbeCu
238d0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
238e0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
238f0 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20  ecord *pFree;.  
23900 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
23910 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
23920 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69  kedRecord r;..#i
23930 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
23940 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
23950 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
23960 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
23970 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
23980 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  f..  assert( pOp
23990 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
239a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
239b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
239c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
239d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
239e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
239f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23a00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
23a10 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
23a20 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
23a30 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d  .#endif.  pIn3 =
23a40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23a50 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
23a60 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
23a70 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
23a80 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
23a90 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
23aa0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
23ab0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
23ac0 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
23ad0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
23ae0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
23af0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
23b00 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
23b10 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
23b20 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23b30 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
23b40 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
23b50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
23b60 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
23b70 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  m[ii]) );.      
23b80 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b  assert( (r.aMem[
23b90 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
23ba0 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d  Zero)==0 || r.aM
23bb0 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20  em[ii].n==0 );. 
23bc0 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45       if( ii ) RE
23bd0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
23be0 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d  ->p3+ii, &r.aMem
23bf0 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  [ii]);.    }.#en
23c00 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20  dif.    pIdxKey 
23c10 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20  = &r;.    pFree 
23c20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
23c30 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
23c40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
23c50 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70   );.    rc = Exp
23c60 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
23c70 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
23c80 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
23c90 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a  SQLITE_NOMEM );.
23ca0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
23cb0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46  o no_mem;.    pF
23cc0 72 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20  ree = pIdxKey = 
23cd0 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
23ce0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
23cf0 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20  C->pKeyInfo);.  
23d00 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
23d10 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
23d20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
23d30 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
23d40 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
23d50 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78  n, pIn3->z, pIdx
23d60 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78  Key);.  }.  pIdx
23d70 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20  Key->default_rc 
23d80 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20  = 0;.  takeJump 
23d90 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  = 0;.  if( pOp->
23da0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e  opcode==OP_NoCon
23db0 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20  flict ){.    /* 
23dc0 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e  For the OP_NoCon
23dd0 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61  flict opcode, ta
23de0 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
23df0 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ny of the.    **
23e00 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72   input fields ar
23e10 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e  e NULL, since an
23e20 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c  y key with a NUL
23e30 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a  L will not.    *
23e40 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20  * conflict */.  
23e50 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
23e60 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20  IdxKey->nField; 
23e70 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  ii++){.      if(
23e80 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69   pIdxKey->aMem[i
23e90 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  i].flags & MEM_N
23ea0 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74  ull ){.        t
23eb0 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20  akeJump = 1;.   
23ec0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
23ed0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
23ee0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23ef0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
23f00 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
23f10 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
23f20 72 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65  res);.  if( pFre
23f30 65 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65  e ) sqlite3DbFre
23f40 65 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a  eNN(db, pFree);.
23f50 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23f60 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  _OK ){.    goto 
23f70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23f80 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  or;.  }.  pC->se
23f90 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
23fa0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
23fb0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
23fc0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
23fd0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
23fe0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23ff0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
24000 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
24010 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
24020 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
24030 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
24040 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
24050 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
24060 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
24070 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
24080 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
24090 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
240a0 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c  Taken(takeJump||
240b0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30  alreadyExists==0
240c0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b  ,2);.    if( tak
240d0 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64  eJump || !alread
240e0 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
240f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
24100 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24110 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20  code: SeekRowid 
24120 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
24130 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
24140 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
24150 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
24160 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
24170 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
24180 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
24190 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20  r.** keys).  If 
241a0 72 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73  register P3 does
241b0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
241c0 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31  integer or if P1
241d0 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e   does not.** con
241e0 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
241f0 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
24200 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
24210 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72  y to P2.  .** Or
24220 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
24230 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ise an SQLITE_CO
24240 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
24250 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a  P1 does contain.
24260 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  ** a record with
24270 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
24280 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
24290 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
242a0 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
242b0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
242c0 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
242d0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
242e0 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  he OP_NotExists 
242f0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
24300 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
24310 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f  on, but with OP_
24320 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65  NotExists.** the
24330 20 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73   P3 register mus
24340 74 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20  t be guaranteed 
24350 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  to contain an in
24360 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69  teger value.  Wi
24370 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  th this.** opcod
24380 65 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d  e, register P3 m
24390 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  ight not contain
243a0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
243b0 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75  ** The OP_NotFou
243c0 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  nd opcode perfor
243d0 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
243e0 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62  ation on index b
243f0 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61  trees.** (with a
24400 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76  rbitrary multi-v
24410 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a  alue keys)..**.*
24420 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
24430 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
24440 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
24450 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64   it cannot be ad
24460 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74  vanced.** in eit
24470 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
24480 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
24490 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
244a0 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a  v opcodes will.*
244b0 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f  * not work follo
244c0 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  wing this opcode
244d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
244e0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
244f0 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53  d, NoConflict, S
24500 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f  eekRowid.*/./* O
24510 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
24520 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
24530 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
24540 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
24550 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
24560 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
24570 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
24580 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
24590 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33  er.** keys).  P3
245a0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72   is an integer r
245b0 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65  owid.  If P1 doe
245c0 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  s not contain a 
245d0 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72  record with.** r
245e0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
245f0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
24600 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20   P2.  Or, if P2 
24610 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a  is 0, raise an.*
24620 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  * SQLITE_CORRUPT
24630 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f   error. If P1 do
24640 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  es contain a rec
24650 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
24660 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65  3 then .** leave
24670 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
24680 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
24690 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ord and fall thr
246a0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
246b0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
246c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65  .**.** The OP_Se
246d0 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70  ekRowid opcode p
246e0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
246f0 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61   operation but a
24700 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a  lso allows the.*
24710 2a 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f  * P3 register to
24720 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69   contain a non-i
24730 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e  nteger value, in
24740 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
24750 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79  jump is.** alway
24760 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f  s taken.  This o
24770 70 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74  pcode requires t
24780 68 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f  hat P3 always co
24790 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
247a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
247b0 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
247c0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
247d0 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
247e0 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
247f0 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
24800 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
24810 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24820 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
24830 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
24840 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
24850 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
24860 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
24870 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
24880 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
24890 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
248a0 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
248b0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
248c0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
248d0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
248e0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
248f0 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
24900 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77  .case OP_SeekRow
24910 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  id: {        /* 
24920 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
24930 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
24940 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
24950 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75  ;.  int res;.  u
24960 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33  64 iKey;..  pIn3
24970 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
24980 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
24990 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
249a0 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
249b0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53  Affinity(pIn3, S
249c0 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
249d0 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
249e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
249f0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
24a00 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
24a10 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  p2;.  }.  /* Fal
24a20 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
24a30 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63  P_NotExists */.c
24a40 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
24a50 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24a60 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e  mp, in3 */.  pIn
24a70 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
24a80 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
24a90 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
24aa0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
24ab0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24ac0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24ad0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24ae0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24af0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24b00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24b10 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
24b20 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69  Op = OP_SeekRowi
24b30 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  d;.#endif.  asse
24b40 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24b50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24b60 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24b70 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
24b80 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
24b90 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
24ba0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
24bb0 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
24bc0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
24bd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
24be0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
24bf0 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
24c00 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
24c10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
24c20 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
24c30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
24c40 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
24c50 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
24c60 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24c70 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
24c80 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24c90 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
24ca0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
24cb0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
24cc0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
24cd0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
24ce0 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
24cf0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
24d00 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
24d10 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
24d20 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
24d30 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
24d40 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
24d50 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
24d60 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
24d70 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
24d80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24d90 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
24da0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
24db0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
24dc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
24dd0 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
24de0 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
24df0 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
24e00 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
24e10 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
24e20 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
24e30 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
24e40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
24e50 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
24e60 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
24e70 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
24e80 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
24e90 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
24ea0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
24eb0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
24ec0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
24ed0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24ee0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24ef0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24f00 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
24f10 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
24f20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
24f30 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
24f40 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
24f50 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  AB );.  pOut = o
24f60 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
24f70 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
24f80 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
24f90 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
24fa0 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
24fb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
24fc0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
24fd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
24fe0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
24ff0 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
25000 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
25010 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
25020 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
25030 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
25040 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
25050 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
25060 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
25070 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
25080 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
25090 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
250a0 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
250b0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
250c0 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
250d0 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
250e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
250f0 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
25100 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
25110 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
25120 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
25130 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
25140 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
25150 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
25160 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
25170 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
25180 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
25190 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
251a0 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
251b0 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
251c0 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
251d0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
251e0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
251f0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
25200 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
25210 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
25220 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
25230 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
25240 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
25250 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
25260 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
25270 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
25280 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
25290 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
252a0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76   out2 */.  i64 v
252b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
252c0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
252d0 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
252e0 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
252f0 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
25300 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
25310 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
25320 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
25330 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
25340 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
25350 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
25360 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
25370 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
25380 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
25390 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
253a0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
253b0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
253c0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
253d0 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
253e0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
253f0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
25400 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
25410 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
25420 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
25430 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20  s = 0;.  pOut = 
25440 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
25450 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
25460 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25470 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25480 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25490 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
254a0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
254b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
254c0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
254d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
254e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
254f0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
25500 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25510 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54   );.  {.    /* T
25520 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
25530 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
25540 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
25550 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
25560 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
25570 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
25580 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
25590 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
255a0 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
255b0 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
255c0 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
255d0 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
255e0 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
255f0 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
25600 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
25610 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
25620 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
25630 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
25640 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
25650 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
25660 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
25670 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
25680 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
25690 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
256a0 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
256b0 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
256c0 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
256d0 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
256e0 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
256f0 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
25700 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
25710 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
25720 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
25730 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
25740 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
25750 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
25760 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
25770 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
25780 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
25790 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
257a0 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66  Table );..#ifdef
257b0 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
257c0 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
257d0 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
257e0 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
257f0 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
25800 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
25810 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
25820 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
25830 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
25840 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
25850 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
25860 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
25870 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
25880 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
25890 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
258a0 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
258b0 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
258c0 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
258d0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
258e0 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
258f0 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
25900 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
25910 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
25920 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
25930 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
25940 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25950 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
25960 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
25970 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
25980 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25990 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
259a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
259b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
259c0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
259d0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
259e0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
259f0 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
25a00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
25a10 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
25a20 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e  rIsValid(pC->uc.
25a30 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
25a40 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
25a50 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25a60 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25a70 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
25a80 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
25a90 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
25aa0 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
25ab0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
25ac0 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
25ad0 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
25ae0 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
25af0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
25b00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25b10 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
25b20 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
25b30 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
25b40 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
25b50 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
25b60 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
25b70 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
25b80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
25b90 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
25ba0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
25bb0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
25bc0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
25bd0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
25be0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
25bf0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
25c00 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
25c10 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
25c20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
25c30 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
25c40 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
25c50 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
25c60 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
25c70 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
25c80 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
25c90 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
25ca0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
25cb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25cc0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
25cd0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
25ce0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
25cf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
25d00 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
25d10 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
25d20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
25d30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25d40 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
25d50 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
25d60 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
25d70 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
25d80 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
25d90 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Mem);.      asse
25da0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
25db0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
25dc0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
25dd0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
25de0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  /.      if( pMem
25df0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
25e00 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
25e10 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
25e20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
25e30 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
25e40 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20  17817-00630 */. 
25e50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25e60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25e70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
25e80 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
25e90 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70  ){.        v = p
25ea0 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
25eb0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d      }.      pMem
25ec0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d  ->u.i = v;.    }
25ed0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
25ee0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
25ef0 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
25f00 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
25f10 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
25f20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
25f30 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
25f40 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
25f50 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
25f60 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
25f70 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
25f80 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
25f90 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
25fa0 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
25fb0 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
25fc0 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
25fd0 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
25fe0 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
25ff0 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
26000 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
26010 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26020 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
26030 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
26040 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
26050 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
26080 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
26090 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  e. */.      cnt 
260a0 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
260b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
260c0 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
260d0 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
260e0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
260f0 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20  D>>1); v++;  /* 
26100 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73  Ensure that v is
26110 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
26120 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69  ro */.      }whi
26130 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69  le(  ((rc = sqli
26140 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
26150 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
26160 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
26170 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
261b0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
261c0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
261d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
261e0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20  (++cnt<100));.  
261f0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
26200 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26210 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20  rror;.      if( 
26220 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
26230 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
26240 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
26250 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
26260 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
26270 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26280 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
26290 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
262a0 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
262b0 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
262c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
262d0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
262e0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
262f0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
26300 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
26310 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26320 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
26330 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
26340 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
26350 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
26360 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
26370 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
26380 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
26390 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
263a0 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
263b0 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
263c0 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
263d0 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
263e0 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
263f0 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
26400 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
26410 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
26420 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26430 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
26440 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
26450 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26460 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
26470 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
26480 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
26490 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
264a0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
264b0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
264c0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
264d0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
264e0 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
264f0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
26500 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
26510 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
26520 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
26530 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
26540 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
26550 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
26560 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
26570 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
26580 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
26590 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
265a0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
265b0 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
265c0 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
265d0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
265e0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
265f0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
26600 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
26610 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
26620 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
26630 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26640 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
26650 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
26660 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
26670 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
26680 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
26690 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
266a0 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
266b0 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a  ey equal to P3..
266c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
266d0 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
266e0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
266f0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
26700 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
26710 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
26720 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
26730 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
26740 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
26750 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
26760 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
26770 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
26780 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
26790 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
267a0 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
267b0 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
267c0 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54  may point to a T
267d0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20  able structure, 
267e0 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  or may be NULL. 
267f0 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74  If it is .** not
26800 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
26810 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c  update-hook (sql
26820 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
26830 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
26840 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   .** following a
26850 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
26860 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
26870 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
26880 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
26890 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
268a0 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
268b0 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
268c0 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
268d0 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
268e0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
268f0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
26900 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
26910 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
26920 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
26930 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
26940 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
26950 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
26960 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
26970 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
26980 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
26990 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
269a0 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
269b0 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
269c0 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
269d0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
269e0 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
269f0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
26a00 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
26a10 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26a20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
26a30 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
26a40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
26a50 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
26a60 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
26a70 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
26a80 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
26a90 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
26aa0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
26ab0 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
26ac0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
26ad0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
26ae0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
26af0 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
26b00 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
26b10 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
26b20 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
26b30 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
26b40 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
26b50 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
26b60 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
26b70 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
26b80 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26b90 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
26ba0 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
26bb0 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
26bc0 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
26bd0 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
26be0 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
26bf0 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
26c00 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
26c10 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
26c20 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
26c30 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
26c40 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
26c50 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65   hook */.  Table
26c60 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
26c70 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
26c80 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65  - used by update
26c90 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20   and pre-update 
26ca0 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65  hooks */.  Btree
26cb0 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20  Payload x;   /* 
26cc0 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e  Payload to be in
26cd0 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61  serted */..  pDa
26ce0 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
26cf0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
26d00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26d10 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
26d30 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
26d40 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26d50 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26d60 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26d70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26d80 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26d90 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26da0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
26db0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26dc0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
26dd0 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43  AG_ISNOOP) || pC
26de0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
26df0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
26e00 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20  pe==P4_TABLE || 
26e10 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f  pOp->p4type>=P4_
26e20 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49  STATIC );.  REGI
26e30 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
26e40 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71  p2, pData);.  sq
26e50 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
26e60 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
26e70 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
26e80 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
26e90 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
26ea0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26eb0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
26ec0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
26ed0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
26ee0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
26ef0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
26f00 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
26f10 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  Key);.    x.nKey
26f20 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
26f30 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
26f40 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
26f50 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
26f60 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70      x.nKey = pOp
26f70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
26f80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26f90 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
26fa0 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
26fb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
26fc0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
26fd0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
26fe0 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
26ff0 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
27000 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73  p4.pTab;.    ass
27010 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
27020 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
27030 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
27040 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
27050 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a   pTab = 0;.    z
27060 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
27070 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
27080 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
27090 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
270a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
270b0 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
270c0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
270d0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
270e0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
270f0 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66  ( pTab ){.    if
27100 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
27110 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f  Callback && !(pO
27120 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
27130 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20  SUPDATE) ){.    
27140 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
27150 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
27160 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
27170 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
27180 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  ey,pOp->p2);.   
27190 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78   }.    if( db->x
271a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d  UpdateCallback==
271b0 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d  0 || pTab->aCol=
271c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50  =0 ){.      /* P
271d0 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61  revent post-upda
271e0 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e  te hook from run
271f0 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68  ning in cases wh
27200 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74  en it should not
27210 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d   */.      pTab =
27220 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
27230 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
27240 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
27250 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  eak;.#endif..  i
27260 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
27270 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
27280 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
27290 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
272a0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
272b0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78  b->lastRowid = x
272c0 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28  .nKey;.  assert(
272d0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
272e0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
272f0 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20  r) );.  x.pData 
27300 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e  = pData->z;.  x.
27310 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
27320 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  ;.  seekResult =
27330 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
27340 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
27350 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
27360 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
27370 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
27380 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78  EM_Zero ){.    x
27390 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e  .nZero = pData->
273a0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
273b0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
273c0 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20  0;.  }.  x.pKey 
273d0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
273e0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
273f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
27400 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70  x,.      (pOp->p
27410 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
27420 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
27430 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65  SITION)), seekRe
27440 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
27450 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
27460 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
27470 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27480 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
27490 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
274a0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
274b0 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
274c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
274d0 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62  rror;.  if( pTab
274e0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
274f0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
27500 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  ack!=0 );.    as
27510 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c  sert( pTab->aCol
27520 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  !=0 );.    db->x
27530 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
27540 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20  b->pUpdateArg,. 
27550 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
27560 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
27570 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
27580 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
27590 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20  NSERT,.         
275a0 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61    zDb, pTab->zNa
275b0 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
275c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
275d0 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
275e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
275f0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
27600 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
27610 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
27620 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27630 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
27640 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
27650 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
27660 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
27670 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
27680 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
27690 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
276a0 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
276b0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
276c0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
276d0 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
276e0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
276f0 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
27700 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
27710 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
27720 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
27730 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
27740 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
27750 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
27760 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
27770 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
27780 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
27790 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
277a0 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
277b0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
277c0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
277d0 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
277e0 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
277f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
27800 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
27810 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
27820 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
27830 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
27840 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
27850 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
27860 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
27870 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
27880 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
27890 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
278a0 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
278b0 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
278c0 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
278d0 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
278e0 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
278f0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
27900 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
27910 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
27920 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
27930 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
27940 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
27950 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
27960 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
27970 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
27980 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
27990 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
279a0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
279b0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
279c0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
279d0 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
279e0 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
279f0 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
27a00 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
27a10 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
27a20 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
27a30 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65   to a Table obje
27a40 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ct. In this case
27a50 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
27a60 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
27a70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
27a80 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
27a90 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
27aa0 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
27ab0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
27ac0 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
27ad0 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
27ae0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
27af0 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
27b00 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
27b10 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
27b20 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
27b30 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
27b40 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
27b50 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
27b60 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
27b70 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
27b80 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
27b90 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
27ba0 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
27bb0 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
27bc0 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
27bd0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
27be0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
27bf0 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
27c00 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
27c10 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
27c20 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
27c30 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
27c40 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
27c50 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
27c60 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
27c70 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
27c80 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
27c90 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
27ca0 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
27cb0 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
27cc0 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
27cd0 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
27ce0 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
27cf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27d00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27d10 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27d20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27d30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27d40 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27d50 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
27d60 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27d70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27d80 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
27d90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
27da0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
27db0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
27dc0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
27dd0 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65  r(p, pC);..#ifde
27de0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27df0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
27e00 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61  ==P4_TABLE && Ha
27e10 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70  sRowid(pOp->p4.p
27e20 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d  Tab) && pOp->p5=
27e30 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  =0 ){.    /* If 
27e40 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  p5 is zero, the 
27e50 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
27e60 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
27e70 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
27e80 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c  to.    ** OP_Del
27e90 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c  ete will have al
27ea0 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
27eb0 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
27ec0 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
27ed0 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77  f.    ** the row
27ee0 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64   that is being d
27ef0 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36  eleted */.    i6
27f00 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
27f10 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27f20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27f30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27f40 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69  >movetoTarget==i
27f50 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Key );.  }.#endi
27f60 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  f..  /* If the u
27f70 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72  pdate-hook or pr
27f80 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e-update-hook wi
27f90 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
27fa0 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74  et zDb to.  ** t
27fb0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
27fc0 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20  b to pass as to 
27fd0 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63  it. Also set loc
27fe0 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70  al pTab to a cop
27ff0 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61  y.  ** of p4.pTa
28000 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70  b. Finally, if p
28010 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63  5 is true, indic
28020 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20  ating that this 
28030 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20  cursor was.  ** 
28040 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20  last moved with 
28050 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72  OP_Next or OP_Pr
28060 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20  ev, not Seek or 
28070 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20  NotFound, set . 
28080 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d   ** VdbeCursor.m
28090 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74  ovetoTarget to t
280a0 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64  he current rowid
280b0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
280c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
280d0 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
280e0 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
280f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
28100 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
28110 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d  ( pOp->p4.pTab!=
28120 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
28130 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
28140 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
28150 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
28160 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  b;.    if( (pOp-
28170 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56  >p5 & OPFLAG_SAV
28180 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26  EPOSITION)!=0 &&
28190 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
281a0 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
281b0 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
281c0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
281d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
281e0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
281f0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f      zDb = 0;   /
28200 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
28210 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
28220 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
28230 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20    pTab = 0;  /* 
28240 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
28250 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
28260 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
28270 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
28280 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
28290 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
282a0 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d   the pre-update-
282b0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
282c0 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  . */.  if( db->x
282d0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
282e0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61  k && pOp->p4.pTa
282f0 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  b ){.    assert(
28300 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46   !(opflags & OPF
28310 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20  LAG_ISUPDATE) . 
28320 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f          || HasRo
28330 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20  wid(pTab)==0 .  
28340 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b         || (aMem[
28350 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26  pOp->p3].flags &
28360 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29   MEM_Int) .    )
28370 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
28380 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
28390 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
283a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
283b0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
283c0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
283d0 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
283e0 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70      zDb, pTab, p
283f0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c  C->movetoTarget,
28400 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33  .        pOp->p3
28410 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66  .    );.  }.  if
28420 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
28430 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
28440 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a  k;.#endif. .  /*
28450 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
28460 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
28470 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
28480 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
28490 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
284a0 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
284b0 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
284c0 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
284d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
284e0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
284f0 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
28500 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
28510 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
28520 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
28530 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
28540 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
28550 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
28560 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
28570 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
28580 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
28590 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
285a0 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
285b0 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
285c0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
285d0 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
285e0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
285f0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
28600 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
28610 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
28620 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
28630 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
28640 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
28650 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
28660 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
28670 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
28680 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28690 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
286a0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
286b0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
286c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
286d0 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  rror;..  /* Invo
286e0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
286f0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
28700 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  */.  if( opflags
28710 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
28720 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  E ){.    p->nCha
28730 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64  nge++;.    if( d
28740 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
28750 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ck && HasRowid(p
28760 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62  Tab) ){.      db
28770 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
28780 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
28790 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
287a0 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
287b0 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  e,.          pC-
287c0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
287d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
287e0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
287f0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
28800 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
28810 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
28820 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
28830 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
28840 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
28850 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
28860 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
28870 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
28880 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
28890 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
288a0 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
288b0 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
288c0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
288d0 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
288e0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
288f0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
28900 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
28910 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
28920 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
28930 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
28940 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
28950 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
28960 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28970 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
28980 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
28990 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b  * Synopsis: if k
289a0 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
289b0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
289c0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
289d0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
289e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
289f0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
28a00 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
28a10 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
28a20 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
28a30 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
28a40 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
28a50 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
28a60 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
28a70 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
28a80 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
28a90 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
28aa0 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
28ab0 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
28ac0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
28ad0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
28ae0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
28af0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
28b00 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
28b10 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
28b20 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
28b30 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
28b40 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
28b50 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
28b60 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
28b70 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
28b80 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
28b90 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
28ba0 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
28bb0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
28bc0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
28bd0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
28be0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
28bf0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
28c00 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
28c10 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
28c20 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
28c30 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
28c40 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
28c50 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28c60 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28c70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
28c80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
28c90 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
28ca0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28cb0 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
28cc0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
28cd0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
28ce0 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
28cf0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
28d00 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
28d10 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
28d20 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
28d30 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28d40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28d50 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
28d60 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
28d70 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
28d80 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
28d90 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
28da0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
28db0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
28dc0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
28dd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
28de0 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
28df0 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
28e00 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65  * Then clear the
28e10 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63   column header c
28e20 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50  ache on cursor P
28e30 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  3..**.** This op
28e40 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  code is normally
28e50 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72   use to move a r
28e60 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65  ecord out of the
28e70 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f   sorter and into
28e80 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74  .** a register t
28e90 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63  hat is the sourc
28ea0 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74  e for a pseudo-t
28eb0 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61  able cursor crea
28ec0 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65  ted using.** Ope
28ed0 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70  nPseudo.  That p
28ee0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
28ef0 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68  or is the one th
28f00 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  at is identified
28f10 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   by.** parameter
28f20 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74   P3.  Clearing t
28f30 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63  he P3 column cac
28f40 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  he as part of th
28f50 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a  is opcode saves.
28f60 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e  ** us from havin
28f70 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70  g to issue a sep
28f80 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e  arate NullRow in
28f90 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65  struction to cle
28fa0 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a  ar that cache..*
28fb0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
28fc0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
28fd0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
28fe0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
28ff0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
29000 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
29010 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
29020 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
29030 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
29040 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
29050 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
29060 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
29070 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
29080 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72  Blob) );.  asser
29090 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
290a0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
290b0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20  sor );.  if( rc 
290c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
290d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e  _to_error;.  p->
290e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
290f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
29100 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
29110 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29120 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
29130 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
29140 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
29150 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
29160 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
29170 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e  complete row con
29180 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77  tent for the row
29190 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75   at .** which cu
291a0 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65  rsor P1 is curre
291b0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
291c0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
291d0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
291e0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
291f0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
29200 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
29210 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
29220 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
29230 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
29240 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
29250 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20  cursor P1 is an 
29260 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20  index, then the 
29270 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b  content is the k
29280 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a  ey of the row..*
29290 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69  * If cursor P2 i
292a0 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  s a table, then 
292b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72  the content extr
292c0 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74  acted is the dat
292d0 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
292e0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
292f0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
29300 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
29310 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
29320 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
29330 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
29340 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  e..**.** If P3!=
29350 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
29360 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  de is allowed to
29370 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72   make an ephemer
29380 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e  al pointer.** in
29390 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
293a0 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  page.  That mean
293b0 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65  s that the conte
293c0 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  nt of the output
293d0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c  .** register wil
293e0 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  l be invalidated
293f0 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
29400 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69  cursor moves - i
29410 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65  ncluding.** move
29420 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65  s caused by othe
29430 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22  r cursors that "
29440 73 61 76 65 22 20 74 68 65 20 63 75 72 72 65 6e  save" the curren
29450 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73  t cursors.** pos
29460 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74  ition in order t
29470 68 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69  hat they can wri
29480 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74  te to the same t
29490 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a  able.  If P3==0.
294a0 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f  ** then a copy o
294b0 66 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61  f the data is ma
294c0 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20  de into memory. 
294d0 20 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72   P3!=0 is faster
294e0 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69  , but.** P3==0 i
294f0 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49  s safer..**.** I
29500 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65  f P3!=0 then the
29510 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
29520 50 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P2 register is u
29530 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73  nsuitable for us
29540 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c  e.** in OP_Resul
29550 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73  t and any OP_Res
29560 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ult will invalid
29570 61 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73  ate the P2 regis
29580 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20  ter content..** 
29590 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  The P2 register 
295a0 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c  content is inval
295b0 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65  idated by opcode
295c0 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69  s like OP_Functi
295d0 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20  on or.** by any 
295e0 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63  use of another c
295f0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
29600 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  o the same table
29610 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29620 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
29630 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
29640 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
29650 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  32 n;..  pOut = 
29660 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
29670 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72  , pOp);..  asser
29680 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29690 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
296a0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
296b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
296c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
296d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
296e0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
296f0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
29700 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
29710 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
29720 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
29730 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29740 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
29750 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
29760 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a  C->uc.pCursor;..
29770 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44    /* The OP_RowD
29780 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
29790 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
297a0 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
297b0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f  P_SeekRowid or O
297c0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
297d0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
297e0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
297f0 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68  s.  ** that migh
29800 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  t invalidate the
29810 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66   cursor..  ** If
29820 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
29830 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
29840 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
29850 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
29860 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
29870 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
29880 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
29890 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
298a0 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
298b0 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
298c0 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
298d0 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
298e0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
298f0 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
29900 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
29910 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
29920 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
29930 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
29940 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
29950 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
29960 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
29970 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
29980 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
29990 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
299a0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
299b0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
299c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
299d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
299e0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
299f0 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42  ..  n = sqlite3B
29a00 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28  treePayloadSize(
29a10 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e  pCrsr);.  if( n>
29a20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
29a30 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
29a40 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
29a50 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
29a60 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29  testcase( n==0 )
29a70 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29a80 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
29a90 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
29aa0 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ut);.  if( rc ) 
29ab0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
29ac0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21  o_error;.  if( !
29ad0 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65  pOp->p3 ) Deephe
29ae0 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
29af0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
29b00 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
29b10 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
29b20 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
29b30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29b40 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
29b50 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
29b60 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
29b70 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
29b80 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
29b90 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
29ba0 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
29bb0 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
29bc0 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
29bd0 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
29be0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
29bf0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
29c00 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
29c10 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
29c20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
29c30 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
29c40 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
29c50 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
29c60 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
29c70 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
29c80 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
29c90 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
29ca0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
29cb0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
29cc0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
29cd0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
29ce0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
29cf0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
29d00 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
29d10 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
29d20 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
29d30 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
29d40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29d50 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
29d60 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
29d70 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29d80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29d90 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29da0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
29db0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
29dc0 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
29dd0 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
29de0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
29df0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
29e00 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
29e10 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
29e20 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29e30 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
29e40 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
29e50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29e60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
29e70 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65   }else if( pC->e
29e80 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
29e90 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73  _VTAB ){.    ass
29ea0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75  ert( pC->uc.pVCu
29eb0 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61  r!=0 );.    pVta
29ec0 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  b = pC->uc.pVCur
29ed0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
29ee0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
29ef0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
29f00 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
29f10 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
29f20 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
29f30 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29  C->uc.pVCur, &v)
29f40 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
29f50 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
29f60 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
29f70 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29f80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
29f90 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
29fa0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29fb0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
29fc0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29fd0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29fe0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
29ff0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2a000 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  sor!=0 );.    rc
2a010 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2a020 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2a030 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2a040 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2a050 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
2a060 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
2a070 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2a080 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
2a090 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2a0a0 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
2a0b0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
2a0c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2a0d0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
2a0e0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
2a0f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
2a100 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
2a110 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
2a120 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
2a130 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
2a140 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
2a150 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
2a160 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
2a170 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
2a180 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
2a190 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
2a1a0 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
2a1b0 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
2a1c0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
2a1d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a1e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2a1f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2a200 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2a210 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2a220 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
2a230 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
2a240 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2a250 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
2a260 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a270 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2a280 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2a290 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
2a2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2a2b0 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  arCursor(pC->uc.
2a2c0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69  pCursor);.  }.#i
2a2d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2a2e0 47 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b  G.  if( pC->seek
2a2f0 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b  Op==0 ) pC->seek
2a300 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b  Op = OP_NullRow;
2a310 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
2a320 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
2a330 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20  eekEnd P1 * * * 
2a340 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e  *.**.** Position
2a350 20 63 75 72 73 6f 72 20 50 31 20 61 74 20 74 68   cursor P1 at th
2a360 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
2a370 65 65 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  ee for the purpo
2a380 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69  se of.** appendi
2a390 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f  ng a new entry o
2a3a0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a  nto the btree..*
2a3b0 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d  *.** It is assum
2a3c0 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ed that the curs
2a3d0 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  or is used only 
2a3e0 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e  for appending an
2a3f0 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63  d so.** if the c
2a400 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20  ursor is valid, 
2a410 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
2a420 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62 65 20  must already be 
2a430 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74  pointing.** at t
2a440 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
2a450 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68  ree and so no ch
2a460 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74  anges are made t
2a470 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e  o.** the cursor.
2a480 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
2a490 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
2a4a0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2a4b0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2a4c0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65  or Column or Pre
2a4d0 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  v instruction fo
2a4e0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2a4f0 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
2a500 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
2a510 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2a520 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
2a530 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2a540 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
2a550 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
2a560 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2a570 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
2a580 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
2a590 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
2a5a0 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
2a5b0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
2a5c0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
2a5d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a5e0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
2a5f0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
2a600 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
2a610 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
2a620 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
2a630 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
2a640 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2a650 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
2a660 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
2a670 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
2a680 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ext..*/.case OP_
2a690 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50  SeekEnd:.case OP
2a6a0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
2a6b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2a6c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a6d0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a6e0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
2a6f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2a700 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2a710 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2a720 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a730 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2a740 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2a750 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2a760 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2a770 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2a780 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  .pCursor;.  res 
2a790 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2a7a0 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65  Crsr!=0 );.#ifde
2a7b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a7c0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
2a7d0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
2a7e0 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  f.  if( pOp->opc
2a7f0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20  ode==OP_SeekEnd 
2a800 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2a810 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20  Op->p2==0 );.   
2a820 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2a830 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71  = -1;.    if( sq
2a840 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
2a850 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
2a860 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   ){.      break;
2a870 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
2a880 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2a890 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
2a8a0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2a8b0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
2a8c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2a8d0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
2a8e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2a8f0 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ALE;.  if( rc ) 
2a900 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a910 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2a920 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
2a930 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2a940 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
2a950 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
2a960 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2a970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a980 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50  ode: IfSmaller P
2a990 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2a9a0 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e  * Estimate the n
2a9b0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2a9c0 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20   the table P1.  
2a9d0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
2a9e0 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69  at.** estimate i
2a9f0 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72  s less than appr
2aa00 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e  oximately 2**(0.
2aa10 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  1*P3)..*/.case O
2aa20 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20  P_IfSmaller: {  
2aa30 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2aa40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2aa50 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2aa60 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2aa70 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73  .  i64 sz;..  as
2aa80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2aa90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2aaa0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2aab0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2aac0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2aad0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
2aae0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2aaf0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2ab00 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2ab10 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
2ab20 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28  sr, &res);.  if(
2ab30 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2ab40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2ab50 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
2ab60 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42     sz = sqlite3B
2ab70 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28  treeRowCountEst(
2ab80 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20  pCrsr);.    if( 
2ab90 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26  ALWAYS(sz>=0) &&
2aba0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28   sqlite3LogEst((
2abb0 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20  u64)sz)<pOp->p3 
2abc0 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20  ) res = 1;.  }. 
2abd0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2abe0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
2abf0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
2ac00 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2ac10 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
2ac20 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50   SorterSort P1 P
2ac30 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66  2 * * *.**.** Af
2ac40 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  ter all records 
2ac50 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74  have been insert
2ac60 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74  ed into the Sort
2ac70 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65  er object.** ide
2ac80 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c 20 69  ntified by P1, i
2ac90 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
2aca0 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f  e to actually do
2acb0 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a   the sorting..**
2acc0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
2acd0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
2ace0 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64  rds to be sorted
2acf0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2ad00 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ode is an alias 
2ad10 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20  for OP_Sort and 
2ad20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69  OP_Rewind that i
2ad30 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f  s used.** for So
2ad40 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  rter objects..*/
2ad50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2ad60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2ad70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
2ad80 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
2ad90 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
2ada0 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
2adb0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
2adc0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
2add0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
2ade0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
2adf0 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
2ae00 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
2ae10 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
2ae20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
2ae30 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
2ae40 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
2ae50 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
2ae60 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
2ae70 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
2ae80 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
2ae90 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
2aea0 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
2aeb0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
2aec0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
2aed0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
2aee0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
2aef0 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
2af00 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
2af10 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
2af20 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
2af30 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
2af40 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
2af50 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
2af60 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
2af70 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
2af80 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2af90 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
2afa0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2afb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2afc0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
2afd0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
2afe0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
2aff0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
2b000 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
2b010 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
2b020 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
2b030 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
2b040 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
2b050 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
2b060 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
2b070 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
2b080 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
2b090 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
2b0a0 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
2b0b0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
2b0c0 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
2b0d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2b0e0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2b0f0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
2b100 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
2b110 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
2b120 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
2b130 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2b140 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
2b150 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
2b160 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2b170 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
2b180 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2b190 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
2b1a0 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 65  e table is not e
2b1b0 6d 70 74 79 2c 20 74 68 65 6e 20 74 68 65 20 22  mpty, then the "
2b1c0 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66 6c  skip-next".** fl
2b1d0 61 67 20 69 73 20 73 65 74 20 6f 6e 20 74 68 65  ag is set on the
2b1e0 20 63 75 72 73 6f 72 20 73 6f 20 74 68 61 74 20   cursor so that 
2b1f0 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78 74  the next OP_Next
2b200 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a 2a   instruction .**
2b210 20 65 78 65 63 75 74 65 64 20 6f 6e 20 69 74 20   executed on it 
2b220 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a  is a no-op..**.*
2b230 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
2b240 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
2b250 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
2b260 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
2b270 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
2b280 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
2b290 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
2b2a0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2b2b0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
2b2c0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
2b2d0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
2b2e0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
2b2f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2b300 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2b310 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2b320 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2b330 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
2b340 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b350 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b360 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2b370 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2b380 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2b390 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2b3a0 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
2b3b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2b3c0 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
2b3d0 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
2b3e0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
2b3f0 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
2b400 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
2b410 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
2b420 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b430 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
2b440 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
2b450 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2b460 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b470 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b480 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
2b490 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  uc.pCursor;.    
2b4a0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
2b4b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b4c0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
2b4d0 72 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e 64 65  r, &res);.#ifnde
2b4e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
2b4f0 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20 69 66 28  NDOWFUNC.    if(
2b500 20 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69 74   pOp->p5 ) sqlit
2b510 65 33 42 74 72 65 65 53 6b 69 70 4e 65 78 74 28  e3BtreeSkipNext(
2b520 70 43 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a 20  pCrsr);.#endif. 
2b530 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
2b540 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
2b550 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2b560 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2b570 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2b580 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b590 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  rror;.  pC->null
2b5a0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
2b5b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2b5c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
2b5d0 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
2b5e0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
2b5f0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
2b600 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2b610 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b620 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
2b630 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2b640 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
2b650 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
2b660 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
2b670 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
2b680 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2b690 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2b6a0 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
2b6b0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
2b6c0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2b6d0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
2b6e0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
2b6f0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
2b700 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
2b710 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
2b720 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
2b730 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
2b740 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
2b750 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
2b760 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
2b770 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
2b780 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
2b790 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
2b7a0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
2b7b0 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
2b7c0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
2b7d0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2b7e0 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
2b7f0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
2b800 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
2b810 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
2b820 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
2b830 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
2b840 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
2b850 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
2b860 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
2b870 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
2b880 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
2b890 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
2b8a0 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
2b8b0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
2b8c0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
2b8d0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
2b8e0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
2b8f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
2b900 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
2b910 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
2b920 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
2b930 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
2b940 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
2b950 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
2b960 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
2b970 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
2b980 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
2b990 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
2b9a0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
2b9b0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
2b9c0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
2b9d0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
2b9e0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
2b9f0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
2ba00 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
2ba10 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
2ba20 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2ba30 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2ba40 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2ba50 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63  : Prev.*/./* Opc
2ba60 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
2ba70 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
2ba80 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
2ba90 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
2baa0 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
2bab0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
2bac0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2bad0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2bae0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
2baf0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
2bb00 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
2bb10 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2bb20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2bb30 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
2bb40 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
2bb50 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
2bb60 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
2bb70 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
2bb80 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
2bb90 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
2bba0 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
2bbb0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2bbc0 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
2bbd0 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2bbe0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2bbf0 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
2bc00 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2bc10 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
2bc20 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
2bc30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
2bc40 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
2bc50 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
2bc60 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
2bc70 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
2bc80 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
2bc90 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
2bca0 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
2bcb0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
2bcc0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
2bcd0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
2bce0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
2bcf0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
2bd00 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
2bd10 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
2bd20 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
2bd30 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
2bd40 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
2bd50 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
2bd60 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
2bd70 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
2bd80 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
2bd90 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
2bda0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
2bdb0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
2bdc0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
2bdd0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
2bde0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
2bdf0 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
2be00 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2be10 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2be20 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2be30 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2be40 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2be50 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2be60 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2be70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2be80 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20  orterNext P1 P2 
2be90 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
2bea0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
2beb0 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
2bec0 20 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20   except that P1 
2bed0 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72  must be a.** sor
2bee0 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77  ter object for w
2bef0 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74  hich the OP_Sort
2bf00 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61  erSort opcode ha
2bf10 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65  s been.** invoke
2bf20 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  d.  This opcode 
2bf30 61 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72  advances the cur
2bf40 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  sor to the next 
2bf50 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64  sorted.** record
2bf60 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32  , or jumps to P2
2bf70 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2bf80 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63   more sorted rec
2bf90 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ords..*/.case OP
2bfa0 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
2bfb0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2bfc0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
2bfd0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2bfe0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bff0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2c000 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2c010 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
2c020 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e  b, pC);.  goto n
2c030 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
2c040 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
2c050 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2c060 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
2c070 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2c080 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c090 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2c0a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
2c0b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
2c0c0 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
2c0d0 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
2c0e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2c0f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2c100 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2c110 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2c120 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2c130 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2c140 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2c150 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c160 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
2c170 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2c180 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2c190 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2c1a0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2c1b0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2c1c0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2c1d0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2c1e0 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e  s );..  /* The N
2c1f0 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
2c200 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
2c210 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65  ekGT, SeekGE, Re
2c220 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e  wind, and Found.
2c230 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2c240 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2c250 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2c260 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2c270 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2c280 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2c290 4e 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70  Next.       || p
2c2a0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2c2b0 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekGT || pC->seek
2c2c0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20  Op==OP_SeekGE.  
2c2d0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2c2e0 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c  Op==OP_Rewind ||
2c2f0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c300 46 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c  Found .       ||
2c310 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c320 4e 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73 65  NullRow);.  asse
2c330 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2c340 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20  =OP_Prev.       
2c350 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2c360 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
2c370 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2c380 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2c390 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
2c3a0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2c3b0 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f  eekOp==OP_NullRo
2c3c0 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d  w);..  rc = pOp-
2c3d0 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
2c3e0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
2c3f0 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  ->p3);.next_tail
2c400 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
2c410 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2c420 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
2c430 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2c440 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  OK,2);.  if( rc=
2c450 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c460 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2c470 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
2c480 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
2c490 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2c4a0 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
2c4b0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
2c4c0 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
2c4d0 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2c4e0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2c4f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
2c500 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
2c510 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c520 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51  error;.  rc = SQ
2c530 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e  LITE_OK;.  pC->n
2c540 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f  ullRow = 1;.  go
2c550 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2c560 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2c570 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
2c580 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c590 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c5a0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2c5b0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2c5c0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2c5d0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2c5e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2c5f0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2c600 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2c610 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2c620 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
2c630 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2c640 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49   is nil..**.** I
2c650 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P4 is not zero
2c660 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
2c670 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
2c680 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65  s in the unpacke
2c690 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28  d.** key of reg(
2c6a0 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61  P2).  In that ca
2c6b0 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e  se, P3 is the in
2c6c0 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
2c6d0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72   register.** for
2c6e0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2c6f0 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69  y.  The availabi
2c700 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61  lity of the unpa
2c710 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d  cked key can som
2c720 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20  etimes.** be an 
2c730 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a  optimization..**
2c740 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2c750 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
2c760 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73  bit set, that is
2c770 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2c780 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74  -tree layer.** t
2c790 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20  hat this insert 
2c7a0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
2c7b0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
2c7c0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
2c7d0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c7e0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
2c7f0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2c800 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
2c810 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
2c820 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
2c830 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2c840 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
2c850 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2c860 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
2c870 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
2c880 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2c890 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
2c8a0 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
2c8b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
2c8c0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
2c8d0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
2c8e0 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
2c8f0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
2c900 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
2c910 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2c920 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
2c930 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
2c940 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
2c950 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
2c960 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
2c970 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
2c980 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
2c990 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a  ey equivalent.**
2c9a0 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54   to P2. .**.** T
2c9b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c9c0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
2c9d0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
2c9e0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
2c9f0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
2ca00 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
2ca10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2ca20 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32  rterInsert P1 P2
2ca30 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2ca40 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2ca50 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2ca60 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2ca70 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2ca80 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2ca90 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2caa0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2cab0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2cac0 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65  * into the sorte
2cad0 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  r P1.  Data for 
2cae0 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2caf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2cb00 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
2cb10 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
2cb20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
2cb30 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2cb40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2cb50 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  C;.  BtreePayloa
2cb60 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d x;..  assert( 
2cb70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2cb80 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2cb90 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cba0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2cbb0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2cbc0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
2cbd0 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  C);.  assert( pC
2cbe0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2cbf0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
2cc00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2cc10 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
2cc20 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2cc30 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2cc40 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
2cc50 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
2cc60 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
2cc70 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
2cc80 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
2cc90 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2cca0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2ccb0 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  EE || pOp->opcod
2ccc0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2ccd0 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  rt );.  assert( 
2cce0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2ccf0 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
2cd00 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
2cd10 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2cd20 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cd30 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2cd40 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2cd50 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
2cd60 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
2cd70 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
2cd80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
2cd90 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
2cda0 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32     x.pKey = pIn2
2cdb0 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20  ->z;.    x.aMem 
2cdc0 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  = aMem + pOp->p3
2cdd0 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28  ;.    x.nMem = (
2cde0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2cdf0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2ce00 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
2ce10 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
2ce20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
2ce30 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
2ce40 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
2ce50 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20  ITION)), .      
2ce60 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
2ce70 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2ce80 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
2ce90 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
2cea0 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28    );.    assert(
2ceb0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2cec0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
2ced0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2cee0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2cef0 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20  .  if( rc) goto 
2cf00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cf10 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2cf20 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
2cf30 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
2cf40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2cf50 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
2cf60 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
2cf70 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
2cf80 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
2cf90 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
2cfa0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2cfb0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
2cfc0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
2cfd0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
2cfe0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
2cff0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
2d000 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
2d010 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2d020 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2d030 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2d040 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2d050 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2d060 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
2d070 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d080 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
2d090 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2d0a0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
2d0b0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
2d0c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d0d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2d0e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2d0f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2d100 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2d110 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2d120 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2d130 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69  _BTREE );.  sqli
2d140 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2d150 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
2d160 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2d170 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2d180 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2d190 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d1a0 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2d1b0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2d1c0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2d1d0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2d1e0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2d1f0 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2d200 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2d210 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2d220 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2d230 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2d240 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2d250 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d260 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2d270 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2d280 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2d290 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2d2a0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2d2b0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2d2c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2d2d0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2d2e0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2d2f0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2d300 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2d310 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2d320 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2d330 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2d340 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2d350 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2d360 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2d370 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2d380 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2d390 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2d3a0 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2d3b0 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2d3c0 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2d3d0 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2d3e0 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2d3f0 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2d400 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2d410 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2d420 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2d430 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d440 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2d450 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2d460 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2d470 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2d480 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2d490 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2d4a0 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2d4b0 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2d4c0 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2d4d0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2d4e0 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2d4f0 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2d500 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2d510 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2d520 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2d530 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2d540 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2d550 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2d560 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2d570 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2d580 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2d590 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d5a0 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2d5b0 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2d5c0 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2d5d0 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2d5e0 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2d5f0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d600 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2d610 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2d620 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2d630 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2d640 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2d650 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2d660 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2d670 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2d680 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2d690 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2d6a0 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2d6b0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2d6c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d6d0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2d6e0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2d6f0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2d700 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2d710 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2d720 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2d730 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2d740 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2d750 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2d760 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2d770 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2d780 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2d790 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2d7a0 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2d7b0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2d7c0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2d7d0 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2d7e0 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2d7f0 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2d800 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2d810 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2d820 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2d830 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2d840 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2d850 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2d860 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2d870 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2d880 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2d890 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2d8a0 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2d8b0 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2d8e0 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2d8f0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2d900 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d910 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2d920 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2d930 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d940 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2d950 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2d960 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d970 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2d980 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2d990 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2d9a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2d9b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d9c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2d9d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2d9e0 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2d9f0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2da00 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2da10 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2da20 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2da30 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2da40 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2da50 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2da60 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2da70 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2da80 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2da90 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2daa0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2dab0 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2dac0 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2dad0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2dae0 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2daf0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2db00 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2db10 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2db20 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2db30 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2db40 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2db50 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2db60 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2db70 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2db80 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2db90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2dba0 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2dbb0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2dbc0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2dbd0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2dbe0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2dbf0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2dc00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2dc10 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2dc20 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2dc30 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2dc40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2dc50 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2dc60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2dc70 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2dc80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2dc90 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2dca0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2dcb0 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2dcc0 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2dcd0 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2dce0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2dcf0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2dd00 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2dd10 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2dd20 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2dd30 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2dd40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2dd50 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2dd60 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2dd70 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2dd80 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2dd90 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2dda0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2ddb0 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2ddc0 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2ddd0 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2dde0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2ddf0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2de00 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2de10 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2de20 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2de30 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2de40 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2de50 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2de60 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2de70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2de80 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2de90 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2dea0 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2deb0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2dec0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2ded0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2dee0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2def0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2df00 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2df10 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2df20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2df30 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2df40 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2df50 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2df60 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2df70 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2df80 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2df90 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2dfa0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2dfb0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2dfc0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2dfd0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2dfe0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2dff0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2e000 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2e010 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2e020 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2e030 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2e040 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2e050 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2e060 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e070 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2e080 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2e090 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2e0a0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2e0b0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2e0c0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e0d0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e0e0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2e0f0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2e100 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e110 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e120 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e130 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e140 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e150 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e160 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e170 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e180 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2e190 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2e1a0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2e1b0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2e1c0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2e1d0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2e1e0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2e1f0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2e200 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2e210 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2e220 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2e230 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2e240 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2e250 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2e260 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e270 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e280 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e290 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e2a0 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2e2b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e2c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e2d0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e2e0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e2f0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e300 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e310 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e320 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e330 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e340 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e350 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e360 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e370 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e380 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e390 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e3a0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e3b0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e3c0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e3d0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e3e0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2e3f0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2e400 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2e410 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e420 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e430 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e440 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e450 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2e460 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e470 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e480 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e490 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e4a0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e4b0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e4c0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e4d0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e4e0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e4f0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e500 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e510 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e520 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e530 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e540 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e550 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e560 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e570 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e580 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e590 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2e5a0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2e5b0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2e5c0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2e5d0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2e5e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e5f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e600 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2e610 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e620 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2e630 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e640 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e650 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2e660 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2e670 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2e680 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2e690 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2e6a0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2e6b0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2e6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2e6d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2e6e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2e6f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e700 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e710 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2e720 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2e730 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e740 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2e750 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2e760 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2e770 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2e780 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2e790 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2e7a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2e7b0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2e7c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e7d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2e7e0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2e7f0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2e800 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2e810 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2e820 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2e830 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2e840 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2e850 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2e860 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2e870 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2e880 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2e890 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2e8a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e8b0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2e8c0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2e8d0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2e8e0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2e8f0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2e900 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2e910 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e920 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
2e930 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
2e940 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
2e950 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2e960 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2e970 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2e980 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2e990 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2e9a0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2e9b0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2e9c0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2e9d0 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2e9e0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2e9f0 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2ea00 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2ea10 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2ea20 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2ea30 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2ea40 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2ea50 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2ea60 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2ea70 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2ea80 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2ea90 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2eaa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2eab0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2eac0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2ead0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2eae0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2eaf0 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2eb00 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2eb10 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2eb20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2eb30 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2eb40 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2eb50 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2eb60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2eb70 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2eb80 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2eb90 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2eba0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2ebb0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2ebc0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2ebd0 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2ebe0 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2ebf0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2ec00 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2ec10 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2ec20 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2ec30 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2ec40 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2ec50 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2ec60 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2ec70 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2ec80 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2ec90 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2eca0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2ecb0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2ecc0 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2ecd0 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2ece0 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2ecf0 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2ed00 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2ed10 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2ed20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2ed30 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2ed40 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2ed50 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2ed60 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2ed70 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2ed80 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2ed90 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2eda0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2edb0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2edc0 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2edd0 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2ede0 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2edf0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2ee00 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65   If no page move
2ee10 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
2ee20 64 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a  d (because the.*
2ee30 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  * table being dr
2ee40 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2ee50 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  y the last one i
2ee60 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
2ee70 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20  then a .** zero 
2ee80 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2ee90 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55  ister P2.  If AU
2eea0 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
2eeb0 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
2eec0 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69   .** is stored i
2eed0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2eee0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2eef0 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2ef00 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
2ef10 79 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20  y active reader 
2ef20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69  VMs when.** it i
2ef30 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20  s invoked. This 
2ef40 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64  is done to avoid
2ef50 20 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20   the difficulty 
2ef60 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2ef70 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69  .** updating exi
2ef80 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68  sting cursors wh
2ef90 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69  en a root page i
2efa0 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55  s moved in an AU
2efb0 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74  TOVACUUM .** dat
2efc0 61 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f  abase. This erro
2efd0 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e  r is thrown even
2efe0 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2eff0 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56   is not an AUTOV
2f000 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20  ACUUM .** db in 
2f010 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69  order to avoid i
2f020 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e  ntroducing an in
2f030 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65  compatibility be
2f040 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d  tween autovacuum
2f050 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74   .** and non-aut
2f060 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a  ovacuum modes..*
2f070 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2f080 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2f090 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2f0a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2f0b0 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2f0c0 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  b;..  sqlite3Vdb
2f0d0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
2f0e0 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  r(p, 0);.  asser
2f0f0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2f100 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2f110 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f  Op->p1>1 );.  pO
2f120 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2f130 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2f140 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2f150 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
2f160 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
2f170 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
2f180 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2f190 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
2f1a0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
2f1b0 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20  Abort;.    goto 
2f1c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2f1d0 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  or;.  }else{.   
2f1e0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
2f1f0 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
2f200 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2f210 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
2f220 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
2f230 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2f240 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
2f250 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2f260 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2f270 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
2f280 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
2f290 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
2f2a0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2f2b0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
2f2c0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
2f2d0 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  d;.    if( rc ) 
2f2e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2f2f0 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66  o_error;.#ifndef
2f300 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2f310 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
2f320 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
2f330 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
2f340 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
2f350 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
2f360 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
2f370 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
2f380 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
2f390 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
2f3a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
2f3b0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2f3c0 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
2f3d0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
2f3e0 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
2f3f0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
2f400 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
2f410 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
2f420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2f430 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
2f440 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
2f450 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
2f460 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2f470 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
2f480 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
2f490 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2f4a0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
2f4b0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
2f4c0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
2f4d0 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
2f4e0 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
2f4f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2f500 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2f510 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
2f520 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2f530 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
2f540 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
2f550 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2f560 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2f570 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2f580 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2f590 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2f5a0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2f5b0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2f5c0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2f5d0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
2f5e0 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
2f5f0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
2f600 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
2f610 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
2f620 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
2f630 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
2f640 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
2f650 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
2f660 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
2f670 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
2f680 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2f690 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2f6a0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2f6b0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
2f6c0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
2f6d0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2f6e0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2f6f0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
2f700 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2f710 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2f720 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2f730 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
2f740 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
2f750 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
2f760 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
2f770 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71   nChange;. .  sq
2f780 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
2f790 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
2f7a0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
2f7b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2f7c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2f7d0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2f7e0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2f7f0 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
2f800 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2f810 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
2f820 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
2f830 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
2f840 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
2f850 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
2f860 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
2f870 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
2f880 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
2f890 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
2f8a0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2f8b0 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
2f8c0 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
2f8d0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2f8e0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
2f8f0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
2f900 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
2f910 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
2f920 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
2f930 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2f940 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2f950 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
2f960 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
2f970 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2f980 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
2f990 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
2f9a0 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
2f9b0 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
2f9c0 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
2f9d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2f9e0 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
2f9f0 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
2fa00 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
2fa10 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
2fa20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
2fa30 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
2fa40 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
2fa50 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
2fa60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
2fa70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2fa80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2fa90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2faa0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2fab0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2fac0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  pC!=0 );.  if( i
2fad0 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2fae0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
2faf0 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
2fb00 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20  ->uc.pSorter);. 
2fb10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2fb20 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2fb30 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2fb40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2fb50 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
2fb60 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2fb70 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
2fb80 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  eOfCursor(pC->uc
2fb90 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69  .pCursor);.    i
2fba0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2fbb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2fbc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2fbd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
2fbe0 74 65 42 74 72 65 65 20 50 31 20 50 32 20 50 33  teBtree P1 P2 P3
2fbf0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2fc00 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2fc10 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a  =P1 flags=P3.**.
2fc20 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2fc30 77 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20  w b-tree in the 
2fc40 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2fc50 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2fc60 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61  n the.** TEMP da
2fc70 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2fc80 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2fc90 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2fca0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65  if.** P1>1.  The
2fcb0 20 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73   P3 argument mus
2fcc0 74 20 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e  t be 1 (BTREE_IN
2fcd0 54 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69  TKEY) for a rowi
2fce0 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75  d table.** it mu
2fcf0 73 74 20 62 65 20 32 20 28 42 54 52 45 45 5f 42  st be 2 (BTREE_B
2fd00 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69  LOBKEY) for an i
2fd10 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20  ndex or WITHOUT 
2fd20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20  ROWID table..** 
2fd30 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2fd40 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2fd50 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65 64  b-tree is stored
2fd60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2fd70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
2fd80 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20  teBtree: {      
2fd90 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2fda0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20   int pgno;.  Db 
2fdb0 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33  *pDb;..  sqlite3
2fdc0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2fdd0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f  nter(p, 0);.  pO
2fde0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2fdf0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2fe00 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
2fe10 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45  t( pOp->p3==BTRE
2fe20 45 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d  E_INTKEY || pOp-
2fe30 3e 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b  >p3==BTREE_BLOBK
2fe40 45 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EY );.  assert( 
2fe50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2fe60 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2fe70 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2fe80 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2fe90 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2fea0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2feb0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2fec0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2fed0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2fee0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2fef0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2ff00 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
2ff10 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
2ff20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20  pOp->p3);.  if( 
2ff30 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ff40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ff50 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
2ff60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ff70 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63   Opcode: SqlExec
2ff80 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
2ff90 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74  * Run the SQL st
2ffa0 61 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65  atement or state
2ffb0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
2ffc0 69 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  in the P4 string
2ffd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c  ..*/.case OP_Sql
2ffe0 45 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65  Exec: {.  sqlite
2fff0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
30000 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64  unter(p, 0);.  d
30010 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20  b->nSqlExec++;. 
30020 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
30030 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ec(db, pOp->p4.z
30040 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62  , 0, 0, 0);.  db
30050 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20  ->nSqlExec--;.  
30060 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
30070 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
30080 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
30090 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
300a0 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
300b0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
300c0 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
300d0 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
300e0 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
300f0 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
30100 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
30110 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
30120 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
30130 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
30140 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
30150 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
30160 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
30170 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
30180 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
30190 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
301a0 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
301b0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
301c0 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
301d0 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
301e0 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
301f0 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
30200 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
30210 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
30220 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
30230 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
30240 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
30250 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
30260 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
30270 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
30280 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
30290 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
302a0 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
302b0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
302c0 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
302d0 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
302e0 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
302f0 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
30300 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
30310 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
30320 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
30330 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
30340 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
30350 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
30360 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
30370 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
30380 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
30390 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
303a0 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
303b0 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
303c0 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
303d0 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20  MASTER_NAME;.   
303e0 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
303f0 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
30400 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
30410 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
30420 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
30430 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
30440 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
30450 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
30460 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
30470 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
30480 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
30490 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
304a0 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
304b0 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  zDbSName, zMaste
304c0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
304d0 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
304e0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
304f0 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
30500 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30510 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
30520 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
30530 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
30540 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
30550 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
30560 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
30570 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
30580 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
30590 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
305a0 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
305b0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
305c0 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
305d0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
305e0 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
305f0 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
30600 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28  sqlite3DbFreeNN(
30610 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
30620 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
30630 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
30640 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
30650 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
30660 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
30670 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (db);.    if( rc
30680 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
30690 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
306a0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  mem;.    }.    g
306b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
306c0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
306d0 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
306e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
306f0 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
30700 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
30710 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
30720 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
30730 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
30740 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
30750 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
30760 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
30770 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
30780 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
30790 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
307a0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
307b0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
307c0 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
307d0 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
307e0 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
307f0 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
30800 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
30810 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
30820 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
30830 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
30840 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
30850 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69  b, pOp->p1);.  i
30860 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
30870 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
30880 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
30890 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
308a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
308b0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
308c0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
308d0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
308e0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
308f0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
30900 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
30910 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
30920 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
30930 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
30940 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
30950 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
30960 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
30970 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
30980 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
30990 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
309a0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
309b0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
309c0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
309d0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
309e0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
309f0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
30a00 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
30a10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
30a20 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
30a30 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55  , 0);.  sqlite3U
30a40 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
30a50 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
30a60 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
30a70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
30a80 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
30a90 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30aa0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
30ab0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
30ac0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
30ad0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
30ae0 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
30af0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
30b00 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
30b10 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
30b20 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
30b30 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
30b40 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
30b50 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65  code).** in orde
30b60 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
30b70 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
30b80 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
30b90 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
30ba0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
30bb0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
30bc0 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
30bd0 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
30be0 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
30bf0 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e   0);.  sqlite3Un
30c00 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
30c10 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
30c20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
30c30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30c40 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
30c50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
30c60 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
30c70 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
30c80 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
30c90 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
30ca0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
30cb0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
30cc0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
30cd0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
30ce0 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
30cf0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
30d00 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
30d10 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
30d20 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
30d30 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
30d40 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
30d50 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
30d60 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
30d70 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
30d80 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
30d90 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
30da0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
30db0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71  nter(p, 0);.  sq
30dc0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
30dd0 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20  leteTrigger(db, 
30de0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
30df0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
30e00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30e10 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
30e20 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CHECK./* Opcode:
30e30 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20   IntegrityCk P1 
30e40 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
30e50 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
30e60 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
30e70 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
30e80 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
30e90 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
30ea0 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
30eb0 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
30ec0 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
30ed0 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
30ee0 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
30ef0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
30f00 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
30f10 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
30f20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73  contains one les
30f30 73 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d  s than the maxim
30f40 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
30f50 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
30f60 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
30f70 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
30f80 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
30f90 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
30fa0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
30fb0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
30fc0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
30fd0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
30fe0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
30ff0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
31000 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
31010 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
31020 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
31030 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
31040 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
31050 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64  tegers.** stored
31060 20 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20   in P4_INTARRAY 
31070 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  argument..**.** 
31080 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
31090 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
310a0 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
310b0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
310c0 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
310d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
310e0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
310f0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
31100 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
31110 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
31120 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
31130 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
31140 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
31150 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
31160 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
31170 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
31180 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
31190 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
311a0 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
311b0 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
311c0 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
311d0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  cked */.  int nE
311e0 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
311f0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
31200 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
31210 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
31220 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
31230 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
31240 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
31250 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
31260 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
31270 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
31280 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
31290 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
312a0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52   = pOp->p2;.  aR
312b0 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  oot = pOp->p4.ai
312c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
312d0 74 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t>0 );.  assert(
312e0 20 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74   aRoot[0]==nRoot
312f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
31300 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
31310 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
31320 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
31330 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b    pnErr = &aMem[
31340 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
31350 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
31360 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
31370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
31380 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
31390 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
313a0 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
313b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
313c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
313d0 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
313e0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
313f0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
31400 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20  pOp->p5) );.  z 
31410 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
31420 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
31430 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
31440 74 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52  t, &aRoot[1], nR
31450 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
31480 2d 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b  ->u.i+1, &nErr);
31490 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
314a0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
314b0 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
314c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
314d0 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  0 );.  }else if(
314e0 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74   z==0 ){.    got
314f0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73  o no_mem;.  }els
31500 65 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e  e{.    pnErr->u.
31510 69 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20  i -= nErr-1;.   
31520 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
31530 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d  etStr(pIn1, z, -
31540 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
31550 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20  sqlite3_free);. 
31560 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f   }.  UPDATE_MAX_
31570 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
31580 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
31590 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31  ngeEncoding(pIn1
315a0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
315b0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
315c0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
315d0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
315e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
315f0 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a  SetAdd P1 P2 * *
31600 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31610 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d  rowset(P1)=r[P2]
31620 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
31630 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
31640 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
31650 20 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65   P2 into a RowSe
31660 74 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64  t object.** held
31670 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
31680 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
31690 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
316a0 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
316b0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
316c0 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
316d0 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a   /* in1, in2 */.
316e0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
316f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
31700 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
31710 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
31720 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
31730 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
31740 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
31750 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
31760 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
31770 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
31780 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
31790 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
317a0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
317b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
317c0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
317d0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
317e0 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  et, pIn2->u.i);.
317f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
31800 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
31810 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
31820 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
31830 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
31840 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
31850 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
31860 6f 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62  om the RowSet ob
31870 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e  ject in P1.** an
31880 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
31890 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
318a0 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77  3..** Or, if Row
318b0 53 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73  Set object P1 is
318c0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
318d0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
318e0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
318f0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
31900 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
31910 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
31920 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
31930 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
31940 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
31950 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31960 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
31970 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
31980 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
31990 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
319a0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
319b0 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
319c0 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
319d0 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
319e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
319f0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
31a00 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
31a10 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
31a20 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
31a30 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
31a40 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
31a50 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
31a60 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
31a70 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
31a80 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31a90 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
31aa0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
31ab0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
31ac0 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
31ad0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
31ae0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
31af0 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
31b00 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
31b10 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
31b20 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
31b30 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
31b40 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
31b50 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
31b60 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
31b70 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
31b80 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
31b90 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
31ba0 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
31bb0 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
31bc0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
31bd0 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
31be0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
31bf0 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
31c00 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
31c10 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
31c20 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
31c30 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
31c40 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
31c50 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
31c60 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
31c70 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
31c80 65 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65  ere sets of inte
31c90 67 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65  gers.** are inse
31ca0 72 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74  rted in distinct
31cb0 20 70 68 61 73 65 73 2c 20 77 68 69 63 68 20 65   phases, which e
31cc0 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
31cd0 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a   no duplicates..
31ce0 2a 2a 20 45 61 63 68 20 73 65 74 20 69 73 20 69  ** Each set is i
31cf0 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
31d00 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
31d10 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
31d20 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
31d30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
31d40 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31  must have P4==-1
31d50 2c 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74  , and for all ot
31d60 68 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74  her sets.** must
31d70 20 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a   have P4>0..**.*
31d80 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
31d90 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
31da0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
31db0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
31dc0 74 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53  test.** the RowS
31dd0 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
31de0 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
31df0 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
31e00 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
31e10 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
31e20 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
31e30 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
31e40 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
31e50 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
31e60 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
31e70 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
31e80 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
31e90 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
31ea0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
31eb0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
31ec0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
31ed0 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
31ee0 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
31ef0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
31f00 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
31f10 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
31f20 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
31f30 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
31f40 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
31f50 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
31f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
31f80 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
31f90 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
31fa0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31fb0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
31fc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
31fd0 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
31fe0 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
31ff0 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
32000 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
32010 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
32020 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
32030 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
32040 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
32050 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
32060 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
32070 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
32080 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
32090 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
320a0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
320b0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
320c0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
320d0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
320e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
320f0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
32100 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
32110 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
32120 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
32130 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
32140 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
32150 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
32160 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
32170 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
32180 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
32190 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
321a0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
321b0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
321c0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
321d0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
321e0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
321f0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
32200 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
32210 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
32220 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
32230 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
32240 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
32250 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
32260 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
32270 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
32280 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
32290 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
322a0 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
322b0 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
322c0 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
322d0 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
322e0 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
322f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
32300 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
32310 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
32320 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
32330 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
32340 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
32350 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
32360 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
32370 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
32380 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
32390 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
323a0 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
323b0 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
323c0 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
323d0 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
323e0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
323f0 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
32400 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
32410 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
32420 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
32430 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
32440 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
32450 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
32460 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
32470 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
32480 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
32490 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
324a0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
324b0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
324c0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
324d0 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20  cursive program 
324e0 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e  invocation is en
324f0 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abled..*/.case O
32500 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
32510 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
32520 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
32530 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
32540 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
32550 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
32560 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
32570 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
32580 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
32590 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
325a0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
325b0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
325c0 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
325d0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
325e0 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
325f0 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
32600 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
32610 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
32620 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
32630 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
32640 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
32650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
32660 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
32670 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
32680 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
32690 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
326a0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
326b0 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
326c0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
326d0 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
326e0 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
326f0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32710 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
32720 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
32730 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
32740 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
32750 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
32760 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
32770 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
32780 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
32790 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
327a0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
327b0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
327c0 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
327d0 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
327e0 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
327f0 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
32800 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
32810 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
32820 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
32830 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
32840 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
32850 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
32860 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
32870 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
32880 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
32890 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
328a0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
328b0 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
328c0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
328d0 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
328e0 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
328f0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
32900 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
32910 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
32920 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
32930 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
32940 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
32950 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
32960 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
32970 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
32980 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
32990 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
329a0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
329b0 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
329c0 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
329d0 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
329e0 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
329f0 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
32a00 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
32a10 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
32a20 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
32a30 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
32a40 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
32a50 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
32a60 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
32a70 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
32a80 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
32a90 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
32aa0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
32ab0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
32ac0 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
32ad0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
32ae0 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
32af0 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
32b00 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
32b10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
32b20 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79  ror(p, "too many
32b30 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
32b40 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
32b50 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
32b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
32b70 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
32b80 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
32b90 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
32ba0 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
32bb0 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
32bc0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
32bd0 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
32be0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
32bf0 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
32c00 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
32c10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
32c20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
32c30 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
32c40 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
32c50 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
32c60 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
32c70 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
32c80 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
32c90 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
32ca0 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
32cb0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
32cc0 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
32cd0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
32ce0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
32cf0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
32d00 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
32d10 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
32d20 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
32d30 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
32d40 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
32d50 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
32d60 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
32d70 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
32d80 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
32d90 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
32da0 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
32db0 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
32dc0 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
32dd0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
32de0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
32df0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
32e00 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  sr;.    assert( 
32e10 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66  nMem>0 );.    if
32e20 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
32e30 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20  ==0 ) nMem++;.  
32e40 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
32e50 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
32e60 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
32e70 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
32e80 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
32e90 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
32ea0 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
32eb0 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20  dbeCursor*).    
32ec0 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72            + (pPr
32ed0 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f  ogram->nOp + 7)/
32ee0 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  8;.    pFrame = 
32ef0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
32f00 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
32f10 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
32f20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
32f30 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
32f40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
32f50 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
32f60 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
32f70 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
32f80 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
32f90 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
32fa0 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
32fb0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
32fc0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
32fd0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
32fe0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
32ff0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
33000 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
33010 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
33020 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
33030 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
33040 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
33050 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
33060 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
33070 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
33080 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
33090 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
330a0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
330b0 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
330c0 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
330d0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
330e0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
330f0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
33100 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d  STATUS.    pFram
33110 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61  e->anExec = p->a
33120 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20  nExec;.#endif.. 
33130 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
33140 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
33150 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
33160 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
33170 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
33180 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
33190 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
331a0 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
331b0 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
331c0 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
331d0 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
331e0 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
331f0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
33200 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
33210 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
33220 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
33230 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20  ->nChildMem .   
33240 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61       || (pProgra
33250 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50  m->nCsr==0 && pP
33260 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d  rogram->nMem+1==
33270 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
33280 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m) );.    assert
33290 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
332a0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
332b0 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
332c0 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61  t( (int)(pOp - a
332d0 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20  Op)==pFrame->pc 
332e0 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
332f0 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
33300 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
33310 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
33320 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
33330 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
33340 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
33350 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
33360 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
33370 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
33380 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d  .  assert( pFram
33390 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29  e->pAuxData==0 )
333a0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  ;.  pFrame->pAux
333b0 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61  Data = p->pAuxDa
333c0 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74  ta;.  p->pAuxDat
333d0 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61  a = 0;.  p->nCha
333e0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
333f0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
33400 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
33410 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  = VdbeFrameMem(p
33420 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65  Frame);.  p->nMe
33430 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
33440 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
33450 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
33460 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
33470 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
33480 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
33490 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61  p->nMem];.  pFra
334a0 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a  me->aOnce = (u8*
334b0 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67  )&p->apCsr[pProg
334c0 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65  ram->nCsr];.  me
334d0 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e  mset(pFrame->aOn
334e0 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d  ce, 0, (pProgram
334f0 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20  ->nOp + 7)/8);. 
33500 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
33510 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
33520 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
33530 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20  am->nOp;.#ifdef 
33540 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
33550 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
33560 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23  p->anExec = 0;.#
33570 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61  endif.  pOp = &a
33580 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b  Op[-1];..  break
33590 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
335a0 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
335b0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
335c0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
335d0 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
335e0 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
335f0 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
33600 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
33610 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
33620 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
33630 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
33640 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
33650 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
33660 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
33670 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
33680 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
33690 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
336a0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
336b0 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
336c0 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
336d0 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
336e0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
336f0 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
33700 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
33710 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
33720 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
33730 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33740 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
33750 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33760 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
33770 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
33780 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
33790 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
337a0 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
337b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
337c0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
337d0 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
337e0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
337f0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
33800 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  );.  pFrame = p-
33810 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
33820 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
33830 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
33840 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
33850 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
33860 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
33870 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
33880 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
33890 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
338a0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
338b0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
338c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
338d0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
338e0 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
338f0 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
33900 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
33910 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a  fkctr[P1]+=P2.**
33920 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
33930 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
33940 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
33950 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
33960 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
33970 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
33980 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
33990 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
339a0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
339b0 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
339c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
339d0 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
339e0 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
339f0 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
33a00 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
33a10 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
33a20 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
33a30 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
33a40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
33a50 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
33a60 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
33a70 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20  TE_DeferFKs ){. 
33a80 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
33a90 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  ImmCons += pOp->
33aa0 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
33ab0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
33ac0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
33ad0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
33ae0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
33af0 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
33b00 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
33b10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33b20 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
33b30 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
33b40 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d  is: if fkctr[P1]
33b50 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
33b60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
33b70 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
33b80 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
33b90 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
33ba0 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
33bb0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
33bc0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
33bd0 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
33be0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
33bf0 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
33c00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
33c10 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
33c20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
33c30 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
33c40 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
33c50 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
33c60 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
33c70 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
33c80 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
33c90 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
33ca0 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
33cb0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
33cc0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
33cd0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
33ce0 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
33cf0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
33d00 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
33d10 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
33d20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
33d30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
33d40 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
33d50 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
33d60 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65  hTaken(db->nDefe
33d70 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
33d80 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
33d90 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
33da0 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
33db0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
33dc0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
33dd0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
33de0 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
33df0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
33e00 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
33e10 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
33e20 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
33e30 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
33e40 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
33e50 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
33e60 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
33e70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33e80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33e90 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
33ea0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
33eb0 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23  OREIGN_KEY */..#
33ec0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33ed0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
33ee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
33ef0 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ax P1 P2 * * *.*
33f00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
33f10 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32  ]=max(r[P1],r[P2
33f20 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ]).**.** P1 is a
33f30 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
33f40 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
33f50 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
33f60 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
33f70 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
33f80 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
33f90 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
33fa0 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
33fb0 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
33fc0 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
33fd0 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
33fe0 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
33ff0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
34000 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
34010 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
34020 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
34030 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
34040 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
34050 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
34060 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
34070 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
34080 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
34090 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
340a0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
340b0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
340c0 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
340d0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
340e0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
340f0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
34100 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
34110 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
34120 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
34130 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
34140 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
34150 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
34160 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
34170 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
34180 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
34190 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
341a0 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
341b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
341c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
341d0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
341e0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
341f0 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
34200 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
34210 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
34220 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
34230 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
34240 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
34250 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
34260 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
34270 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
34280 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31  [P1]>0 then r[P1
34290 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a  ]-=P3, goto P2.*
342a0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
342b0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
342c0 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20   integer..** If 
342d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
342e0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
342f0 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61   greater, subtra
34300 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a  ct P3 from the.*
34310 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e  * value in P1 an
34320 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  d jump to P2..**
34330 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
34340 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
34350 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
34360 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
34370 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
34380 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
34390 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
343a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
343b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
343c0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
343d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
343e0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
343f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34400 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
34410 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
34420 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
34430 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
34440 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
34450 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e  u.i>0 ){.    pIn
34460 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
34470 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  3;.    goto jump
34480 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
34490 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
344a0 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50  e: OffsetLimit P
344b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
344c0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
344d0 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72  ]>0 then r[P2]=r
344e0 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d  [P1]+max(0,r[P3]
344f0 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31  ) else r[P2]=(-1
34500 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ).**.** This opc
34510 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63  ode performs a c
34520 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d  ommonly used com
34530 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61  putation associa
34540 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49  ted with.** LIMI
34550 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f  T and OFFSET pro
34560 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c  cess.  r[P1] hol
34570 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75  ds the limit cou
34580 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20  nter.  r[P3].** 
34590 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74  holds the offset
345a0 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f   counter.  The o
345b0 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74  pcode computes t
345c0 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75  he combined valu
345d0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49  e.** of the LIMI
345e0 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64  T and OFFSET and
345f0 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c   stores that val
34600 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68  ue in r[P2].  Th
34610 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65  e r[P2].** value
34620 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65   computed is the
34630 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
34640 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20   rows that will 
34650 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69  need to be.** vi
34660 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74  sited in order t
34670 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71  o complete the q
34680 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72  uery..**.** If r
34690 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P3] is zero or 
346a0 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
346b0 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
346c0 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72   OFFSET.** and r
346d0 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62  [P2] is set to b
346e0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
346f0 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e  he LIMIT, r[P1].
34700 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20  .**.** if r[P1] 
34710 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
34720 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
34730 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
34740 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
34750 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a  s set to -1. .**
34760 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
34770 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74  [P2] is set to t
34780 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20  he sum of r[P1] 
34790 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61  and r[P3]..*/.ca
347a0 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69  se OP_OffsetLimi
347b0 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20  t: {    /* in1, 
347c0 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  out2, in3 */.  i
347d0 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26  64 x;.  pIn1 = &
347e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
347f0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
34800 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p3];.  pOut =
34810 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
34820 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
34830 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
34840 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
34850 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
34860 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
34870 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a   x = pIn1->u.i;.
34880 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71    if( x<=0 || sq
34890 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78  lite3AddInt64(&x
348a0 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49  , pIn3->u.i>0?pI
348b0 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20  n3->u.i:0) ){.  
348c0 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49    /* If the LIMI
348d0 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  T is less than o
348e0 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c  r equal to zero,
348f0 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20   loop forever.  
34900 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64  This.    ** is d
34910 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20  ocumented.  But 
34920 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d  also, if the LIM
34930 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64  IT+OFFSET exceed
34940 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20  s 2^63 then.    
34950 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72  ** also loop for
34960 65 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75  ever.  This is u
34970 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e  ndocumented.  In
34980 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64   fact, one could
34990 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68   argue.    ** th
349a0 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75  at the loop shou
349b0 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42  ld terminate.  B
349c0 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69  ut assuming 1 bi
349d0 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73  llion iterations
349e0 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f  .    ** per seco
349f0 6e 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e  nd (far exceedin
34a00 67 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69  g the capabiliti
34a10 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e  es of any curren
34a20 74 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20  t hardware).    
34a30 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65  ** it would take
34a40 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72   nearly 300 year
34a50 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65  s to actually re
34a60 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20  ach the limit.  
34a70 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e  So.    ** loopin
34a80 67 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72  g forever is a r
34a90 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78  easonable approx
34aa0 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  imation. */.    
34ab0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a  pOut->u.i = -1;.
34ac0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
34ad0 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a  t->u.i = x;.  }.
34ae0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
34af0 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f  pcode: IfNotZero
34b00 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
34b10 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
34b20 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d  1]!=0 then r[P1]
34b30 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  --, goto P2.**.*
34b40 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
34b50 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
34b60 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63  teger.  If the c
34b70 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
34b80 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74  er P1 is.** init
34b90 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68  ially greater th
34ba0 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65  an zero, then de
34bb0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
34bc0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
34bd0 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f  ..** If it is no
34be0 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65  n-zero (negative
34bf0 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e   or positive) an
34c00 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70  d then also jump
34c10 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20   to P2.  .** If 
34c20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69  register P1 is i
34c30 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c  nitially zero, l
34c40 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65  eave it unchange
34c50 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
34c60 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
34c70 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
34c80 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
34c90 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
34ca0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
34cb0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
34cc0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
34cd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
34ce0 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
34cf0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
34d00 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31  ){.     if( pIn1
34d10 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e  ->u.i>0 ) pIn1->
34d20 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f  u.i--;.     goto
34d30 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
34d40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
34d50 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70  Opcode: DecrJump
34d60 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
34d70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
34d80 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f   (--r[P1])==0 go
34d90 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
34da0 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c  ster P1 must hol
34db0 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44  d an integer.  D
34dc0 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
34dd0 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20  ue in P1.** and 
34de0 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  jump to P2 if th
34df0 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65  e new value is e
34e00 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a  xactly zero..*/.
34e10 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70  case OP_DecrJump
34e20 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Zero: {      /* 
34e30 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
34e40 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
34e50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
34e60 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
34e70 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
34e80 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f  1->u.i>SMALLEST_
34e90 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e  INT64 ) pIn1->u.
34ea0 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
34eb0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
34ec0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
34ed0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f  In1->u.i==0 ) go
34ee0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34ef0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
34f00 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
34f10 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
34f20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
34f30 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
34f40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
34f50 74 65 20 74 68 65 20 78 53 74 65 70 20 66 75 6e  te the xStep fun
34f60 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
34f70 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66  regate..** The f
34f80 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
34f90 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73  rguments.  P4 is
34fa0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
34fb0 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74  e .** FuncDef st
34fc0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
34fd0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
34fe0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
34ff0 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
35000 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
35010 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
35020 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
35030 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
35040 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
35050 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
35060 41 67 67 49 6e 76 65 72 73 65 20 2a 20 50 32 20  AggInverse * P2 
35070 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
35080 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
35090 5d 20 69 6e 76 65 72 73 65 28 72 5b 50 32 40 50  ] inverse(r[P2@P
350a0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
350b0 65 20 74 68 65 20 78 49 6e 76 65 72 73 65 20 66  e the xInverse f
350c0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
350d0 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65  ggregate..** The
350e0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
350f0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20   arguments.  P4 
35100 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35110 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20  the .** FuncDef 
35120 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
35130 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
35140 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
35150 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
35160 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
35170 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
35180 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
35190 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
351a0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
351b0 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
351c0 3a 20 41 67 67 53 74 65 70 31 20 50 31 20 50 32  : AggStep1 P1 P2
351d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
351e0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
351f0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
35200 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
35210 74 68 65 20 78 53 74 65 70 20 28 69 66 20 50 31  the xStep (if P1
35220 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73 65  ==0) or xInverse
35230 20 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e 63   (if P1!=0) func
35240 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20 61  tion for an.** a
35250 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 20 66  ggregate.  The f
35260 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
35270 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73  rguments.  P4 is
35280 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
35290 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74  e .** FuncDef st
352a0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
352b0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
352c0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
352d0 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
352e0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
352f0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
35300 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
35310 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
35320 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
35330 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
35340 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79  ode is initially
35350 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67   coded as OP_Agg
35360 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74  Step0.  On first
35370 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20   evaluation,.** 
35380 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72  the FuncDef stor
35390 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76  ed in P4 is conv
353a0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
353b0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e  lite3_context an
353c0 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20  d.** the opcode 
353d0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20  is changed.  In 
353e0 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
353f0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  itialization of 
35400 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
35410 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70  ontext only happ
35420 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61  ens once, instea
35430 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c  d of on each cal
35440 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70  l to the.** step
35450 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61   function..*/.ca
35460 73 65 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  se OP_AggInverse
35470 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  :.case OP_AggSte
35480 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
35490 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
354a0 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
354b0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
354c0 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e  4_FUNCDEF );.  n
354d0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
354e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
354f0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
35500 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
35510 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
35520 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
35530 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
35540 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
35550 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
35560 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
35570 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
35580 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
35590 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71  n );.  pCtx = sq
355a0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
355b0 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28  NN(db, n*sizeof(
355c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20  sqlite3_value*) 
355d0 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
355e0 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d   (sizeof(pCtx[0]
355f0 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20  ) + sizeof(Mem) 
35600 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  - sizeof(sqlite3
35610 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66  _value*)));.  if
35620 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f  ( pCtx==0 ) goto
35630 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d   no_mem;.  pCtx-
35640 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74  >pMem = 0;.  pCt
35650 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29  x->pOut = (Mem*)
35660 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29  &(pCtx->argv[n])
35670 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
35680 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75  emInit(pCtx->pOu
35690 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
356a0 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
356b0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
356c0 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
356d0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
356e0 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
356f0 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70   p;.  pCtx->skip
35700 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78  Flag = 0;.  pCtx
35710 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  ->isError = 0;. 
35720 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
35730 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
35740 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
35750 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
35760 74 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67 67  tx;..  /* OP_Agg
35770 49 6e 76 65 72 73 65 20 6d 75 73 74 20 68 61 76  Inverse must hav
35780 65 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50 5f 41  e P1==1 and OP_A
35790 67 67 53 74 65 70 20 6d 75 73 74 20 68 61 76 65  ggStep must have
357a0 20 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73 73 65   P1==0 */.  asse
357b0 72 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f  rt( pOp->p1==(pO
357c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67  p->opcode==OP_Ag
357d0 67 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a 20 20  gInverse) );..  
357e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
357f0 5f 41 67 67 53 74 65 70 31 3b 0a 20 20 2f 2a 20  _AggStep1;.  /* 
35800 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
35810 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a  o OP_AggStep */.
35820 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  }.case OP_AggSte
35830 70 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  p1: {.  int i;. 
35840 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
35850 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
35860 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Mem;..  assert( 
35870 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
35880 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
35890 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
358a0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
358b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64  [pOp->p3];..#ifd
358c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
358d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
358e0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
358f0 61 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  an OP_AggInverse
35900 20 63 61 6c 6c 2e 20 20 56 65 72 69 66 79 20 74   call.  Verify t
35910 68 61 74 20 78 53 74 65 70 20 68 61 73 20 61 6c  hat xStep has al
35920 77 61 79 73 0a 20 20 20 20 2a 2a 20 62 65 65 6e  ways.    ** been
35930 20 63 61 6c 6c 65 64 20 61 74 20 6c 65 61 73 74   called at least
35940 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61   once prior to a
35950 6e 79 20 78 49 6e 76 65 72 73 65 20 63 61 6c 6c  ny xInverse call
35960 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
35970 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78   pMem->uTemp==0x
35980 31 31 32 32 65 30 65 33 20 29 3b 0a 20 20 7d 65  1122e0e3 );.  }e
35990 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
359a0 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 53 74 65   is an OP_AggSte
359b0 70 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20 69 74  p call.  Mark it
359c0 20 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20 20 20   as such. */.   
359d0 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d 20 30   pMem->uTemp = 0
359e0 78 31 31 32 32 65 30 65 33 3b 0a 20 20 7d 0a 23  x1122e0e3;.  }.#
359f0 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
35a00 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
35a10 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
35a20 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
35a30 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
35a40 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
35a50 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
35a60 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
35a70 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
35a80 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
35a90 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
35aa0 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
35ab0 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
35ac0 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
35ad0 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
35ae0 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
35af0 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
35b00 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
35b10 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ect */.  if( pCt
35b20 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20  x->pMem != pMem 
35b30 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65  ){.    pCtx->pMe
35b40 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f  m = pMem;.    fo
35b50 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
35b60 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
35b70 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
35b80 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
35b90 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
35ba0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d  E_DEBUG.  for(i=
35bb0 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b  0; i<pCtx->argc;
35bc0 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
35bd0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43  t( memIsValid(pC
35be0 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a  tx->argv[i]) );.
35bf0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
35c00 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43  CE(pOp->p2+i, pC
35c10 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20  tx->argv[i]);.  
35c20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d  }.#endif..  pMem
35c30 2d 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  ->n++;.  assert(
35c40 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
35c50 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
35c60 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
35c70 69 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a 20 20  isError==0 );.  
35c80 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b  assert( pCtx->sk
35c90 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23 69 66  ipFlag==0 );.#if
35ca0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35cb0 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66  _WINDOWFUNC.  if
35cc0 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
35cd0 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
35ce0 49 6e 76 65 72 73 65 29 28 70 43 74 78 2c 70 43  Inverse)(pCtx,pC
35cf0 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
35d00 72 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  rgv);.  }else.#e
35d10 6e 64 69 66 0a 20 20 28 70 43 74 78 2d 3e 70 46  ndif.  (pCtx->pF
35d20 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
35d30 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
35d40 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
35d50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
35d60 2a 2f 0a 0a 20 20 69 66 28 20 70 43 74 78 2d 3e  */..  if( pCtx->
35d70 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 69  isError ){.    i
35d80 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  f( pCtx->isError
35d90 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
35da0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35db0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
35dc0 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70  lue_text(pCtx->p
35dd0 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  Out));.      rc 
35de0 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b  = pCtx->isError;
35df0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
35e00 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b  Ctx->skipFlag ){
35e10 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
35e20 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
35e30 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
35e40 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
35e50 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29  1;.      if( i )
35e60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
35e70 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d  etInt64(&aMem[i]
35e80 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74 78  , 1);.      pCtx
35e90 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  ->skipFlag = 0;.
35ea0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
35eb0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
35ec0 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20  pCtx->pOut);.   
35ed0 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
35ee0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
35ef0 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72     pCtx->isError
35f00 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63   = 0;.    if( rc
35f10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35f20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
35f30 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
35f40 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pOut->flags==MEM
35f50 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72  _Null );.  asser
35f60 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  t( pCtx->skipFla
35f70 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  g==0 );.  break;
35f80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
35f90 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
35fa0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
35fb0 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
35fc0 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  P2.**.** P1 is t
35fd0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
35fe0 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
35ff0 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 61  ccumulator for a
36000 6e 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 6f  n aggregate.** o
36010 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  r window functio
36020 6e 2e 20 20 45 78 65 63 75 74 65 20 74 68 65 20  n.  Execute the 
36030 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
36040 6f 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 67  on .** for an ag
36050 67 72 65 67 61 74 65 20 61 6e 64 20 73 74 6f 72  gregate and stor
36060 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
36070 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  P1..**.** P2 is 
36080 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
36090 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
360a0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
360b0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
360c0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
360d0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
360e0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
360f0 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
36100 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
36110 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
36120 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
36130 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
36140 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
36150 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
36160 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
36170 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
36180 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
36190 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
361a0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  the case where.*
361b0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
361c0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
361d0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
361e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
361f0 56 61 6c 75 65 20 2a 20 50 32 20 50 33 20 50 34  Value * P2 P3 P4
36200 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36210 72 5b 50 33 5d 3d 76 61 6c 75 65 20 4e 3d 50 32  r[P3]=value N=P2
36220 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68  .**.** Invoke th
36230 65 20 78 56 61 6c 75 65 28 29 20 66 75 6e 63 74  e xValue() funct
36240 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68  ion and store th
36250 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
36260 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50  ster P3..**.** P
36270 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
36280 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
36290 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
362a0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
362b0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
362c0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
362d0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
362e0 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
362f0 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
36300 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
36310 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
36320 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
36330 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
36340 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
36350 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
36360 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
36370 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
36380 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
36390 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
363a0 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
363b0 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
363c0 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
363d0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
363e0 67 67 56 61 6c 75 65 3a 0a 63 61 73 65 20 4f 50  ggValue:.case OP
363f0 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
36400 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
36410 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
36420 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
36430 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
36440 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
36450 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f  pOp->p3==0 || pO
36460 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67  p->opcode==OP_Ag
36470 67 56 61 6c 75 65 20 29 3b 0a 20 20 70 4d 65 6d  gValue );.  pMem
36480 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
36490 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
364a0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
364b0 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
364c0 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  ==0 );.#ifndef S
364d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
364e0 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d  WFUNC.  if( pOp-
364f0 3e 70 33 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  >p3 ){.    rc = 
36500 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 67  sqlite3VdbeMemAg
36510 67 56 61 6c 75 65 28 70 4d 65 6d 2c 20 26 61 4d  gValue(pMem, &aM
36520 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70  em[pOp->p3], pOp
36530 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 20  ->p4.pFunc);.   
36540 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
36550 70 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a  p->p3];.  }else.
36560 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 72  #endif.  {.    r
36570 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
36580 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
36590 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
365a0 0a 20 20 7d 0a 20 20 0a 20 20 69 66 28 20 72 63  .  }.  .  if( rc
365b0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
365c0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
365d0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
365e0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
365f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36600 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
36610 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
36620 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
36630 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
36640 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
36650 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
36660 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
36670 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
36680 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
36690 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
366a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
366b0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
366c0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
366d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
366e0 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
366f0 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
36700 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
36710 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
36720 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
36730 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
36740 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
36750 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
36760 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
36770 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
36780 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
36790 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
367a0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
367b0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
367c0 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
367d0 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
367e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
367f0 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
36800 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
36810 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
36820 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
36830 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
36840 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
36850 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
36860 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
36870 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
36880 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
36890 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
368a0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
368b0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
368c0 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
368d0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
368e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
368f0 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
36900 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
36910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36920 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
36930 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
36960 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
36970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36980 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
36990 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
369a0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
369b0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
369c0 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
369d0 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
369e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
369f0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
36a00 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
36a10 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
36a20 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
36a30 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
36a40 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
36a50 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
36a60 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
36a70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
36a80 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
36a90 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
36aa0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
36ab0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
36ac0 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
36ad0 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
36ae0 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
36af0 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
36b00 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36b10 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
36b20 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
36b30 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
36b40 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
36b50 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
36b60 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
36b70 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
36b80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
36b90 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
36ba0 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
36bb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
36bc0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
36bd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
36be0 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
36bf0 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
36c00 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
36c10 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
36c20 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
36c30 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
36c40 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
36c50 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
36c60 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
36c70 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
36c80 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
36c90 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
36ca0 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
36cb0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
36cc0 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
36cd0 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
36ce0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
36cf0 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
36d00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
36d10 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
36d20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
36d30 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
36d40 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
36d50 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
36d60 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
36d70 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
36d80 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
36d90 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
36da0 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
36db0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
36dc0 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
36df0 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
36e00 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
36e10 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
36e20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
36e30 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
36e40 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
36e50 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
36e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
36e70 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
36e80 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
36eb0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
36ec0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36ed0 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
36ee0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
36ef0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
36f00 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
36f10 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
36f20 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
36f30 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
36f40 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
36f50 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
36f60 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
36f70 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
36f80 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
36f90 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
36fa0 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
36fb0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
36fc0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
36fd0 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
36fe0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
36ff0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
37000 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
37010 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37020 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
37030 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
37040 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
37050 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
37060 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37070 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
37080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
37090 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
370a0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
370b0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
370c0 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
370d0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
370e0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
370f0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
37100 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
37110 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
37120 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
37130 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
37140 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37150 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
37160 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
37170 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
37180 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
37190 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
371a0 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
371b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
371c0 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
371d0 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
371e0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
371f0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
37200 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
37210 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
37220 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
37230 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
37240 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
37250 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
37260 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
37270 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
37280 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
37290 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
372a0 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
372b0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
372c0 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
372d0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
372e0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
372f0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
37300 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
37310 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
37320 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
37330 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
37340 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
37350 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
37360 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
37370 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
37380 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
37390 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
373a0 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
373b0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
373c0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
373d0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
373e0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
373f0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
37400 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
37410 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
37420 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
37430 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
37440 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
37450 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37460 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
37470 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
37480 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
37490 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
374a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
374b0 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
374c0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
374d0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
374e0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
374f0 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
37500 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
37510 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
37520 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
37530 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
37540 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
37550 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
37560 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
37570 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
37580 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
37590 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
375a0 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
375b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
375c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
375d0 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
375e0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
375f0 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
37600 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
37610 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29  eWal(pPager, db)
37620 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
37630 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
37640 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
37650 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
37660 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
37670 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
37680 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
37690 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
376a0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
376b0 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
376c0 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
376d0 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
376e0 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
376f0 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
37700 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
37710 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
37720 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
37730 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
37740 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
37750 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
37760 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
37770 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
37780 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
37790 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
377a0 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
377b0 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
377c0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
377d0 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
377e0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
377f0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
37800 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
37810 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
37820 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
37830 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
37840 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
37850 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
37860 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
37870 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
37880 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
37890 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
378a0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
378b0 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
378c0 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
378d0 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65  f( rc ) eNew = e
378e0 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71  Old;.  eNew = sq
378f0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
37900 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
37910 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d   eNew);..  pOut-
37920 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
37930 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
37940 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
37950 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
37960 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
37970 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
37980 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
37990 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
379a0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
379b0 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
379c0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
379d0 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
379e0 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ing);.  if( rc )
379f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37a00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
37a10 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
37a20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
37a30 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
37a40 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
37a50 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
37a60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
37a70 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
37a80 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a  e: Vacuum P1 * *
37a90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
37aa0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
37ab0 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73  abase P1.  P1 is
37ac0 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61   0 for "main", a
37ad0 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  nd 2 or more.** 
37ae0 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20  for an attached 
37af0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22  database.  The "
37b00 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d  temp" database m
37b10 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d  ay not be vacuum
37b20 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
37b30 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
37b40 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
37b50 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
37b60 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
37b70 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f  >zErrMsg, db, pO
37b80 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
37b90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37ba0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
37bb0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
37bc0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
37bd0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
37be0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
37bf0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
37c00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
37c10 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
37c20 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
37c30 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
37c40 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
37c50 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
37c60 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
37c70 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
37c80 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
37c90 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
37ca0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
37cb0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
37cc0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
37cd0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
37ce0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
37cf0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
37d00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
37d10 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
37d20 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
37d30 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
37d40 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
37d50 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
37d60 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
37d70 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
37d80 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
37d90 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
37da0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
37db0 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
37dc0 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
37dd0 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
37de0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
37df0 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
37e00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37e10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
37e20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
37e30 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
37e40 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
37e50 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
37e60 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
37e70 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
37e80 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
37e90 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65   statements to e
37ea0 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20  xpire.  When an 
37eb0 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
37ec0 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64  t.** is executed
37ed0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73   using sqlite3_s
37ee0 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69  tep() it will ei
37ef0 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c  ther automatical
37f00 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20  ly.** reprepare 
37f10 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61  itself (if it wa
37f20 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65  s originally cre
37f30 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ated using sqlit
37f40 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29  e3_prepare_v2())
37f50 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66  .** or it will f
37f60 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ail with SQLITE_
37f70 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49  SCHEMA..** .** I
37f80 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
37f90 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
37fa0 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
37fb0 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
37fc0 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
37fd0 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
37fe0 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
37ff0 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e  ment is expired.
38000 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
38010 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
38020 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
38030 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
38040 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
38050 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
38060 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
38070 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
38080 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
38090 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
380a0 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
380b0 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
380c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
380d0 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72  Db=P1 root=P2 wr
380e0 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74  ite=P3.**.** Obt
380f0 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
38100 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
38110 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
38120 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
38130 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
38140 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
38150 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
38160 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
38170 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
38180 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
38190 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
381a0 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
381b0 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
381c0 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
381d0 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
381e0 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
381f0 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
38200 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
38210 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
38220 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
38230 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
38240 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
38250 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
38260 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
38270 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
38280 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
38290 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
382a0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
382b0 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
382c0 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
382d0 2a 2f 0a 63 61 73