/ Hex Artifact Content
Login

Artifact ff748307932fac5a5a983a20a4d8805aff7b0f310ca58cff4051df96d34a4dc8:


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 2c 20 32 20 6f 72 20 33   integer, 2 or 3
12e0: 2c 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68  , that indices h
12f0: 6f 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ow many differen
1300: 74 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72  t ways the.** br
1310: 61 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74  anch can go.  It
1320: 20 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20   is usually 2.  
1330: 22 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63  "I" is the direc
1340: 74 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a  tion the branch.
1350: 2a 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e  ** goes.  0 mean
1360: 73 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e  s falls through.
1370: 20 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68    1 means branch
1380: 20 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65   is taken.  2 me
1390: 61 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e  ans the.** secon
13a0: 64 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72  d alternative br
13b0: 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a  anch is taken..*
13c0: 2a 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73  *.** iSrcLine is
13d0: 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
13e0: 20 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20   line (from the 
13f0: 5f 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20  __LINE__ macro) 
1400: 74 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65  that.** generate
1410: 64 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72  d the VDBE instr
1420: 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e  uction.  This in
1430: 73 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73  strumentation as
1440: 73 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a  sumes that all.*
1450: 2a 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73  * source code is
1460: 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c   in a single fil
1470: 65 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  e (the amalgamat
1480: 69 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76  ion).  Special v
1490: 61 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32  alues 1.** and 2
14a0: 20 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e   for the iSrcLin
14b0: 65 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e  e parameter mean
14c0: 20 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69   that this parti
14d0: 63 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a  cular branch is.
14e0: 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20  ** always taken 
14f0: 6f 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20  or never taken, 
1500: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
1510: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1520: 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
1530: 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62  GE).# define Vdb
1540: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1550: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1560: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1570: 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72  (I,M) vdbeTakeBr
1580: 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69  anch(pOp->iSrcLi
1590: 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63  ne,I,M).  static
15a0: 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72   void vdbeTakeBr
15b0: 61 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e  anch(int iSrcLin
15c0: 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a  e, u8 I, u8 M){.
15d0: 20 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65      if( iSrcLine
15e0: 3c 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53  <=2 && ALWAYS(iS
15f0: 72 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20  rcLine>0) ){.   
1600: 20 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b     M = iSrcLine;
1610: 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74  .      /* Assert
1620: 20 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64   the truth of Vd
1630: 62 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73  beCoverageAlways
1640: 54 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20  Taken() and .   
1650: 20 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61     ** VdbeCovera
1660: 67 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a  geNeverTaken() *
1670: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
1680: 28 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20  (M & I)==I );.  
1690: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
16a0: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
16b0: 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e  Config.xVdbeBran
16c0: 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20  ch==0 ) return; 
16d0: 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20   /*NO_TEST*/.   
16e0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
16f0: 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e  Config.xVdbeBran
1700: 63 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ch(sqlite3Global
1710: 43 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e  Config.pVdbeBran
1720: 63 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20  chArg,.         
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72               iSr
1750: 63 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20  cLine,I,M);.    
1760: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  }.  }.#endif../*
1770: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20  .** Convert the 
1780: 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69  given register i
1790: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20  nto a string if 
17a0: 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20  it isn't one.** 
17b0: 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20  already. Return 
17c0: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61  non-zero if a ma
17d0: 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f  lloc() fails..*/
17e0: 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69  .#define Stringi
17f0: 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20  fy(P, enc) \.   
1800: 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28  if(((P)->flags&(
1810: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
1820: 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33  ))==0 && sqlite3
1830: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
1840: 28 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20 20  (P,enc,0)) \.   
1850: 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b    { goto no_mem;
1860: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68   }../*.** An eph
1870: 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61  emeral string va
1880: 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62  lue (signified b
1890: 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20  y the MEM_Ephem 
18a0: 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a  flag) contains.*
18b0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
18c0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
18d0: 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68  ocated string wh
18e0: 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65  ere some other e
18f0: 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70  ntity.** is resp
1900: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c  onsible for deal
1910: 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74  locating that st
1920: 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74  ring.  Because t
1930: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64  he register.** d
1940: 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20  oes not control 
1950: 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d  the string, it m
1960: 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20  ight be deleted 
1970: 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69  without the regi
1980: 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20  ster.** knowing 
1990: 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  it..**.** This r
19a0: 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20  outine converts 
19b0: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  an ephemeral str
19c0: 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d  ing into a dynam
19d0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
19e0: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
19f0: 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73  the register its
1a00: 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49  elf controls.  I
1a10: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
1a20: 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e  t.** converts an
1a30: 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e   MEM_Ephem strin
1a40: 67 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  g into a string 
1a50: 77 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c  with P.z==P.zMal
1a60: 6c 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  loc..*/.#define 
1a70: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50  Deephemeralize(P
1a80: 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d  ) \.   if( ((P)-
1a90: 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d  >flags&MEM_Ephem
1aa0: 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26  )!=0 \.       &&
1ab0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
1ac0: 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29 20  akeWriteable(P) 
1ad0: 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d  ){ goto no_mem;}
1ae0: 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
1af0: 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 77   if the cursor w
1b00: 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1b10: 74 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65  the OP_OpenSorte
1b20: 72 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65  r opcode. */.#de
1b30: 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29  fine isSorter(x)
1b40: 20 28 28 78 29 2d 3e 65 43 75 72 54 79 70 65 3d   ((x)->eCurType=
1b50: 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29  =CURTYPE_SORTER)
1b60: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1b70: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
1b80: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
1b90: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
1ba0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
1bb0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
1bc0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
1bd0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1be0: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1bf0: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c10: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1c20: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1c30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1c40: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1c50: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1c60: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1c70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c80: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c90: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1ca0: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
1cc0: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1cd0: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1ce0: 2d 31 20 2a 2f 0a 20 20 75 38 20 65 43 75 72 54  -1 */.  u8 eCurT
1cf0: 79 70 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ype           /*
1d00: 20 54 79 70 65 20 6f 66 20 74 68 65 20 6e 65 77   Type of the new
1d10: 20 63 75 72 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20   cursor */.){.  
1d20: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1d30: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1d40: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1d50: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1d60: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1d70: 72 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62  red for this Vdb
1d80: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1d90: 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69  e. It is conveni
1da0: 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20  ent to use a .  
1db0: 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63  ** vdbe memory c
1dc0: 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68  ell to manage th
1dd0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1de0: 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72  ion required for
1df0: 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73   a.  ** VdbeCurs
1e00: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  or structure for
1e10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1e20: 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a  easons:.  **.  *
1e30: 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20  *   * Sometimes 
1e40: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61  cursor numbers a
1e50: 72 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f  re used for a co
1e60: 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e  uple of differen
1e70: 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f  t.  **     purpo
1e80: 73 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72  ses in a vdbe pr
1e90: 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65  ogram. The diffe
1ea0: 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20  rent uses might 
1eb0: 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20  require.  **    
1ec0: 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64   different sized
1ed0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65   allocations. Me
1ee0: 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69  mory cells provi
1ef0: 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a  de growable.  **
1f00: 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73       allocations
1f10: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  ..  **.  **   * 
1f20: 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c  When using ENABL
1f30: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
1f40: 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ENT, memory cell
1f50: 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a   buffers can.  *
1f60: 2a 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c  *     be freed l
1f70: 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71  azily via the sq
1f80: 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
1f90: 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73  mory() API. This
1fa0: 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69  .  **     minimi
1fb0: 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  zes the number o
1fc0: 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d  f malloc calls m
1fd0: 61 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65  ade by the syste
1fe0: 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  m..  **.  ** The
1ff0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 66 6f 72   memory cell for
2000: 20 63 75 72 73 6f 72 20 30 20 69 73 20 61 4d 65   cursor 0 is aMe
2010: 6d 5b 30 5d 2e 20 54 68 65 20 72 65 73 74 20 61  m[0]. The rest a
2020: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  re allocated fro
2030: 6d 0a 20 20 2a 2a 20 74 68 65 20 74 6f 70 20 6f  m.  ** the top o
2040: 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20 73  f the register s
2050: 70 61 63 65 2e 20 20 43 75 72 73 6f 72 20 31 20  pace.  Cursor 1 
2060: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
2070: 6d 2d 31 5d 2e 0a 20 20 2a 2a 20 43 75 72 73 6f  m-1]..  ** Curso
2080: 72 20 32 20 69 73 20 61 74 20 4d 65 6d 5b 70 2d  r 2 is at Mem[p-
2090: 3e 6e 4d 65 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f  >nMem-2]. And so
20a0: 20 66 6f 72 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d   forth..  */.  M
20b0: 65 6d 20 2a 70 4d 65 6d 20 3d 20 69 43 75 72 3e  em *pMem = iCur>
20c0: 30 20 3f 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  0 ? &p->aMem[p->
20d0: 6e 4d 65 6d 2d 69 43 75 72 5d 20 3a 20 70 2d 3e  nMem-iCur] : p->
20e0: 61 4d 65 6d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79  aMem;..  int nBy
20f0: 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  te;.  VdbeCursor
2100: 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79   *pCx = 0;.  nBy
2110: 74 65 20 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e  te = .      ROUN
2120: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2130: 72 73 6f 72 29 29 20 2b 20 32 2a 73 69 7a 65 6f  rsor)) + 2*sizeo
2140: 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 20 2b 20  f(u32)*nField + 
2150: 0a 20 20 20 20 20 20 28 65 43 75 72 54 79 70 65  .      (eCurType
2160: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 3f  ==CURTYPE_BTREE?
2170: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2180: 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20 20  orSize():0);..  
2190: 61 73 73 65 72 74 28 20 69 43 75 72 3e 3d 30 20  assert( iCur>=0 
21a0: 26 26 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  && iCur<p->nCurs
21b0: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
21c0: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 20 2f 2a  pCsr[iCur] ){ /*
21d0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
21e0: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 73 71 6c 69  FALSE*/.    sqli
21f0: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
2200: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
2210: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
2220: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2230: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2240: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2250: 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
2260: 70 4d 65 6d 2c 20 6e 42 79 74 65 29 20 29 7b 0a  pMem, nByte) ){.
2270: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
2280: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
2290: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
22a0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c  .    memset(pCx,
22b0: 20 30 2c 20 6f 66 66 73 65 74 6f 66 28 56 64 62   0, offsetof(Vdb
22c0: 65 43 75 72 73 6f 72 2c 70 41 6c 74 43 75 72 73  eCursor,pAltCurs
22d0: 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65  or));.    pCx->e
22e0: 43 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79  CurType = eCurTy
22f0: 70 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62  pe;.    pCx->iDb
2300: 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d   = iDb;.    pCx-
2310: 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64  >nField = nField
2320: 3b 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73  ;.    pCx->aOffs
2330: 65 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65  et = &pCx->aType
2340: 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66  [nField];.    if
2350: 28 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ( eCurType==CURT
2360: 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
2370: 20 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73     pCx->uc.pCurs
2380: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2390: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
23a0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
23b0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
23c0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
23d0: 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  eld];.      sqli
23e0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
23f0: 72 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  ro(pCx->uc.pCurs
2400: 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2410: 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a   return pCx;.}..
2420: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2430: 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74  vert a value int
2440: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2450: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65  esentation if we
2460: 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69   can.** do so wi
2470: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e  thout loss of in
2480: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f  formation.  In o
2490: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
24a0: 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f  he string.** loo
24b0: 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ks like a number
24c0: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74  , convert it int
24d0: 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  o a number.  If 
24e0: 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c  it does not.** l
24f0: 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  ook like a numbe
2500: 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e  r, leave it alon
2510: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
2520: 62 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20  bTryForInt flag 
2530: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78  is true, then ex
2540: 74 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61  tra effort is ma
2550: 64 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e  de to give.** an
2560: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2570: 6e 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67  ntation.  String
2580: 73 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65  s that look like
2590: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a   floating point.
25a0: 2a 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68  ** values but wh
25b0: 69 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63  ich have no frac
25c0: 74 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74  tional component
25d0: 20 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30   (example: '48.0
25e0: 30 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65  0').** will have
25f0: 20 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65   a MEM_Int repre
2600: 73 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62  sentation when b
2610: 54 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75  TryForInt is tru
2620: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79  e..**.** If bTry
2630: 46 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c  ForInt is false,
2640: 20 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70   then if the inp
2650: 75 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  ut string contai
2660: 6e 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20  ns a decimal.** 
2670: 70 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e  point or exponen
2680: 74 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74  tial notation, t
2690: 68 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c  he result is onl
26a0: 79 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e  y MEM_Real, even
26b0: 0a 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20  .** if there is 
26c0: 61 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72  an exact integer
26d0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
26e0: 6f 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e  of the quantity.
26f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2700: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2710: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20  nity(Mem *pRec, 
2720: 69 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b  int bTryForInt){
2730: 0a 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65  .  double rValue
2740: 3b 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a  ;.  i64 iValue;.
2750: 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d    u8 enc = pRec-
2760: 3e 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  >enc;.  assert( 
2770: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28  (pRec->flags & (
2780: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c  MEM_Str|MEM_Int|
2790: 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f  MEM_Real))==MEM_
27a0: 53 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  Str );.  if( sql
27b0: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
27c0: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
27d0: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
27e0: 74 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73  turn;.  if( 0==s
27f0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65  qlite3Atoi64(pRe
2800: 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70  c->z, &iValue, p
2810: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a  Rec->n, enc) ){.
2820: 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20      pRec->u.i = 
2830: 69 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  iValue;.    pRec
2840: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49  ->flags |= MEM_I
2850: 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  nt;.  }else{.   
2860: 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61   pRec->u.r = rVa
2870: 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66  lue;.    pRec->f
2880: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
2890: 3b 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f  ;.    if( bTryFo
28a0: 72 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64  rInt ) sqlite3Vd
28b0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
28c0: 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 2f  y(pRec);.  }.  /
28d0: 2a 20 54 45 58 54 2d 3e 4e 55 4d 45 52 49 43 20  * TEXT->NUMERIC 
28e0: 69 73 20 6d 61 6e 79 2d 3e 6f 6e 65 2e 20 20 48  is many->one.  H
28f0: 65 6e 63 65 2c 20 69 74 20 69 73 20 69 6d 70 6f  ence, it is impo
2900: 72 74 61 6e 74 20 74 6f 20 69 6e 76 61 6c 69 64  rtant to invalid
2910: 61 74 65 20 74 68 65 0a 20 20 2a 2a 20 73 74 72  ate the.  ** str
2920: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2930: 6f 6e 20 61 66 74 65 72 20 63 6f 6d 70 75 74 69  on after computi
2940: 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 65 71 75  ng a numeric equ
2950: 69 76 61 6c 65 6e 74 2c 20 62 65 63 61 75 73 65  ivalent, because
2960: 20 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e 67   the.  ** string
2970: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2980: 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 74 68 65  might not be the
2990: 20 63 61 6e 6f 6e 69 63 61 6c 20 72 65 70 72 65   canonical repre
29a0: 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68  sentation for th
29b0: 65 0a 20 20 2a 2a 20 6e 75 6d 65 72 69 63 20 76  e.  ** numeric v
29c0: 61 6c 75 65 2e 20 20 54 69 63 6b 65 74 20 5b 33  alue.  Ticket [3
29d0: 34 33 36 33 34 39 34 32 64 64 35 34 61 62 35 37  43634942dd54ab57
29e0: 62 37 30 32 34 5d 20 32 30 31 38 2d 30 31 2d 33  b7024] 2018-01-3
29f0: 31 2e 20 2a 2f 0a 20 20 70 52 65 63 2d 3e 66 6c  1. */.  pRec->fl
2a00: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b  ags &= ~MEM_Str;
2a10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
2a20: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
2a30: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
2a40: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
2a50: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
2a60: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2a70: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2a80: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2a90: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2aa0: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2ab0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2ac0: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2ad0: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
2ae0: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
2af0: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
2b00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
2b10: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
2b20: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
2b30: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
2b40: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
2b50: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
2b60: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2b70: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2b80: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2b90: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2ba0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2bb0: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2bc0: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2bd0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2be0: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
2bf0: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
2c00: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
2c10: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
2c20: 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20  AFF_BLOB:.**    
2c30: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
2c40: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
2c50: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
2c60: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2c70: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2c80: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2c90: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2ca0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2cb0: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2cc0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2cd0: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
2ce0: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
2cf0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
2d00: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
2d10: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e  .  if( affinity>
2d20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
2d30: 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72  RIC ){.    asser
2d40: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
2d50: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
2d60: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2d70: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2d80: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2d90: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2da0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2db0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2dc0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
2dd0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2de0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2df0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
2e00: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
2e10: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
2e20: 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
2e30: 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e  MEM_Str ) applyN
2e40: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2e50: 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65  Rec,1);.      }e
2e60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
2e70: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2e80: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2ea0: 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74  else if( affinit
2eb0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  y==SQLITE_AFF_TE
2ec0: 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c  XT ){.    /* Onl
2ed0: 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f  y attempt the co
2ee0: 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54  nversion to TEXT
2ef0: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
2f00: 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a  integer or real.
2f10: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
2f20: 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20  ation (blob and 
2f30: 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20  NULL do not get 
2f40: 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e  converted) but n
2f50: 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20  o string.    ** 
2f60: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2f70: 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72   It would be har
2f80: 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74 20  mless to repeat 
2f90: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2fa0: 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65 20  f .    ** there 
2fb0: 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74 72  is already a str
2fc0: 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74 20  ing rep, but it 
2fd0: 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f 20  is pointless to 
2fe0: 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20 20  waste those.    
2ff0: 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20 2a  ** CPU cycles. *
3000: 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52  /.    if( 0==(pR
3010: 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74  ec->flags&MEM_St
3020: 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41  r) ){ /*OPTIMIZA
3030: 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
3040: 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63 2d        if( (pRec-
3050: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
3060: 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20  |MEM_Int)) ){.  
3070: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3080: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52  eMemStringify(pR
3090: 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20  ec, enc, 1);.   
30a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
30b0: 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  Rec->flags &= ~(
30c0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
30d0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
30e0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
30f0: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
3100: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
3110: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
3120: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
3130: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
3140: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
3150: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
3160: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
3170: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
3180: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
3190: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
31a0: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
31b0: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
31c0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
31d0: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
31e0: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
31f0: 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ument..*/.int sq
3200: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65  lite3_value_nume
3210: 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33  ric_type(sqlite3
3220: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
3230: 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71 6c   int eType = sql
3240: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
3250: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54 79  pVal);.  if( eTy
3260: 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20  pe==SQLITE_TEXT 
3270: 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d  ){.    Mem *pMem
3280: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
3290: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
32a0: 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29  ffinity(pMem, 0)
32b0: 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73 71  ;.    eType = sq
32c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
32d0: 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65  (pVal);.  }.  re
32e0: 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f  turn eType;.}../
32f0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
3300: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
3310: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
3320: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
3330: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
3340: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
3350: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
3360: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
3370: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
3380: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
3390: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
33a0: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
33b0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
33c0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
33d0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
33e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75  }../*.** pMem cu
33f0: 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c  rrently only hol
3400: 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70 65  ds a string type
3410: 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c 4f   (or maybe a BLO
3420: 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a  B that we can.**
3430: 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61 20   interpret as a 
3440: 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61 6e  string if we wan
3450: 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20  t to).  Compute 
3460: 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  its correspondin
3470: 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79 70  g.** numeric typ
3480: 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20 20  e, if has one.  
3490: 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e  Set the pMem->u.
34a0: 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20  r and pMem->u.i 
34b0: 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64  fields.** accord
34c0: 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ingly..*/.static
34d0: 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e   u16 SQLITE_NOIN
34e0: 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65  LINE computeNume
34f0: 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65  ricType(Mem *pMe
3500: 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28 70  m){.  assert( (p
3510: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3520: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
3530: 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
3540: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3550: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3560: 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  b))!=0 );.  if( 
3570: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65 6d  sqlite3AtoF(pMem
3580: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c  ->z, &pMem->u.r,
3590: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
35a0: 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  enc)==0 ){.    r
35b0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
35c0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  f( sqlite3Atoi64
35d0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
35e0: 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.i, pMem->n, p
35f0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
3600: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49      return MEM_I
3610: 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  nt;.  }.  return
3620: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a   MEM_Real;.}../*
3630: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
3640: 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72 20  umeric type for 
3650: 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d  pMem, either MEM
3660: 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c  _Int or MEM_Real
3670: 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e   or both or.** n
3680: 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c  one.  .**.** Unl
3690: 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ike applyNumeric
36a0: 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69 73  Affinity(), this
36b0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f   routine does no
36c0: 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66  t modify pMem->f
36d0: 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20  lags..** But it 
36e0: 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75  does set pMem->u
36f0: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3700: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
3710: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
3720: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
3730: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
3740: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3750: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
3760: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
3770: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3780: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d  t|MEM_Real);.  }
3790: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
37a0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
37b0: 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72  M_Blob) ){.    r
37c0: 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d  eturn computeNum
37d0: 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a  ericType(pMem);.
37e0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
37f0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
3800: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
3810: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
3820: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3830: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
3840: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
3850: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
3860: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
3870: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
3880: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
3890: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
38a0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
38b0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
38c0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
38d0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
38e0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
38f0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
3900: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
3910: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
3920: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
3930: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
3940: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
3950: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3960: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
3970: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
3980: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3990: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
39a0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
39b0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
39c0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
39d0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
39e0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
39f0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3a00: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3a10: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3a20: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3a30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3a40: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3a50: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3a60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3a70: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  c = 's';.    }. 
3a80: 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 63     *(zCsr++) = c
3a90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3aa0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3ab0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3ac0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3ad0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3ae0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3af0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3b00: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3b10: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3b20: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3b30: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3b40: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3b50: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3b60: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3b70: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3b80: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3b90: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3ba0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3bb0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3bc0: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3bd0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3be0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3bf0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3c00: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
3c10: 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66 28  ) = ']';.    if(
3c20: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3c30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3c40: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3c50: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3c60: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3c70: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3c80: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3c90: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
3ca0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
3cb0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3cc0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3cd0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3ce0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3cf0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3d00: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3d10: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3d20: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3d30: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3d40: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3d50: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3d60: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3d70: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3d80: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3d90: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3da0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3db0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3dc0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3dd0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3de0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3df0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3e00: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3e10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3e20: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3e30: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3e40: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3e50: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3e60: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3e70: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3e80: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3e90: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3ea0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3eb0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3ec0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3ed0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3ee0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3ef0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3f00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3f10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3f20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3f30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3f40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3f50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3f60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3f70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3f80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3f90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3fa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3fb0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3fc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3fd0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3fe0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3ff0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
4000: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
4010: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
4020: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
4030: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
4040: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
4050: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
4060: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
4070: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
4080: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
4090: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
40a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
40b0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d 3e  {.    printf(p->
40c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
40d0: 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67   ? " NULL-nochng
40e0: 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  " : " NULL");.  
40f0: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
4100: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
4110: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
4120: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
4130: 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a 25     printf(" si:%
4140: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
4150: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
4160: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
4170: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a  .    printf(" i:
4180: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
4190: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
41a0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
41b0: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
41c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
41d0: 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  al ){.    printf
41e0: 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72  (" r:%g", p->u.r
41f0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
4200: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
4210: 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20   MEM_RowSet ){. 
4220: 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77     printf(" (row
4230: 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b  set)");.  }else{
4240: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32  .    char zBuf[2
4250: 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  00];.    sqlite3
4260: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
4270: 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20  nt(p, zBuf);.   
4280: 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a   printf(" %s", z
4290: 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Buf);.  }.  if( 
42a0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  p->flags & MEM_S
42b0: 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66 28  ubtype ) printf(
42c0: 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32 78  " subtype=0x%02x
42d0: 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29 3b  ", p->eSubtype);
42e0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
42f0: 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e 74  egisterTrace(int
4300: 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a   iReg, Mem *p){.
4310: 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64    printf("REG[%d
4320: 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20  ] = ", iReg);.  
4330: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29  memTracePrint(p)
4340: 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29  ;.  printf("\n")
4350: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
4360: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
4370: 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  s(p);.}.#endif..
4380: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4390: 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45  BUG.#  define RE
43a0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
43b0: 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53  ) if(db->flags&S
43c0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
43d0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c  registerTrace(R,
43e0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
43f0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
4400: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
4410: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4420: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
4430: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
4440: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
4450: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
4460: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
4470: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
4480: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
4490: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
44a0: 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  "..#endif..#ifnd
44b0: 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ef NDEBUG./*.** 
44c0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
44d0: 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f   only called fro
44e0: 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65  m within an asse
44f0: 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e  rt() expression.
4500: 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68   It.** checks th
4510: 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e  at the sqlite3.n
4520: 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69  Transaction vari
4530: 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c  able is correctl
4540: 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20  y set to.** the 
4550: 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  number of non-tr
4560: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
4570: 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ints currently i
4580: 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64  n the .** linked
4590: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
45a0: 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  t sqlite3.pSavep
45b0: 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61  oint..** .** Usa
45c0: 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  ge:.**.**     as
45d0: 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
45e0: 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
45f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
4600: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
4610: 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  nt(sqlite3 *db){
4620: 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20  .  int n = 0;.  
4630: 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20  Savepoint *p;.  
4640: 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70  for(p=db->pSavep
4650: 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e  oint; p; p=p->pN
4660: 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65  ext) n++;.  asse
4670: 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76  rt( n==(db->nSav
4680: 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54  epoint + db->isT
4690: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
46a0: 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e  int) );.  return
46b0: 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1;.}.#endif../*
46c0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72  .** Return the r
46d0: 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e  egister of pOp->
46e0: 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70  p2 after first p
46f0: 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62  reparing it to b
4700: 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e  e.** overwritten
4710: 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72   with an integer
4720: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
4730: 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  c SQLITE_NOINLIN
4740: 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65  E Mem *out2Prere
4750: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d  leaseWithClear(M
4760: 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c  em *pOut){.  sql
4770: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
4780: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74  ll(pOut);.  pOut
4790: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
47a0: 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74  t;.  return pOut
47b0: 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a  ;.}.static Mem *
47c0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56  out2Prerelease(V
47d0: 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a  dbe *p, VdbeOp *
47e0: 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75  pOp){.  Mem *pOu
47f0: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  t;.  assert( pOp
4800: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
4810: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
4820: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
4830: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
4840: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
4850: 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
4860: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
4870: 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
4880: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20  ynamic(pOut) ){ 
4890: 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
48a0: 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65  F-FALSE*/.    re
48b0: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
48c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
48d0: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
48e0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
48f0: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4900: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4910: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4920: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4930: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4940: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
4950: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
4960: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
4970: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4980: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49a0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
49b0: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
49c0: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
49d0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
49e0: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
49f0: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4a00: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4a10: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4a20: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4a30: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4a40: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
4a50: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
4a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
4a70: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
4a80: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
4a90: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  p */.#endif.#ifd
4aa0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4ab0: 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65    int nExtraDele
4ac0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  te = 0;      /* 
4ad0: 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45  Verifies FORDELE
4ae0: 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  TE and AUXDELETE
4af0: 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66   flags */.#endif
4b00: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4b10: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4b20: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4b30: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4b40: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
4b50: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
4b60: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
4b70: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
4b80: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
4b90: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
4ba0: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
4bb0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
4bc0: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
4bd0: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
4be0: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
4bf0: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4c00: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4c10: 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f  f last compariso
4c20: 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  n */.  unsigned 
4c30: 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20  nVmStep = 0;    
4c40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
4c50: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73  irtual machine s
4c60: 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  teps */.#ifndef 
4c70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4c80: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4c90: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
4ca0: 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49 6e  ssLimit;   /* In
4cb0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
4cc0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
4cd0: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
4ce0: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
4cf0: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
4d00: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4d10: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
4d20: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4d30: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4d40: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4d50: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4d70: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4d80: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
4d90: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4da0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
4db0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
4dc0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
4dd0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
4de0: 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66 20  erand */.#ifdef 
4df0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4e00: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4e10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4e20: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4e30: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4e40: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4e50: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4e60: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4e70: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4e80: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4e90: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4ea0: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4eb0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4ec0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4ed0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4ee0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4ef0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4f00: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4f10: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4f20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4f30: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4f40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4f50: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4f60: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4f70: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4f80: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4f90: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4fa0: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4fb0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4fc0: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4fd0: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4fe0: 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d    p->iCurrentTim
4ff0: 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
5000: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
5010: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
5020: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
5030: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
5040: 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31   0;.  if( db->u1
5050: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
5060: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
5070: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  to_interrupt;.  
5080: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
5090: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65  ceSql(p);.#ifnde
50a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
50b0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
50c0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
50d0: 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69  ess ){.    u32 i
50e0: 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e  Prior = p->aCoun
50f0: 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
5100: 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a  TATUS_VM_STEP];.
5110: 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20      assert( 0 < 
5120: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5130: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5140: 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72  sLimit = db->nPr
5150: 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72  ogressOps - (iPr
5160: 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72  ior % db->nProgr
5170: 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73 65  essOps);.  }else
5180: 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  {.    nProgressL
5190: 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66  imit = 0xfffffff
51a0: 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  f;.  }.#endif.#i
51b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
51c0: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
51d0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
51e0: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
51f0: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
5200: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
5210: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
5220: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
5230: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
5240: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
5250: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
5260: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5270: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
5280: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
5290: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
52a0: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
52b0: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
52c0: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
52d0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
52e0: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
52f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5300: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5310: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
5320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5330: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
5340: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
5350: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
5360: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
5370: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
5380: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
5390: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
53a0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
53b0: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
53c0: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
53d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
53e0: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
53f0: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
5400: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
5410: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
5420: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
5430: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
5440: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
5450: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
5460: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
5470: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
5480: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
5490: 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b  .  for(pOp=&aOp[
54a0: 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b  p->pc]; 1; pOp++
54b0: 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73  ){.    /* Errors
54c0: 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62 79   are detected by
54d0: 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f   individual opco
54e0: 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d  des, with an imm
54f0: 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75  ediate.    ** ju
5500: 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65  mps to abort_due
5510: 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20  _to_error. */.  
5520: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
5530: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20  LITE_OK );..    
5540: 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70  assert( pOp>=aOp
5550: 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
5560: 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44  nOp]);.#ifdef VD
5570: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73  BE_PROFILE.    s
5580: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e 50  tart = sqlite3NP
5590: 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c 69  rofileCnt ? sqli
55a0: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3a  te3NProfileCnt :
55b0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
55c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
55d0: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
55e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
55f0: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5600: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5610: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5620: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5630: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
5640: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
5650: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
5660: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
5670: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5680: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
5690: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
56a0: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
56b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
56c0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
56d0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
56e0: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
56f0: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5700: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5710: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5720: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5730: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
5740: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
5750: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
5760: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
5770: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
5780: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
5790: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
57a0: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
57b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
57c0: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
57d0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
57e0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
57f0: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5800: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5810: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5820: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5830: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
5840: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
5850: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
5860: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5870: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
5880: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
5890: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
58a0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
58b0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
58c0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
58d0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
58e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
58f0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5900: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5910: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5920: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5930: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5940: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5950: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
5960: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5970: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5980: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5990: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
59a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
59b0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
59c0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
59d0: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
59e0: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
59f0: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5a00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5a10: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5a20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5a30: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
5a40: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5a50: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5a60: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5a70: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
5a80: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5a90: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5aa0: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5ab0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5ac0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5ad0: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5ae0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5af0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5b00: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5b10: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5b20: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5b30: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5b40: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5b50: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
5b60: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5b70: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
5b80: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
5b90: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5ba0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5bb0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5bc0: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5bd0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5be0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5bf0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5c00: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5c10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5c20: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5c30: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
5c40: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5c50: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5c60: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5c70: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
5c80: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5c90: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5ca0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5cb0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5cc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5cd0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5ce0: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5cf0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5d00: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5d10: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5d20: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5d30: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5d40: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
5d50: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5d60: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5d70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
5d80: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
5d90: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5da0: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5db0: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5dc0: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
5dd0: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5de0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5df0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e40: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5e50: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5e60: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5e70: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5e80: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5e90: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5ea0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5eb0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5ec0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5ed0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5ee0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5ef0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5f00: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5f10: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5f20: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5f30: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5f40: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5f50: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5f60: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5f70: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5f80: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5f90: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5fa0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5fb0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5fc0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5fd0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5fe0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5ff0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
6000: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
6010: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
6020: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
6030: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
6040: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
6050: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
6060: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
6070: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
6080: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
6090: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
60a0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
60b0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
60c0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
60d0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
60e0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
60f0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
6100: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
6110: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
6120: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
6130: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
6140: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
6150: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
6160: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
6170: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
6180: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
6190: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
61a0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
61b0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
61c0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
61d0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
61e0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
61f0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
6200: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
6210: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
6220: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
6230: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
6240: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
6250: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
6260: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
6270: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
6280: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
6290: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
62a0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
62b0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
62c0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
62d0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
62e0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
62f0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
6300: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
6310: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
6320: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
6330: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
6340: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
6350: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
6360: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
6370: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
6380: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
6390: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
63a0: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
63b0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
63c0: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
63d0: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
63e0: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
63f0: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6400: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6410: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6420: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6430: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
6440: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
6450: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
6460: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
6470: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
6480: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
6490: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
64a0: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
64b0: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
64c0: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
64d0: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
64e0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
64f0: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6500: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6510: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6520: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6530: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6540: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
6550: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
6560: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
6570: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
6580: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
6590: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
65a0: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
65b0: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
65c0: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
65d0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
65e0: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
65f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6600: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6610: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6620: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6630: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
6640: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
6650: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
6660: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
6670: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
6680: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
6690: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
66a0: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
66b0: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
66c0: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
66d0: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
66e0: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
66f0: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6700: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6710: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6730: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
6740: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
6750: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
6760: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6770: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
6780: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
6790: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
67a0: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
67b0: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
67c0: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
67d0: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
67e0: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
67f0: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6800: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6810: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6820: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6830: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
6840: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
6850: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
6860: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
6870: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
6880: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
6890: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
68a0: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
68b0: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
68c0: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
68d0: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
68e0: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
68f0: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6900: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6910: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6920: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6930: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
6940: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
6950: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
6960: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
6970: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
6980: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
6990: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
69a0: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
69b0: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
69c0: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
69d0: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
69e0: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
69f0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6a00: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6a10: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6a20: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6a30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
6a40: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
6a50: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
6a60: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
6a70: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
6a80: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
6a90: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6aa0: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6ab0: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6ac0: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6ad0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6ae0: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6af0: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6b00: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6b10: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6b20: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6b30: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
6b40: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
6b50: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
6b60: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
6b70: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
6b80: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
6b90: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6ba0: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
6bb0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
6bc0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
6bd0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
6be0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6bf0: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6c00: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6c10: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6c20: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6c30: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
6c40: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
6c50: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
6c60: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
6c70: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
6c80: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
6c90: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6ca0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6cb0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6cc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6cd0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6ce0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6cf0: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6d00: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6d10: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6d20: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6d30: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6d40: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6d60: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6d70: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6d80: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6d90: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6da0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6db0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6dc0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6dd0: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6de0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6df0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6e00: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6e10: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6e20: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6e30: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6e40: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6e50: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6e60: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6e70: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6e80: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6e90: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6ea0: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6eb0: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6ec0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6ed0: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6ee0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6ef0: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6f00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6f10: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6f20: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6f30: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6f40: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6f50: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6f60: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6f70: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6f80: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6fa0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6fb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6fc0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6fd0: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6fe0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6ff0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
7000: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
7010: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
7020: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
7030: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
7040: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7050: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
7060: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
7070: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
7080: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
7090: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
70a0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
70b0: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
70c0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
70d0: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
70e0: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
70f0: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
7100: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
7110: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
7120: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
7130: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
7140: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
7150: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
7160: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
7170: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
7180: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
7190: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
71a0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
71b0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
71c0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
71d0: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
71e0: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
71f0: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
7200: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
7210: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
7220: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7230: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
7240: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
7250: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
7260: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
7270: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
7280: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
7290: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
72a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
72b0: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
72c0: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
72d0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
72e0: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
72f0: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7300: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7310: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7320: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7330: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
7340: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
7350: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7360: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
7370: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
7380: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
7390: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
73a0: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
73b0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
73c0: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
73d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
73e0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
73f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7400: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7410: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7420: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7430: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
7440: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7450: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
7460: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
7470: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
7480: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
7490: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
74a0: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
74b0: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
74c0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
74d0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
74e0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
74f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7500: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7510: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7520: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7530: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
7540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
7550: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
7560: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
7570: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
7580: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
7590: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
75a0: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
75b0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
75c0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
75d0: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
75e0: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
75f0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7600: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7610: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7620: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7630: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
7640: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
7650: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
7660: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
7670: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
7680: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
7690: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
76a0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
76b0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
76c0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
76d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
76e0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
76f0: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7700: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7710: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7720: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7730: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
7740: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7750: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
7760: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
7770: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
7780: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
7790: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
77a0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
77b0: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
77c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
77d0: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
77e0: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
77f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7800: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7810: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7820: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7830: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
7840: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
7850: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
7860: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
7870: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
7880: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
7890: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
78a0: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
78b0: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
78c0: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
78d0: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
78e0: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
78f0: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7900: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7910: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7920: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7930: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
7940: 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
7950: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
7960: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p2==OE_Abort
7970: 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41   ){ sqlite3VdbeA
7980: 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70  ssertAbortable(p
7990: 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  ); }.#endif.  if
79a0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
79b0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
79c0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
79d0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
79e0: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
79f0: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
7a00: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
7a10: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
7a20: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
7a30: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
7a40: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
7a50: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
7a60: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
7a70: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
7a80: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
7a90: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
7aa0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
7ab0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
7ac0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
7ad0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
7ae0: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
7af0: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
7b00: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
7b10: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
7b20: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
7b30: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
7b40: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
7b50: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
7b60: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
7b70: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
7b80: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
7b90: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
7ba0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
7bb0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
7bc0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
7bd0: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
7be0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
7bf0: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
7c00: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
7c10: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
7c20: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
7c30: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
7c40: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
7c50: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
7c60: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
7c70: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
7c80: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
7c90: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
7ca0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
7cb0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
7cc0: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
7cd0: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
7ce0: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
7cf0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
7d00: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7d10: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
7d20: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7d30: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
7d40: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7d50: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7d60: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
7d70: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
7d80: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
7d90: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
7da0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
7db0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
7dc0: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
7dd0: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
7de0: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
7df0: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
7e00: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
7e10: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
7e20: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
7e30: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
7e40: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
7e50: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
7e60: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
7e70: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
7e80: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
7e90: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
7ea0: 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61  alt: {.  VdbeFra
7eb0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
7ec0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
7ed0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
7ee0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
7ef0: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
7f00: 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b  >p2==OE_Abort ){
7f10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73 65   sqlite3VdbeAsse
7f20: 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20  rtAbortable(p); 
7f30: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
7f40: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
7f50: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
7f60: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
7f70: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
7f80: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
7f90: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
7fa0: 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65  e. */.    pFrame
7fb0: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
7fc0: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
7fd0: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
7fe0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
7ff0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8000: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
8010: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
8020: 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  cx = sqlite3Vdbe
8030: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
8040: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  ame);.    if( pO
8050: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
8060: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
8070: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
8080: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
8090: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
80a0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
80b0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
80c0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
80d0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
80e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
80f0: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
8100: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
8110: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
8120: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
8130: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
8140: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
8150: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
8160: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
8170: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
8180: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
8190: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
81a0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
81b0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
81c0: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
81d0: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
81e0: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
81f0: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
8200: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
8210: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
8220: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
8230: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
8240: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
8250: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
8260: 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73 65  pc = pcx;.  asse
8270: 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29  rt( pOp->p5<=4 )
8280: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
8290: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
82a0: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
82b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
82c0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
82d0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
82e0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8320: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8330: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8340: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8350: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8360: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8370: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
8380: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
8390: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
83a0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
83b0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
83c0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
83d0: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
83e0: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
83f0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
8400: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
8410: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8420: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8430: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8440: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8450: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8470: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
8480: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8490: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
84a0: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
84b0: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
84c0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
84d0: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
84e0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
84f0: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
8500: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8510: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8520: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8530: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8540: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8550: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8560: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
8570: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
8580: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8590: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
85a0: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
85b0: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
85c0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
85d0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
85e0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
85f0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
8600: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
8610: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8620: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8630: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8640: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8650: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8660: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8670: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8680: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8690: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
86a0: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
86b0: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
86c0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
86d0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
86e0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
86f0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8700: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8710: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8720: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8740: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8750: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8760: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8770: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8780: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8790: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
87a0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
87b0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
87c0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
87d0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
87e0: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
87f0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8800: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
8810: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8820: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8830: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8840: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8850: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8860: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8870: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8880: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8890: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
88a0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
88b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
88c0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
88d0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
88e0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
88f0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
8910: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8920: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8930: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8940: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8950: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8960: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8970: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8980: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8990: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
89a0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
89b0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
89c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
89d0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
89e0: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
89f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8a00: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
8a10: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8a20: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8a30: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8a40: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8a50: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8a60: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8a70: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8a80: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8a90: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8aa0: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8ab0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
8ac0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
8ad0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
8ae0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
8af0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
8b00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
8b10: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8b20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8b30: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8b40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8b50: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8b60: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8b70: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8b80: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8b90: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8ba0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8bb0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
8bc0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8bd0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
8be0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8bf0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8c00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8c10: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8c20: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8c30: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8c40: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
8c50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8c60: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
8c70: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
8c80: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8c90: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8ca0: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8cb0: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
8cc0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
8cd0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
8ce0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
8cf0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
8d00: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
8d10: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8d20: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8d30: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8d40: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8d50: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8d60: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8d70: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8d80: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8d90: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8da0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8db0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8dc0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8dd0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8de0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8df0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
8e00: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
8e10: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
8e20: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8e30: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8e40: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8e50: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8e60: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
8e70: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8e80: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
8e90: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8ea0: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
8eb0: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
8ec0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
8ed0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
8ee0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8ef0: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
8f00: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
8f10: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
8f20: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
8f30: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
8f40: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
8f50: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
8f60: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8f70: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
8f80: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
8f90: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
8fa0: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
8fb0: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
8fc0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
8fd0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
8fe0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8ff0: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
9000: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
9010: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
9020: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
9030: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
9040: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
9050: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
9060: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
9070: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
9080: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
9090: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
90a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
90b0: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
90c0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
90d0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
90e0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
90f0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9100: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
9110: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
9120: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
9130: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
9140: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
9150: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
9160: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9170: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9180: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9190: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
91a0: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
91b0: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
91c0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
91d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
91e0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
91f0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
9200: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
9210: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
9220: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
9230: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
9240: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
9250: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
9260: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
9270: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
9280: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
9290: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
92a0: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
92b0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
92c0: 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d  opsis: r[P2..P3]
92d0: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
92e0: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
92f0: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
9300: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
9310: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
9320: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
9330: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
9340: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
9350: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
9360: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
9370: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
9380: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
9390: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
93a0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
93b0: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
93c0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
93d0: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
93e0: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
93f0: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
9400: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
9410: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
9420: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
9430: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
9440: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
9450: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
9460: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
9470: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
9480: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
9490: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
94a0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74  nullFlag;.  pOut
94b0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
94c0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74  e(p, pOp);.  cnt
94d0: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
94e0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
94f0: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
9500: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9510: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9520: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
9530: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
9540: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
9550: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75   MEM_Null;.  pOu
9560: 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c  t->n = 0;.  whil
9570: 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20  e( cnt>0 ){.    
9580: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41  pOut++;.    memA
9590: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
95a0: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
95b0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
95c0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74  (pOut);.    pOut
95d0: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
95e0: 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20  ag;.    pOut->n 
95f0: 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a  = 0;.    cnt--;.
9600: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
9610: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e  /* Opcode: SoftN
9620: 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ull P1 * * * *.*
9630: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
9640: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74  ]=NULL.**.** Set
9650: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9660: 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e  have the value N
9670: 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74  ULL as seen by t
9680: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
9690: 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  .** instruction,
96a0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65   but do not free
96b0: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
96c0: 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63  lob memory assoc
96d0: 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68  iated with.** th
96e0: 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74  e register, so t
96f0: 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65  hat if the value
9700: 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72   was a string or
9710: 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a   blob that was.*
9720: 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70  * previously cop
9730: 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f  ied using OP_SCo
9740: 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77  py, the copies w
9750: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
9760: 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73  be valid..*/.cas
9770: 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b  e OP_SoftNull: {
9780: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9790: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
97a0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
97b0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
97c0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
97d0: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p1];.  pOut->fl
97e0: 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61  ags = (pOut->fla
97f0: 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs&~(MEM_Undefin
9800: 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29  ed|MEM_AffMask))
9810: 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65  |MEM_Null;.  bre
9820: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9830: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
9840: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9850: 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50   r[P2]=P4 (len=P
9860: 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  1).**.** P4 poin
9870: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
9880: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
9890: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
98a0: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
98b0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
98c0: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
98d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
98e0: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
98f0: 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45  Op->p1 <= SQLITE
9900: 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20  _MAX_LENGTH );. 
9910: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9920: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
9930: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9940: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
9950: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
9960: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
9970: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
9980: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9990: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
99a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
99b0: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
99c0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
99d0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72  opsis: r[P2]=par
99e0: 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a  ameter(P1,P4).**
99f0: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
9a00: 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64   values of bound
9a10: 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e   parameter P1 in
9a20: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  to register P2.*
9a30: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
9a40: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
9a50: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
9a60: 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20  pears in P4..** 
9a70: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
9a80: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
9a90: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
9aa0: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
9ab0: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
9ac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9ad0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
9ae0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9af0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
9b00: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
9b10: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9b20: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
9b30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9b40: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
9b50: 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69  p4.z==sqlite3VLi
9b60: 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70  stNumToName(p->p
9b70: 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29  VList,pOp->p1) )
9b80: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
9b90: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
9ba0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
9bb0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
9bc0: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
9bd0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f  oo_big;.  }.  pO
9be0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9bf0: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
9c00: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9c10: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
9c20: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
9c30: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9c40: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9c50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9c60: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9c70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9c80: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9c90: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9ca0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
9cb0: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
9cc0: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
9cd0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
9ce0: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
9cf0: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
9d00: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
9d10: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
9d20: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
9d30: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9d40: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9d50: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9d60: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9d70: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9d80: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9d90: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9da0: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
9db0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9dc0: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
9dd0: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9de0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9df0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9e00: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9e10: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9e20: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9e30: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9e40: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9e50: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9e60: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9e70: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9e80: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9e90: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9ea0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
9eb0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9ec0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9ed0: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9ee0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9ef0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9f00: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9f10: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
9f20: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
9f30: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9f40: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9f50: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
9f60: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
9f70: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
9f80: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
9f90: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
9fa0: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
9fb0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9fc0: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
9fd0: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
9fe0: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
9ff0: 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20  pyFrom<pOut ){. 
a000: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
a010: 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32  yFrom += pOp->p2
a020: 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e   - p1;.    }.#en
a030: 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65  dif.    Deepheme
a040: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
a050: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
a060: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
a070: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
a080: 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  ut++;.  }while( 
a090: 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  --n );.  break;.
a0a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a0b0: 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  py P1 P2 P3 * *.
a0c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
a0d0: 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b  2@P3+1]=r[P1@P3+
a0e0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
a0f0: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
a100: 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f  s P1..P1+P3 into
a110: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
a120: 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  2+P3..**.** This
a130: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
a140: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
a150: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
a160: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
a170: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
a180: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
a190: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
a1a0: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
a1b0: 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e   OP_Copy: {.  in
a1c0: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
a1d0: 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  >p3;.  pIn1 = &a
a1e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
a1f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
a200: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
a210: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
a220: 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
a230: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
a240: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
a250: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
a260: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
a270: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
a280: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
a290: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
a2a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
a2b0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
a2c0: 46 72 6f 6d 20 3d 20 30 3b 0a 20 20 20 20 70 4f  From = 0;.    pO
a2d0: 75 74 2d 3e 69 54 61 62 43 6f 6c 48 61 73 68 20  ut->iTabColHash 
a2e0: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
a2f0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
a300: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
a310: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
a320: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
a330: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
a340: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
a350: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a360: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
a370: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
a380: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
a390: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
a3a0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
a3b0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a3c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a3d0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
a3e0: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
a3f0: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
a400: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
a410: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
a420: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
a430: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
a440: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
a450: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
a460: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
a470: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a480: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a490: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a4a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a4b0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a4c0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a4d0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a4e0: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a4f0: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a500: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a510: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a520: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a530: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a540: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a550: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a560: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a570: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a580: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a590: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a5a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a5b0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a5c0: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a5d0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a5e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a5f0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a600: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a610: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a620: 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e 70 53 63  EBUG.  pOut->pSc
a630: 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a  opyFrom = pIn1;.
a640: 20 20 70 4f 75 74 2d 3e 6d 53 63 6f 70 79 46 6c    pOut->mScopyFl
a650: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
a660: 73 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  s;.#endif.  brea
a670: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a680: 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a   IntCopy P1 P2 *
a690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a6a0: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a6b0: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
a6c0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
a6d0: 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
a6e0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
a6f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
a700: 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20  is an optimized 
a710: 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79  version of SCopy
a720: 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79   that works only
a730: 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20   for integer.** 
a740: 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  values..*/.case 
a750: 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20  OP_IntCopy: {   
a760: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
a770: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
a780: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
a790: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
a7a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
a7b0: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  0 );.  pOut = &a
a7c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a7d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a7e0: 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e  tInt64(pOut, pIn
a7f0: 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  1->u.i);.  break
a800: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a810: 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20  ResultRow P1 P2 
a820: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
a830: 73 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  s: output=r[P1@P
a840: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
a850: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
a860: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
a870: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
a880: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
a890: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
a8a0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
a8b0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
a8c0: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
a8d0: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
a8e0: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
a8f0: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
a900: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
a910: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
a920: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28  access to the r(
a930: 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20  P1)..r(P1+P2-1) 
a940: 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65  values as.** the
a950: 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a   result row..*/.
a960: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
a970: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
a980: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
a990: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
a9a0: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
a9b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a9c0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
a9d0: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
a9e0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
a9f0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a  >nCursor)+1 );..
aa00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
aa10: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
aa20: 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74  LBACK.  /* Run t
aa30: 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e  he progress coun
aa40: 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20  ter just before 
aa50: 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a  returning..  */.
aa60: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
aa70: 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d  ess!=0.   && nVm
aa80: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
aa90: 69 6d 69 74 20 0a 20 20 20 26 26 20 64 62 2d 3e  imit .   && db->
aaa0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
aab0: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
aac0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
aad0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
aae0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
aaf0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
ab00: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
ab10: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
ab20: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
ab30: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
ab40: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
ab50: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
ab60: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
ab70: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
ab80: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
ab90: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
aba0: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
abb0: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
abc0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
abd0: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
abe0: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
abf0: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
ac00: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
ac10: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
ac20: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
ac30: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
ac40: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
ac50: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
ac60: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
ac70: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
ac80: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
ac90: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
aca0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61  sqlite3.flags ma
acb0: 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44  sk, then .  ** D
acc0: 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  ML statements in
acd0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
ace0: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e   to return the n
acf0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20  umber of rows . 
ad00: 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   ** modified to 
ad10: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
ad20: 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74  s the only way t
ad30: 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20  hat a VM that.  
ad40: 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65  ** opens a state
ad50: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
ad60: 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73   may invoke this
ad70: 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20   opcode..  **.  
ad80: 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20  ** In case this 
ad90: 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d  is such a statem
ada0: 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73  ent, close any s
adb0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
adc0: 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  tion.  ** opened
add0: 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f   by this VM befo
ade0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e  re returning con
adf0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72  trol to the user
ae00: 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a  . This is to.  *
ae10: 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74  * ensure that st
ae20: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ae30: 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20  ions are always 
ae40: 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72  nested, not over
ae50: 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66  lapping..  ** If
ae60: 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d   the open statem
ae70: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent-transaction 
ae80: 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65  is not closed he
ae90: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65  re, then the use
aea0: 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20  r.  ** may step 
aeb0: 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20  another VM that 
aec0: 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74  opens its own st
aed0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
aee0: 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d  ion. This.  ** m
aef0: 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c  ay lead to overl
af00: 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  apping statement
af10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20   transactions.. 
af20: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61   **.  ** The sta
af30: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
af40: 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f  on is never a to
af50: 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74  p-level transact
af60: 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a  ion.  Hence.  **
af70: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c   the RELEASE cal
af80: 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65  l below can neve
af90: 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61  r fail..  */.  a
afa0: 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65  ssert( p->iState
afb0: 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66  ment==0 || db->f
afc0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
afd0: 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20  tRows );.  rc = 
afe0: 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65  sqlite3VdbeClose
aff0: 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56  Statement(p, SAV
b000: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b  EPOINT_RELEASE);
b010: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
b020: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f  QLITE_OK );..  /
b030: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
b040: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
b050: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
b060: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
b070: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
b080: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
b090: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
b0a0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
b0b0: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
b0c0: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
b0d0: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
b0e0: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
b0f0: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
b100: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
b110: 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e  * a side effect.
b120: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
b130: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
b140: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b150: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
b160: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
b170: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
b180: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
b190: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
b1a0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
b1b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
b1c0: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
b1d0: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
b1e0: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
b1f0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
b200: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
b210: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
b220: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
b230: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
b240: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b250: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
b260: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
b270: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
b280: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
b290: 20 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65    if( db->mTrace
b2a0: 20 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f   & SQLITE_TRACE_
b2b0: 52 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  ROW ){.    db->x
b2c0: 54 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41  Trace(SQLITE_TRA
b2d0: 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61  CE_ROW, db->pTra
b2e0: 63 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20  ceArg, p, 0);.  
b2f0: 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  }..  /* Return S
b300: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
b310: 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
b320: 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20  Op - aOp) + 1;. 
b330: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
b340: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
b350: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
b360: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
b370: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b380: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b390: 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P1].**.** Add
b3a0: 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67   the text in reg
b3b0: 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68  ister P1 onto th
b3c0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
b3d0: 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  t in.** register
b3e0: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
b3f0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b400: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b410: 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20  ither the P1 or 
b420: 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c  P2 text are NULL
b430: 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c   then store NULL
b440: 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20   in P3..**.**   
b450: 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a  P3 = P2 || P1.**
b460: 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
b470: 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20  l for P1 and P3 
b480: 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72  to be the same r
b490: 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d  egister. Sometim
b4a0: 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20  es,.** if P3 is 
b4b0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
b4c0: 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70  r as P2, the imp
b4d0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61  lementation is a
b4e0: 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  ble.** to avoid 
b4f0: 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63  a memcpy()..*/.c
b500: 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b  ase OP_Concat: {
b510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b520: 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c  me as TK_CONCAT,
b530: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b540: 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a  */.  i64 nByte;.
b550: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
b560: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
b570: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b580: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
b590: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
b5a0: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
b5b0: 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
b5c0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
b5d0: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
b5e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b5f0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
b600: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
b610: 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64    }.  if( Expand
b620: 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78  Blob(pIn1) || Ex
b630: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
b640: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b650: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
b660: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72  encoding);.  Str
b670: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
b680: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
b690: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
b6a0: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
b6b0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
b6c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
b6d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
b6e0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _big;.  }.  if( 
b6f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
b700: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
b710: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
b720: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
b730: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_mem;.  }.  Mem
b740: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
b750: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
b760: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
b770: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
b780: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
b790: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
b7a0: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
b7b0: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
b7c0: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
b7d0: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
b7e0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
b7f0: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   = 0;.  pOut->fl
b800: 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
b810: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
b820: 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
b830: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
b840: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b850: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
b860: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b870: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
b880: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b890: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72  s: r[P3]=r[P1]+r
b8a0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P2].**.** Add t
b8b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b8c0: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
b8d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b8e0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b8f0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b900: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b910: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b920: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b930: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b940: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
b950: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
b960: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b970: 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a  3]=r[P1]*r[P2].*
b980: 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79  *.**.** Multiply
b990: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b9a0: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b9b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b9c0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b9d0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b9e0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b9f0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
ba00: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
ba10: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
ba20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74  ./* Opcode: Subt
ba30: 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20  ract P1 P2 P3 * 
ba40: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ba50: 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d  [P3]=r[P2]-r[P1]
ba60: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
ba70: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba80: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
ba90: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
baa0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
bab0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
bac0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
bad0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
bae0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
baf0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
bb00: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
bb10: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
bb20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
bb30: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
bb40: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
bb50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bb60: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
bb70: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bb80: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
bb90: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
bba0: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
bbb0: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
bbc0: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
bbd0: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
bbe0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
bbf0: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
bc00: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
bc10: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
bc20: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
bc30: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
bc40: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bc50: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bc60: 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]%r[P1].**.*
bc70: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65  * Compute the re
bc80: 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e  mainder after in
bc90: 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50  teger register P
bca0: 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20  2 is divided by 
bcb0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
bcc0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
bcd0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
bce0: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
bcf0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bd00: 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65  r P1 is zero the
bd10: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bd20: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
bd30: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
bd40: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
bd50: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
bd60: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
bd70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bd80: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
bd90: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bda0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
bdb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bdc0: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
bdd0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
bde0: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
bdf0: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
be00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
be10: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
be20: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
be30: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
be40: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
be50: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
be60: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
be70: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
be80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
be90: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
bea0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
beb0: 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20    char bIntint; 
bec0: 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74    /* Started out
bed0: 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20   as two integer 
bee0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31  operands */.  u1
bef0: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  6 flags;      /*
bf00: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
bf10: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
bf20: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20  inputs */.  u16 
bf30: 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e  type1;      /* N
bf40: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c  umeric type of l
bf50: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bf60: 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20   u16 type2;     
bf70: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
bf80: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
bf90: 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  d */.  i64 iA;  
bfa0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bfb0: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
bfc0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
bfd0: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
bfe0: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
bff0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c000: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
c010: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
c020: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
c030: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
c040: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
c050: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
c060: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31  erand */..  pIn1
c070: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c080: 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d  ];.  type1 = num
c090: 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a  ericType(pIn1);.
c0a0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
c0b0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32  Op->p2];.  type2
c0c0: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
c0d0: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
c0e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
c0f0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
c100: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
c110: 67 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31  gs;.  if( (type1
c120: 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49   & type2 & MEM_I
c130: 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41  nt)!=0 ){.    iA
c140: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
c150: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
c160: 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  ;.    bIntint = 
c170: 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  1;.    switch( p
c180: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
c190: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
c1a0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
c1b0: 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69  e3AddInt64(&iB,i
c1c0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
c1d0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
c1e0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c1f0: 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  t:  if( sqlite3S
c200: 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ubInt64(&iB,iA) 
c210: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c220: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c230: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
c240: 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49   if( sqlite3MulI
c250: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
c260: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
c270: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c280: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
c290: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
c2a0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c2b0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c2c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c2d0: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
c2e0: 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f  EST_INT64 ) goto
c2f0: 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20   fp_math;.      
c300: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
c310: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c320: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
c330: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
c340: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
c350: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c360: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c370: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
c380: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
c390: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
c3a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
c3b0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
c3c0: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
c3d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c3e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
c3f0: 73 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20  se if( (flags & 
c400: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
c410: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
c420: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c430: 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ll;.  }else{.   
c440: 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70   bIntint = 0;.fp
c450: 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20  _math:.    rA = 
c460: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
c470: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
c480: 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rB = sqlite3Vdbe
c490: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b  RealValue(pIn2);
c4a0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
c4b0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
c4c0: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
c4d0: 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b         rB += rA;
c4e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c4f0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
c500: 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72  ract:    rB -= r
c510: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
c520: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
c530: 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d  ltiply:    rB *=
c540: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c550: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c560: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
c570: 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49    /* (double)0 I
c580: 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45  n case of SQLITE
c590: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
c5a0: 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  OINT... */.     
c5b0: 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62     if( rA==(doub
c5c0: 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74  le)0 ) goto arit
c5d0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c5e0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72  _null;.        r
c5f0: 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20  B /= rA;.       
c600: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c610: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
c620: 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69  .        iA = (i
c630: 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69  64)rA;.        i
c640: 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20  B = (i64)rB;.   
c650: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
c660: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c670: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c690: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
c6a0: 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62        rB = (doub
c6b0: 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20  le)(iB % iA);.  
c6c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c6d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65     }.    }.#ifde
c6e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
c6f0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
c700: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b   pOut->u.i = rB;
c710: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c720: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
c730: 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66  t);.#else.    if
c740: 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72  ( sqlite3IsNaN(r
c750: 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  B) ){.      goto
c760: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c770: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c780: 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20  }.    pOut->u.r 
c790: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
c7a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
c7b0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66  EM_Real);.    if
c7c0: 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29  ( ((type1|type2)
c7d0: 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26  &MEM_Real)==0 &&
c7e0: 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20   !bIntint ){.   
c7f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
c800: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f  tegerAffinity(pO
c810: 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ut);.    }.#endi
c820: 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  f.  }.  break;..
c830: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c840: 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c  t_is_null:.  sql
c850: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
c860: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ll(pOut);.  brea
c870: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c880: 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20   CollSeq P1 * * 
c890: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
c8a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
c8b0: 6c 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66  llSeq object. If
c8c0: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
c8d0: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
c8e0: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
c8f0: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
c900: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
c910: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
c920: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
c930: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
c940: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
c950: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
c960: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
c970: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
c980: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  s..**.** If P1 i
c990: 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
c9a0: 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65   it is a registe
c9b0: 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75  r that a subsequ
c9c0: 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20  ent min() or.** 
c9d0: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
c9e0: 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66  will set to 1 if
c9f0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
ca00: 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69   is not the mini
ca10: 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75  mum or.** maximu
ca20: 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73  m.  The P1 regis
ca30: 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  ter is initializ
ca40: 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20  ed to 0 by this 
ca50: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
ca60: 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
ca70: 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70   used by the imp
ca80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
ca90: 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65  he aforementione
caa0: 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74  d functions.** t
cab0: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63  o retrieve the c
cac0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
cad0: 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70  e set by this op
cae0: 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69  code is not avai
caf0: 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c  lable.** publicl
cb00: 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69  y.  Only built-i
cb10: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  n functions have
cb20: 20 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20   access to this 
cb30: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
cb40: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
cb50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
cb60: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
cb70: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
cb80: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
cb90: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
cba0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
cbb0: 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
cbc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
cbd0: 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  itAnd P1 P2 P3 *
cbe0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
cbf0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
cc00: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
cc10: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
cc20: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
cc30: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
cc40: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
cc50: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
cc60: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
cc70: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
cc80: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
cc90: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
cca0: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
ccb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ccc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
ccd0: 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]|r[P2].**.** 
cce0: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
ccf0: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
cd00: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
cd10: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
cd20: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
cd30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
cd40: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
cd50: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
cd60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
cd70: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
cd80: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
cd90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cda0: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c  s: r[P3]=r[P2]<<
cdb0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
cdc0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
cdd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cde0: 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62  P2 to the left b
cdf0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
ce00: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
ce10: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
ce20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
ce30: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
ce40: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ce50: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ce60: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ce70: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ce80: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ce90: 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31  e: ShiftRight P1
cea0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ceb0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
cec0: 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]>>r[P1].**.**
ced0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
cee0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
cef0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
cf00: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
cf10: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
cf20: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
cf30: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
cf40: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
cf50: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cf60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
cf70: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
cf80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
cf90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
cfa0: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
cfd0: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
cfe0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
cff0: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
d000: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d010: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
d020: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
d030: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d050: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
d060: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
d070: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
d080: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
d090: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d0a0: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
d0b0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
d0c0: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
d0d0: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
d0e0: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
d0f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d100: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
d110: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
d120: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d130: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d140: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
d150: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
d160: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d170: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
d180: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
d190: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
d1a0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
d1b0: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
d1c0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
d1d0: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
d1e0: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
d1f0: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
d200: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
d210: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
d220: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
d230: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
d240: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
d250: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
d260: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
d270: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
d280: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
d290: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
d2a0: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
d2b0: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
d2c0: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
d2d0: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
d2e0: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
d2f0: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
d300: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
d310: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
d320: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
d330: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
d340: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
d350: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
d360: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
d370: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
d380: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
d390: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
d3a0: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
d3b0: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
d3c0: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
d3d0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
d3e0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
d3f0: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
d400: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
d410: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
d420: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
d430: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
d440: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
d450: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
d460: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
d470: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
d480: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
d490: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
d4a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d4b0: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
d4c0: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
d4d0: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
d4e0: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
d4f0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
d500: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
d510: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d520: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
d530: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d540: 73 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50  s: r[P1]=r[P1]+P
d550: 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65  2.** .** Add the
d560: 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20   constant P2 to 
d570: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d580: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ister P1..** The
d590: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
d5a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  s an integer..**
d5b0: 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79  .** To force any
d5c0: 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20   register to be 
d5d0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74  an integer, just
d5e0: 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20   add 0..*/.case 
d5f0: 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20  OP_AddImm: {    
d600: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d610: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d620: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d630: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d640: 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65   pIn1);.  sqlite
d650: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
d660: 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31  fy(pIn1);.  pIn1
d670: 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32  ->u.i += pOp->p2
d680: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d690: 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49   Opcode: MustBeI
d6a0: 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
d6b0: 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  * .** Force the 
d6c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d6d0: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
d6e0: 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76  teger.  If the v
d6f0: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
d700: 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
d710: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  and cannot be co
d720: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
d730: 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f  integer.** witho
d740: 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68  ut data loss, th
d750: 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
d760: 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66  ely to P2, or if
d770: 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20   P2==0.** raise 
d780: 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  an SQLITE_MISMAT
d790: 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f  CH exception..*/
d7a0: 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49  .case OP_MustBeI
d7b0: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
d7c0: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
d7d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d7e0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d7f0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d800: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
d810: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
d820: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
d830: 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
d840: 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  ng);.    VdbeBra
d850: 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e  nchTaken((pIn1->
d860: 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d  flags&MEM_Int)==
d870: 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28  0, 2);.    if( (
d880: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d890: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d8a0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
d8b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
d8c0: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  = SQLITE_MISMATC
d8d0: 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  H;.        goto 
d8e0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
d8f0: 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  or;.      }else{
d900: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  .        goto ju
d910: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
d920: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65  }.    }.  }.  Me
d930: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
d940: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  1, MEM_Int);.  b
d950: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
d960: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
d970: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
d980: 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e  pcode: RealAffin
d990: 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ity P1 * * * *.*
d9a0: 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72  *.** If register
d9b0: 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74   P1 holds an int
d9c0: 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20  eger convert it 
d9d0: 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  to a real value.
d9e0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
d9f0: 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  de is used when 
da00: 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72  extracting infor
da10: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f  mation from a co
da20: 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73  lumn that.** has
da30: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20   REAL affinity. 
da40: 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c   Such column val
da50: 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ues may still be
da60: 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e   stored as.** in
da70: 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63  tegers, for spac
da80: 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75  e efficiency, bu
da90: 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69  t after extracti
daa0: 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a  on we want them.
dab0: 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20  ** to have only 
dac0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f  a real value..*/
dad0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66  .case OP_RealAff
dae0: 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20  inity: {        
daf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
db00: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
db10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
db20: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
db30: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
db40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
db50: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
db60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
db70: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
db80: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
db90: 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20  Opcode: Cast P1 
dba0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
dbb0: 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
dbc0: 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  [P1]).**.** Forc
dbd0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
dbe0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
dbf0: 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65   the type define
dc00: 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20  d by P2..** .** 
dc10: 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  <ul>.** <li> P2=
dc20: 3d 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42  ='A' &rarr; BLOB
dc30: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27  .** <li> P2=='B'
dc40: 20 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20   &rarr; TEXT.** 
dc50: 3c 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61  <li> P2=='C' &ra
dc60: 72 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c  rr; NUMERIC.** <
dc70: 6c 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72  li> P2=='D' &rar
dc80: 72 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  r; INTEGER.** <l
dc90: 69 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72  i> P2=='E' &rarr
dca0: 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a  ; REAL.** </ul>.
dcb0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
dcc0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
dcd0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
dce0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
dcf0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dd00: 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Cast: {         
dd10: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
dd20: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
dd30: 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2>=SQLITE_AFF
dd40: 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32  _BLOB && pOp->p2
dd50: 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  <=SQLITE_AFF_REA
dd60: 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  L );.  testcase(
dd70: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
dd80: 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74  _AFF_TEXT );.  t
dd90: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
dda0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  ==SQLITE_AFF_BLO
ddb0: 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  B );.  testcase(
ddc0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ddd0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
dde0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
ddf0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
de00: 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73  INTEGER );.  tes
de10: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
de20: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
de30: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
de40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
de50: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
de60: 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20  , pIn1);.  rc = 
de70: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
de80: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
de90: 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70  emCast(pIn1, pOp
dea0: 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ->p2, encoding);
deb0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
dec0: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
ded0: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
dee0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
def0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
df00: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
df10: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
df20: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
df30: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
df40: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d  psis: IF r[P3]==
df50: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
df60: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
df70: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
df80: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
df90: 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a  )==reg(P1) then.
dfa0: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
dfb0: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
dfc0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
dfd0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
dfe0: 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72  P5, then.** stor
dff0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  e the result of 
e000: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65  comparison in re
e010: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
e020: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e030: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e040: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e050: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e060: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e070: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e080: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e090: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e0a0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e0b0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e0c0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e0d0: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e0e0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e0f0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e100: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e110: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e120: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e130: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e140: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e150: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e160: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e170: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e180: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e190: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e1a0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e1b0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e1c0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e1d0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e1e0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e1f0: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e200: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e210: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e220: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e230: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e240: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e250: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e260: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e270: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e280: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e290: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e2a0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e2b0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e2c0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e2d0: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e2e0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e2f0: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e300: 34 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20  4 is used to do 
e310: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e320: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
e330: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
e340: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
e350: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
e360: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
e370: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
e380: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
e390: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
e3a0: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
e3b0: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
e3c0: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
e3d0: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
e3e0: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
e3f0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
e400: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
e410: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
e420: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
e430: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  lobs..**.** If S
e440: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e450: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
e460: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e470: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
e480: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
e490: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
e4a0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
e4b0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e4c0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
e4d0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
e4e0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
e4f0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
e500: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
e510: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e520: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
e530: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e540: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
e550: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
e560: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
e570: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
e580: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
e590: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a  tted from P5..**
e5a0: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
e5b0: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
e5c0: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
e5d0: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
e5e0: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
e5f0: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
e600: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
e610: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
e620: 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e  LL or 0 (false).
e630: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
e640: 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32  ds, a prior r[P2
e650: 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74  ] value will not
e660: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
e670: 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a  by 1 (true)..*/.
e680: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31  /* Opcode: Ne P1
e690: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e6a0: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
e6b0: 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]!=r[P1].**.** 
e6c0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e6d0: 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f  like the Eq opco
e6e0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e6f0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e700: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
e710: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
e720: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
e730: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
e740: 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72  he Eq opcode for
e750: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
e760: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
e770: 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45  * If both SQLITE
e780: 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c  _STOREP2 and SQL
e790: 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  ITE_KEEPNULL fla
e7a0: 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20  gs are set then 
e7b0: 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f  the.** content o
e7c0: 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20  f r[P2] is only 
e7d0: 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e  changed if the n
e7e0: 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ew value is NULL
e7f0: 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a   or 1 (true)..**
e800: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
e810: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
e820: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
e830: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
e840: 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a  0 (false)..*/./*
e850: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
e860: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e870: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
e880: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  <r[P1].**.** Com
e890: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
e8a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
e8b0: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
e8c0: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
e8d0: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
e8e0: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
e8f0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
e900: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
e910: 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  P5 store.** the 
e920: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e930: 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20  ison (0 or 1 or 
e940: 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73  NULL) into regis
e950: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
e960: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e970: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
e980: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
e990: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
e9a0: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
e9b0: 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74   then the take t
e9c0: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
e9d0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e9e0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
e9f0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
ea00: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
ea10: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
ea20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
ea30: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
ea40: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
ea50: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
ea60: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
ea70: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
ea80: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
ea90: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
eaa0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
eab0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
eac0: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
ead0: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
eae0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
eaf0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
eb00: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
eb10: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
eb20: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
eb30: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
eb40: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
eb50: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
eb60: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
eb70: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
eb80: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
eb90: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
eba0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
ebb0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
ebc0: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
ebd0: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
ebe0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
ebf0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
ec00: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
ec10: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
ec20: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
ec30: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
ec40: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
ec50: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
ec60: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
ec70: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
ec80: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
ec90: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
eca0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
ecb0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
ecc0: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
ecd0: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
ece0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
ecf0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
ed00: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
ed10: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
ed20: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
ed30: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
ed40: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
ed50: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
ed60: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
ed70: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
ed80: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
ed90: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
eda0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
edb0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
edc0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
edd0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
ede0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
edf0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
ee00: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
ee10: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
ee20: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
ee30: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
ee40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
ee50: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ee60: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
ee70: 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]<=r[P1].**.** 
ee80: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ee90: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
eea0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
eeb0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
eec0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
eed0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
eee0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
eef0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
ef00: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ef10: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
ef20: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ef30: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ef40: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
ef50: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
ef60: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ef70: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72  psis: IF r[P3]>r
ef80: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
ef90: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
efa0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
efb0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
efc0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
efd0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
efe0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
eff0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
f000: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
f010: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
f020: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
f030: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
f040: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
f050: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
f060: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f070: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
f080: 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  >=r[P1].**.** Th
f090: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f0a0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
f0b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
f0c0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f0d0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
f0e0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
f0f0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
f100: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
f110: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
f120: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
f130: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f140: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f150: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
f160: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
f170: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f180: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
f190: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f1a0: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
f1b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f1c0: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
f1d0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f1e0: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
f1f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f200: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
f210: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
f220: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f230: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
f240: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f250: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f270: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
f280: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f290: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f2b0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
f2c0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f2d0: 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32  .  int res, res2
f2e0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74  ;      /* Result
f2f0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
f300: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
f310: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
f320: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
f330: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
f340: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
f350: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
f360: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
f370: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
f380: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
f390: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
f3a0: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
f3b0: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
f3c0: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
f3d0: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
f3e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f3f0: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
f400: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
f410: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
f420: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
f430: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
f440: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f450: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
f460: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
f470: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
f480: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
f490: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f4a0: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
f4b0: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
f4c0: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
f4d0: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
f4e0: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
f4f0: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
f500: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
f510: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
f520: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
f530: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
f540: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
f550: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f560: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
f570: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
f580: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
f590: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
f5a0: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
f5b0: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
f5c0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
f5d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
f5e0: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
f5f0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
f600: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
f610: 28 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d  (flags1&flags3&M
f620: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
f630: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
f640: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20  M_Cleared)==0.  
f650: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
f660: 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72  es = 0;  /* Oper
f670: 61 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a  ands are equal *
f680: 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
f690: 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20         res = 1; 
f6a0: 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
f6b0: 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20   not equal */.  
f6c0: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
f6d0: 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  .      /* SQLITE
f6e0: 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72  _NULLEQ is clear
f6f0: 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e   and at least on
f700: 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
f710: 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  L,.      ** then
f720: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
f730: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
f740: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
f750: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
f760: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f770: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
f780: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
f790: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f7a0: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20  STOREP2 ){.     
f7b0: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
f7c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
f7d0: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20    iCompare = 1; 
f7e0: 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61     /* Operands a
f7f0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f800: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
f810: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
f820: 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  );.        MemSe
f830: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f840: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
f850: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f860: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
f870: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
f880: 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
f890: 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
f8a0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
f8b0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
f8c0: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
f8d0: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
f8e0: 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
f8f0: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
f900: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
f910: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
f920: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
f930: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
f940: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
f950: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
f960: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
f970: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
f980: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
f990: 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66  ERIC ){.      if
f9a0: 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67  ( (flags1 | flag
f9b0: 73 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  s3)&MEM_Str ){. 
f9c0: 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
f9d0: 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
f9e0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
f9f0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
fa00: 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
fa10: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
fa20: 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74  ,0);.          t
fa30: 65 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21  estcase( flags3!
fa40: 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20  =pIn3->flags ); 
fa50: 2f 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70  /* Possible if p
fa60: 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20  In1==pIn3 */.   
fa70: 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
fa80: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20  pIn3->flags;.   
fa90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
faa0: 66 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45  f( (flags3 & (ME
fab0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
fac0: 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
fad0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
fae0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
faf0: 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20  ity(pIn3,0);.   
fb00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
fb10: 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74       /* Handle t
fb20: 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f  he common case o
fb30: 66 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72  f integer compar
fb40: 69 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e  ison here, as an
fb50: 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69  .      ** optimi
fb60: 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64  zation, to avoid
fb70: 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
fb80: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a  e3MemCompare() *
fb90: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  /.      if( (pIn
fba0: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d  1->flags & pIn3-
fbb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
fbc0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
fbd0: 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20  if( pIn3->u.i > 
fbe0: 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73  pIn1->u.i ){ res
fbf0: 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70   = +1; goto comp
fc00: 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20  are_op; }.      
fc10: 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20    if( pIn3->u.i 
fc20: 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72  < pIn1->u.i ){ r
fc30: 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f  es = -1; goto co
fc40: 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20  mpare_op; }.    
fc50: 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
fc60: 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72       goto compar
fc70: 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20  e_op;.      }.  
fc80: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
fc90: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
fca0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
fcb0: 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  f( (flags1 & MEM
fcc0: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
fcd0: 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs1 & (MEM_Int|M
fce0: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
fcf0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fd00: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
fd10: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
fd20: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fd30: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
fd40: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
fd50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
fd60: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
fd70: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
fd80: 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
fd90: 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags1&MEM_Dyn) !=
fda0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45   (pIn1->flags&ME
fdb0: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
fdc0: 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31    flags1 = (pIn1
fdd0: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
fde0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
fdf0: 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s1 & MEM_TypeMas
fe00: 6b 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  k);.        asse
fe10: 72 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29  rt( pIn1!=pIn3 )
fe20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
fe30: 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45  if( (flags3 & ME
fe40: 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
fe50: 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
fe60: 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
fe70: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
fe80: 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
fe90: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
fea0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
feb0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
fec0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
fed0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
fee0: 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e  ringify(pIn3, en
fef0: 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
ff00: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
ff10: 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21  lags3&MEM_Dyn) !
ff20: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  = (pIn3->flags&M
ff30: 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
ff40: 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e     flags3 = (pIn
ff50: 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  3->flags & ~MEM_
ff60: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
ff70: 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs3 & MEM_TypeMa
ff80: 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  sk);.      }.   
ff90: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
ffa0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
ffb0: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
ffc0: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
ffd0: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
ffe0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
fff0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
10000 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72  oll);.  }.compar
10010 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68  e_op:.  /* At th
10020 69 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73  is point, res is
10030 20 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c   negative, zero,
10040 20 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20   or positive if 
10050 72 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20  reg[P1] is.  ** 
10060 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c  less than, equal
10070 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20   to, or greater 
10080 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65  than reg[P3], re
10090 73 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d  spectively.  Com
100a0 70 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e  pute.  ** the an
100b0 73 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65  swer to this ope
100c0 72 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64  rator in res2, d
100d0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74  epending on what
100e0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a   the comparison.
100f0 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63    ** operator ac
10100 74 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20  tually is.  The 
10110 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
10120 64 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68  de depends on th
10130 65 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74  e fact.  ** that
10140 20 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f   the 6 compariso
10150 6e 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20  n operators are 
10160 63 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65  consecutive inte
10170 67 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a  gers in this.  *
10180 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51  * order:  NE, EQ
10190 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45  , GT, LE, LT, GE
101a0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50   */.  assert( OP
101b0 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20  _Eq==OP_Ne+1 ); 
101c0 61 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f  assert( OP_Gt==O
101d0 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74  P_Ne+2 ); assert
101e0 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33  ( OP_Le==OP_Ne+3
101f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
10200 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20  _Lt==OP_Ne+4 ); 
10210 61 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f  assert( OP_Ge==O
10220 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20  P_Ne+5 );.  if( 
10230 72 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20  res<0 ){        
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c  /* ne, eq, gt, l
10260 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20  e, lt, ge */.   
10270 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10280 73 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62  signed char aLTb
10290 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30  [] = { 1,  0,  0
102a0 2c 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a  ,  1,  1,  0 };.
102b0 20 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b      res2 = aLTb[
102c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
102d0 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  _Ne];.  }else if
102e0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
102f0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10300 69 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b  igned char aEQb[
10310 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c  ] = { 0,  1,  0,
10320 20 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20    1,  0,  1 };. 
10330 20 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70     res2 = aEQb[p
10340 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
10350 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  Ne];.  }else{.  
10360 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
10370 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54  nsigned char aGT
10380 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20  b[] = { 1,  0,  
10390 31 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b  1,  0,  0,  1 };
103a0 0a 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62  .    res2 = aGTb
103b0 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f  [pOp->opcode - O
103c0 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  P_Ne];.  }..  /*
103d0 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
103e0 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
103f0 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
10400 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
10410 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  . */.  assert( (
10420 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10430 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
10440 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  1 & MEM_Dyn) );.
10450 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
10460 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74  flags1;.  assert
10470 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
10480 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10490 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags3 & MEM_Dyn) 
104a0 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
104b0 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66   = flags3;..  if
104c0 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
104d0 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
104e0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
104f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f  Op->p2];.    iCo
10500 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20  mpare = res;.   
10510 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
10520 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29  SQLITE_KEEPNULL)
10530 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  !=0 ){.      /* 
10540 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  The KEEPNULL fla
10550 67 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71  g prevents OP_Eq
10560 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10570 67 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a  g a NULL with 1.
10580 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65        ** and pre
10590 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d  vents OP_Ne from
105a0 20 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c   overwriting NUL
105b0 4c 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20  L with 0.  This 
105c0 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73  flag.      ** is
105d0 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f   only used in co
105e0 6e 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74  ntexts where eit
105f0 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  her:.      **   
10600 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26  (1) op==OP_Eq &&
10610 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
10620 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20   r[P2]==0).     
10630 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50   **   (2) op==OP
10640 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Ne && (r[P2]==N
10650 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29  ULL || r[P2]==1)
10660 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66  .      ** Theref
10670 6f 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65  ore it is not ne
10680 63 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b  cessary to check
10690 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
106a0 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20  r[P2] for.      
106b0 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  ** NULL. */.    
106c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
106d0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20  pcode==OP_Ne || 
106e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
106f0 45 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Eq );.      asse
10700 72 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72  rt( res2==0 || r
10710 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  es2==1 );.      
10720 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10730 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
10740 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10750 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10760 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
10770 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
10780 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10790 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 && pOp->opco
107a0 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
107b0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
107c0 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==1 && pOp->opc
107d0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
107e0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
107f0 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65  code==OP_Eq)==re
10800 73 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  s2 ) break;.    
10810 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  }.    memAboutTo
10820 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
10830 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10840 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10850 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
10860 69 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45  i = res2;.    RE
10870 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
10880 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
10890 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
108a0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
108b0 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
108c0 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
108d0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29  ;.    if( res2 )
108e0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
108f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
10900 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10910 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f  * Opcode: ElseNo
10920 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  tEq * P2 * * *.*
10930 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
10940 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c   must immediatel
10950 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c  y follow an OP_L
10960 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61  t or OP_Gt compa
10970 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
10980 2a 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20  ** If result of 
10990 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
109a0 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  son on the same 
109b0 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  two operands.** 
109c0 77 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55  would have be NU
109d0 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c  LL or false (0),
109e0 20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20   then then jump 
109f0 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
10a00 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f  e result of an O
10a10 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Eq comparison 
10a20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69  on the two previ
10a30 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  ous operands.** 
10a40 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
10a50 74 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66  true (1), then f
10a60 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
10a70 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45  case OP_ElseNotE
10a80 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61  q: {       /* sa
10a90 6d 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c  me as TK_ESCAPE,
10aa0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
10ab0 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
10ac0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10ad0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c  opcode==OP_Lt ||
10ae0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
10af0 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65  =OP_Gt );.  asse
10b00 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26  rt( pOp[-1].p5 &
10b10 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10b20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
10b30 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30  aken(iCompare!=0
10b40 2c 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d  , 2);.  if( iCom
10b50 70 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a  pare!=0 ) goto j
10b60 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
10b70 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
10b80 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
10b90 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
10ba0 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
10bb0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
10bc0 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
10bd0 74 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a  tor in the next.
10be0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
10bf0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
10c00 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
10c10 65 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a  e P4 operand..**
10c20 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
10c30 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
10c40 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
10c50 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
10c60 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
10c70 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
10c80 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
10c90 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
10ca0 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
10cb0 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
10cc0 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
10cd0 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a   OP_Compare..**.
10ce0 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74  ** The first int
10cf0 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69  eger in the P4 i
10d00 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20  nteger array is 
10d10 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
10d20 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64  e array.** and d
10d30 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70  oes not become p
10d40 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75  art of the permu
10d50 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  tation..*/.case 
10d60 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
10d70 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
10d80 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
10d90 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
10da0 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
10db0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
10dc0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70  .opcode==OP_Comp
10dd0 61 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  are );.  assert(
10de0 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46   pOp[1].p5 & OPF
10df0 4c 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20  LAG_PERMUTE );. 
10e00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10e10 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
10e20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
10e30 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
10e40 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
10e50 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
10e60 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
10e70 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
10e80 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
10e90 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
10ea0 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
10eb0 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
10ec0 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
10ed0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
10ee0 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
10ef0 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
10f00 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
10f10 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
10f20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
10f30 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
10f40 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
10f50 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
10f60 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
10f70 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
10f80 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
10f90 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
10fa0 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
10fb0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
10fc0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
10fd0 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
10fe0 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
10ff0 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
11000 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
11010 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
11020 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
11030 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
11040 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
11050 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
11060 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11070 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
11080 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
11090 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
110a0 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
110b0 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
110c0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
110d0 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
110e0 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
110f0 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
11100 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
11110 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
11120 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
11130 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
11140 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
11150 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
11160 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
11170 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
11180 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
11190 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
111a0 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
111b0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
111c0 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
111d0 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
111e0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
111f0 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
11200 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
11210 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
11220 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
11230 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
11240 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
11250 74 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  te;     /* The p
11260 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20  ermutation */.. 
11270 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
11280 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
11290 3d 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75  =0 ){.    aPermu
112a0 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  te = 0;.  }else{
112b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
112c0 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
112d0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
112e0 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69  de==OP_Permutati
112f0 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  on );.    assert
11300 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
11310 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
11320 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20  .    aPermute = 
11330 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20  pOp[-1].p4.ai + 
11340 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  1;.    assert( a
11350 50 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20  Permute!=0 );.  
11360 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  }.  n = pOp->p3;
11370 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
11380 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
11390 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
113a0 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
113b0 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
113c0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
113d0 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66   pOp->p2;.#ifdef
113e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
113f0 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11400 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11410 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11420 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11430 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11440 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11450 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11460 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11470 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11480 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11490 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
114a0 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
114b0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
114c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
114d0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
114e0 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
114f0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11500 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11510 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11520 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11530 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11540 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11550 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11560 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11570 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11580 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11590 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
115a0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
115b0 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
115c0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
115d0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
115e0 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
115f0 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11600 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11610 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11620 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11630 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11640 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11650 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20  Info->nKeyField 
11660 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
11670 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
11680 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
11690 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
116a0 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
116b0 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
116c0 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
116d0 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
116e0 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
116f0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
11700 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
11710 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
11720 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
11730 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
11740 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11750 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
11760 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
11770 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
11780 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
11790 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
117a0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
117b0 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
117c0 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
117d0 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
117e0 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
117f0 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
11800 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
11810 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
11820 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
11830 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
11840 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
11850 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
11860 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
11870 3c 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  <0 ){.    VdbeBr
11880 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20  anchTaken(0,3); 
11890 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
118a0 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65  p1 - 1];.  }else
118b0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
118c0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
118d0 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f  chTaken(1,3); pO
118e0 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
118f0 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a   - 1];.  }else{.
11900 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
11910 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(2,3); pOp = 
11920 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31  &aOp[pOp->p3 - 1
11930 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  ];.  }.  break;.
11940 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
11950 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
11960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
11970 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32  ]=(r[P1] && r[P2
11980 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
11990 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
119a0 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
119b0 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
119c0 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
119d0 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
119e0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
119f0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11a00 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
11a10 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
11a20 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
11a30 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
11a40 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
11a50 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
11a60 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
11a70 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
11a80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
11a90 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
11aa0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
11ab0 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32  ]=(r[P1] || r[P2
11ac0 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
11ad0 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
11ae0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11af0 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
11b00 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
11b10 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
11b20 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
11b30 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
11b40 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
11b50 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
11b60 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
11b70 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
11b80 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
11b90 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
11ba0 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
11bb0 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
11bc0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
11bd0 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
11be0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11bf0 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
11c00 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
11c10 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
11c20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11c30 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
11c40 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
11c50 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
11c60 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
11c70 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
11c80 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
11c90 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
11ca0 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
11cb0 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
11cc0 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
11cd0 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20  r NULL */..  v1 
11ce0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f  = sqlite3VdbeBoo
11cf0 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
11d00 70 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20  pOp->p1], 2);.  
11d10 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
11d20 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
11d30 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b  em[pOp->p2], 2);
11d40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
11d50 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
11d60 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
11d70 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
11d80 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
11d90 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
11da0 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
11db0 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
11dc0 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
11dd0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11de0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
11df0 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
11e00 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
11e10 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
11e20 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
11e30 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
11e40 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11e50 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
11e60 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
11e70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
11e80 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
11e90 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11ea0 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
11eb0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11ec0 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
11ed0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11ee0 3a 20 49 73 54 72 75 65 20 50 31 20 50 32 20 50  : IsTrue P1 P2 P
11ef0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
11f00 69 73 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c  is: r[P2] = coal
11f10 65 73 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45  esce(r[P1]==TRUE
11f20 2c 50 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20  ,P3) ^ P4.**.** 
11f30 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c  This opcode impl
11f40 65 6d 65 6e 74 73 20 74 68 65 20 49 53 20 54 52  ements the IS TR
11f50 55 45 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53  UE, IS FALSE, IS
11f60 20 4e 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a   NOT TRUE, and.*
11f70 2a 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f  * IS NOT FALSE o
11f80 70 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20  perators..**.** 
11f90 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
11fa0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11fb0 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
11fc0 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
11fd0 61 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61  at.** boolean (a
11fe0 20 30 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69   0 or 1) in regi
11ff0 73 74 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20  ster P2.  Or if 
12000 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12010 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
12020 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50  NULL, then the P
12030 33 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  3 is stored in r
12040 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76  egister P2.  Inv
12050 65 72 74 20 74 68 65 20 61 6e 73 77 65 72 20 69  ert the answer i
12060 66 20 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a  f P4.** is 1..**
12070 0a 2a 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73  .** The logic is
12080 20 73 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65   summarized like
12090 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c   this:.**.** <ul
120a0 3e 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33  > .** <li> If P3
120b0 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74  ==0 and P4==0  t
120c0 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b  hen  r[P2] := r[
120d0 50 31 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c  P1] IS TRUE.** <
120e0 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64  li> If P3==1 and
120f0 20 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b   P4==1  then  r[
12100 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
12110 46 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66  FALSE.** <li> If
12120 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31   P3==0 and P4==1
12130 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
12140 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52   r[P1] IS NOT TR
12150 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33  UE.** <li> If P3
12160 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74  ==1 and P4==0  t
12170 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b  hen  r[P2] := r[
12180 50 31 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45  P1] IS NOT FALSE
12190 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73  .** </ul>.*/.cas
121a0 65 20 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20  e OP_IsTrue: {  
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
121c0 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  in1, out2 */.  a
121d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
121e0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
121f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12200 34 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.i==0 || pOp->p
12210 34 2e 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65  4.i==1 );.  asse
12220 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c  rt( pOp->p3==0 |
12230 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a  | pOp->p3==1 );.
12240 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12250 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
12260 4f 70 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73  Op->p2],.      s
12270 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
12280 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
12290 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20  ->p1], pOp->p3) 
122a0 5e 20 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20  ^ pOp->p4.i);.  
122b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
122c0 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
122d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
122e0 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
122f0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
12300 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12310 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
12320 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
12330 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
12340 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
12350 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
12360 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12370 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
12380 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
12390 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
123a0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
123b0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
123c0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
123d0 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
123e0 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
123f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
12400 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
12410 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70  p->p2];.  if( (p
12420 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12430 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12440 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12450 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73  etInt64(pOut, !s
12460 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
12470 6e 56 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b  nValue(pIn1,0));
12480 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
12490 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
124a0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20  ull(pOut);.  }. 
124b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
124c0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
124d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
124e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b  psis: r[P2]= ~r[
124f0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
12500 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
12510 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
12520 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
12530 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
12540 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
12550 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
12560 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
12570 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
12580 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
12590 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
125a0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
125b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
125c0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
125d0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
125e0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
125f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
12600 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12610 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
12620 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
12630 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
12640 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12650 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
12660 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
12670 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
12680 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
12690 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
126a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
126b0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
126c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
126d0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
126e0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
126f0 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ction the first 
12700 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65  time this opcode
12710 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72   is.** encounter
12720 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63  ed on each invoc
12730 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74  ation of the byt
12740 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20  e-code program. 
12750 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f   Jump to P2.** o
12760 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64  n the second and
12770 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
12780 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e  encounters durin
12790 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63  g the same invoc
127a0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70  ation..**.** Top
127b0 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20  -level programs 
127c0 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20  determine first 
127d0 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f  invocation by co
127e0 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a  mparing the P1.*
127f0 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73  * operand agains
12800 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64  t the P1 operand
12810 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12820 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65  opcode at the be
12830 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68  ginning.** of th
12840 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74  e program.  If t
12850 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  he P1 values dif
12860 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  fer, then fall t
12870 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a  hrough and make.
12880 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69  ** the P1 of thi
12890 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74  s opcode equal t
128a0 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49  o the P1 of OP_I
128b0 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75  nit.  If P1 valu
128c0 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61  es are.** the sa
128d0 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  me then take the
128e0 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   jump..**.** For
128f0 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68   subprograms, th
12900 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b  ere is a bitmask
12910 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d   in the VdbeFram
12920 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  e that determine
12930 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  s.** whether or 
12940 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f  not the jump sho
12950 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54  uld be taken.  T
12960 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65  he bitmask is ne
12970 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75  cessary.** becau
12980 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65  se the self-alte
12990 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20  ring code trick 
129a0 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  does not work fo
129b0 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74  r recursive.** t
129c0 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65  riggers..*/.case
129d0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
129e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
129f0 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20  */.  u32 iAddr; 
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12a10 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69  * Address of thi
12a20 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  s instruction */
12a30 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12a40 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12a50 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d  Init );.  if( p-
12a60 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69  >pFrame ){.    i
12a70 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70  Addr = (int)(pOp
12a80 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20   - p->aOp);.    
12a90 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e  if( (p->pFrame->
12aa0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26  aOnce[iAddr/8] &
12ab0 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29   (1<<(iAddr & 7)
12ac0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  ))!=0 ){.      V
12ad0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
12ae0 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
12af0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
12b00 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65   }.    p->pFrame
12b10 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d  ->aOnce[iAddr/8]
12b20 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20   |= 1<<(iAddr & 
12b30 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  7);.  }else{.   
12b40 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70   if( p->aOp[0].p
12b50 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  1==pOp->p1 ){.  
12b60 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12b70 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12b80 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12b90 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64  ;.    }.  }.  Vd
12ba0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
12bb0 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d   2);.  pOp->p1 =
12bc0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20   p->aOp[0].p1;. 
12bd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12be0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12bf0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12c00 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12c10 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12c20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12c30 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12c40 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12c50 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12c60 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12c70 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12c80 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
12c90 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
12ca0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
12cb0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
12cc0 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20  case OP_If:  {  
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ce0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
12cf0 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69  nt c;.  c = sqli
12d00 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
12d10 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lue(&aMem[pOp->p
12d20 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  1], pOp->p3);.  
12d30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12d40 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
12d50 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  c ) goto jump_to
12d60 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
12d70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
12d80 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
12d90 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
12da0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
12db0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
12dc0 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
12dd0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
12de0 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  d false if it ha
12df0 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
12e00 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
12e10 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
12e20 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
12e30 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
12e40 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
12e50 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
12e60 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
12e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12e80 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
12e90 20 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74   c;.  c = !sqlit
12ea0 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
12eb0 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
12ec0 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  ], !pOp->p3);.  
12ed0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12ee0 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
12ef0 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  c ) goto jump_to
12f00 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
12f10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
12f20 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
12f30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
12f40 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
12f50 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12f60 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12f70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12f80 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
12f90 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
12fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12fb0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
12fc0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
12fd0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12fe0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
12ff0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
13000 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13010 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
13020 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13030 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
13040 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13050 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13060 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
13070 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
13080 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
13090 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
130a0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
130b0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
130c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
130d0 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
130e0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
130f0 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
13100 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
13110 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
13120 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
13130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
13140 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
13150 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
13160 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
13170 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
13180 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
13190 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)==0 ){.    got
131a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
131b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
131c0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52   Opcode: IfNullR
131d0 6f 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ow P1 P2 P3 * *.
131e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
131f0 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20  P1.nullRow then 
13200 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f  r[P3]=NULL, goto
13210 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20   P2.**.** Check 
13220 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
13230 20 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75   see if it is cu
13240 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
13250 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a   at a NULL row..
13260 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  ** If it is, the
13270 6e 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50  n set register P
13280 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75  3 to NULL and ju
13290 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
132a0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69  o P2..** If P1 i
132b0 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20  s not on a NULL 
132c0 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  row, then fall t
132d0 68 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d  hrough without m
132e0 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61  aking any.** cha
132f0 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nges..*/.case OP
13300 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20  _IfNullRow: {   
13310 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
13320 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13330 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
13340 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
13350 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
13360 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
13370 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
13380 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f  pOp->p1]->nullRo
13390 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
133a0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61  VdbeMemSetNull(a
133b0 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a  Mem + pOp->p3);.
133c0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
133d0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
133e0 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
133f0 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54  TE_ENABLE_OFFSET
13400 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63  _SQL_FUNC./* Opc
13410 6f 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50  ode: Offset P1 P
13420 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
13430 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71  psis: r[P3] = sq
13440 6c 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a  lite_offset(P1).
13450 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
13460 65 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68  egister r[P3] th
13470 65 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e  e byte offset in
13480 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
13490 66 69 6c 65 20 74 68 61 74 20 69 73 20 74 68 65  file that is the
134a0 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65  .** start of the
134b0 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65   payload for the
134c0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
134d0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
134e0 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20  is currently.** 
134f0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
13500 50 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  P2 is the column
13510 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
13520 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
13530 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20  sqlite_offset() 
13540 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69  function..** Thi
13550 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f  s opcode does no
13560 74 20 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c  t use P2 itself,
13570 20 62 75 74 20 74 68 65 20 50 32 20 76 61 6c 75   but the P2 valu
13580 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
13590 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74  .** code generat
135a0 6f 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c  or.  The P1, P2,
135b0 20 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73   and P3 operands
135c0 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
135d0 61 72 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  are the.** same 
135e0 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  as for OP_Column
135f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
13600 6f 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69  ode is only avai
13610 6c 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20  lable if SQLite 
13620 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
13630 20 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45   the.** -DSQLITE
13640 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53  _ENABLE_OFFSET_S
13650 51 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a  QL_FUNC option..
13660 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
13670 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
13680 20 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43   out3 */.  VdbeC
13690 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
136a0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
136b0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
136c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
136d0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
136e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
136f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  r[pOp->p1];.  pO
13700 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
13710 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45  p->p3];.  if( NE
13720 56 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43  VER(pC==0) || pC
13730 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13740 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
13750 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13760 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
13770 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
13780 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
13790 34 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42  4(pOut, sqlite3B
137a0 74 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75  treeOffset(pC->u
137b0 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d  c.pCursor));.  }
137c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
137d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
137e0 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46  BLE_OFFSET_SQL_F
137f0 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  UNC */../* Opcod
13800 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
13810 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
13820 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a  psis: r[P3]=PX.*
13830 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
13840 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
13850 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
13860 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
13870 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
13880 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
13890 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
138a0 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
138b0 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
138c0 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
138d0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
138e0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
138f0 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
13900 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
13910 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
13920 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
13930 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
13940 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
13950 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
13960 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
13970 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
13980 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
13990 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
139a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  **.** If the rec
139b0 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  ord contains few
139c0 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
139d0 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
139e0 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
139f0 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
13a00 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
13a10 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
13a20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
13a30 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
13a40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
13a50 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
13a60 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
13a70 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
13a80 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
13a90 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
13aa0 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
13ab0 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
13ac0 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
13ad0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
13ae0 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
13af0 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
13b00 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
13b10 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13b20 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
13b30 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
13b40 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
13b50 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
13b60 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
13b70 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
13b80 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
13b90 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
13ba0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   then.** the res
13bb0 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
13bc0 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
13bd0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
13be0 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
13bf0 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
13c00 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
13c10 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
13c20 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
13c30 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
13c40 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
13c50 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
13c60 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
13c70 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
13c80 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
13c90 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
13ca0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
13cb0 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
13cc0 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
13cd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
13ce0 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
13cf0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
13d00 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
13d10 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
13d20 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
13d30 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
13d40 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
13d50 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
13d60 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
13d70 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
13d80 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
13d90 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
13da0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
13db0 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
13dc0 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
13dd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
13de0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
13df0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
13e00 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
13e10 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
13e20 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
13e30 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
13e40 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
13e50 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
13e60 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
13e70 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
13e80 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
13e90 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
13ea0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
13eb0 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
13ec0 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
13ed0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
13ee0 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13ef0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
13f00 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
13f10 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
13f20 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  r */.  u64 offse
13f30 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
13f40 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
13f50 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
13f60 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
13f70 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
13f80 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
13f90 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
13fa0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
13fb0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
13fc0 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  /..  pC = p->apC
13fd0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  sr[pOp->p1];.  p
13fe0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20  2 = pOp->p2;..  
13ff0 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
14000 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20   cache is stale 
14010 28 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e  (meaning it is n
14020 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ot currently poi
14030 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63  nt at.  ** the c
14040 6f 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e  orrect row) then
14050 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
14060 64 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68  date by doing th
14070 65 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a  e necessary .  *
14080 2a 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a  * B-Tree seek. *
14090 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
140a0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
140b0 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66  (&pC, &p2);.  if
140c0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
140d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
140e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
140f0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
14100 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
14110 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
14120 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
14130 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
14140 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
14150 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
14160 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
14170 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
14180 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
14190 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
141a0 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
141b0 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
141c0 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
141d0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
141e0 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
141f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
14200 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
14210 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
14220 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
14230 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14240 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
14250 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  R );..  if( pC->
14260 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
14270 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20  cacheCtr ){     
14280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54             /*OPT
14290 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
142a0 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d  SE*/.    if( pC-
142b0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
142c0 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
142d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
142e0 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  DO ){.        /*
142f0 20 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c   For the special
14300 20 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75   case of as pseu
14310 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73  do-cursor, the s
14320 65 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a  eekResult field.
14330 20 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74          ** ident
14340 69 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74  ifies the regist
14350 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
14360 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20  e record */.    
14370 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
14380 73 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a  seekResult>0 );.
14390 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
143a0 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73  aMem[pC->seekRes
143b0 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73  ult];.        as
143c0 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67  sert( pReg->flag
143d0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
143e0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
143f0 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29  memIsValid(pReg)
14400 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
14410 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
14420 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e  ->szRow = pReg->
14430 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
14440 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
14450 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
14460 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14470 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14480 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
14490 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
144a0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
144b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73  else{.      pCrs
144c0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
144d0 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  or;.      assert
144e0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
144f0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
14500 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14510 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73  Crsr );.      as
14520 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
14530 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
14540 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
14550 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
14560 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
14570 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
14580 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  ;.      pC->aRow
14590 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
145a0 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73  ayloadFetch(pCrs
145b0 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a  r, &pC->szRow);.
145c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
145d0 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79  ->szRow<=pC->pay
145e0 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20  loadSize );.    
145f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a    assert( pC->sz
14600 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  Row<=65536 );  /
14610 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
14620 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
14630 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
14640 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
14650 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
14660 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
14670 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14680 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
14690 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
146a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
146b0 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
146c0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
146d0 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
146e0 61 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d  aRow, aOffset[0]
146f0 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
14700 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20  arsed = 0;...   
14710 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61   if( pC->szRow<a
14720 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20  Offset[0] ){    
14730 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
14740 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
14750 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
14760 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
14770 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
14780 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
14790 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
147a0 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
147b0 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
147c0 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
147d0 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
147e0 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
147f0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
14800 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
14810 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
14820 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
14830 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
14840 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
14850 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
14860 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
14870 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
14880 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
14890 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
148a0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
148b0 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
148c0 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
148d0 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
148e0 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
148f0 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
14900 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
14910 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
14920 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
14930 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
14940 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
14950 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
14960 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
14970 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
14980 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
14990 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
149a0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
149b0 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
149c0 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
149d0 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
149e0 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
149f0 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
14a00 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
14a10 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
14a20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
14a30 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
14a40 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
14a50 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
14a60 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
14a70 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
14a80 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
14a90 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b      if( aOffset[
14aa0 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f  0] > 98307 || aO
14ab0 66 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70  ffset[0] > pC->p
14ac0 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
14ad0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14ae0 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20  lumn_corrupt;.  
14af0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
14b00 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69  .      /* This i
14b10 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
14b20 6e 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20  n.  By skipping 
14b30 6f 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66  over the first f
14b40 65 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a  ew tests.      *
14b50 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50  * (ex: pC->nHdrP
14b60 61 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68  arsed<=p2) in th
14b70 65 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20  e next section, 
14b80 77 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20  we achieve a.   
14b90 20 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65     ** measurable
14ba0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69   performance gai
14bb0 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
14bc0 20 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68    ** This branch
14bd0 20 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69   is taken even i
14be0 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e  f aOffset[0]==0.
14bf0 20 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20    Such a record 
14c00 69 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a  is never.      *
14c10 2a 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53  * generated by S
14c20 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64  QLite, and could
14c30 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63   be considered c
14c40 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77  orruption, but w
14c50 65 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70  e.      ** accep
14c60 74 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69  t it for histori
14c70 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68  cal reasons.  Wh
14c80 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30  en aOffset[0]==0
14c90 2c 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a  , the code this.
14ca0 20 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20        ** branch 
14cb0 6a 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70  jumps to reads p
14cc0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
14cd0 68 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e  he record, but n
14ce0 65 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20  ever more.      
14cf0 2a 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79  ** than a few by
14d00 74 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68  tes.  Even if th
14d10 65 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20  e record occurs 
14d20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14d30 65 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20  e page.      ** 
14d40 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68  content area, th
14d50 65 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20  e "page header" 
14d60 63 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20  comes after the 
14d70 70 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64  page content and
14d80 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69   so.      ** thi
14d90 73 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61  s overread is ha
14da0 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72  rmless.  Similar
14db0 20 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f   overreads can o
14dc0 63 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75  ccur for a corru
14dd0 70 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61  pt.      ** data
14de0 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20  base file..     
14df0 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20   */.      zData 
14e00 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
14e10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
14e20 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
14e30 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
14e40 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
14e50 2f 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  /.      testcase
14e60 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20  ( aOffset[0]==0 
14e70 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  );.      goto op
14e80 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
14e90 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  der;.    }.  }..
14ea0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
14eb0 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73  t least the firs
14ec0 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f  t p2+1 entries o
14ed0 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76  f the header hav
14ee0 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73  e been.  ** pars
14ef0 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66  ed and valid inf
14f00 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61  ormation is in a
14f10 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d  Offset[] and pC-
14f20 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20  >aType[]..  */. 
14f30 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
14f40 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
14f50 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
14f60 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
14f70 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
14f80 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
14f90 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
14fa0 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
14fb0 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
14fc0 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
14fd0 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
14fe0 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
14ff0 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
15000 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
15010 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
15020 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
15030 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
15040 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
15050 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
15060 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
15070 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
15080 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
15090 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
150a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
150b0 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43  mBtree(pC->uc.pC
150c0 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65  ursor, 0, aOffse
150d0 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  t[0], &sMem);.  
150e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
150f0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
15100 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15110 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  r;.        zData
15120 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a   = (u8*)sMem.z;.
15130 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15140 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
15150 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20  >aRow;.      }. 
15160 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20   .      /* Fill 
15170 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20  in pC->aType[i] 
15180 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76  and aOffset[i] v
15190 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68  alues through th
151a0 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a  e p2-th field. *
151b0 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
151c0 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
151d0 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
151e0 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
151f0 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
15200 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
15210 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
15220 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
15230 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
15240 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
15250 20 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64     testcase( zHd
15260 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  r>=zEndHdr );.  
15270 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
15280 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d  if( (t = zHdr[0]
15290 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  )<0x80 ){.      
152a0 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
152b0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
152c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65  = sqlite3VdbeOne
152d0 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65  ByteSerialTypeLe
152e0 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  n(t);.        }e
152f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
15300 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Hdr += sqlite3Ge
15310 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
15320 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  &t);.          o
15330 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
15340 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15350 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
15360 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54  }.        pC->aT
15370 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20  ype[i++] = t;.  
15380 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
15390 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36   = (u32)(offset6
153a0 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b  4 & 0xffffffff);
153b0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
153c0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
153d0 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f  dHdr );..      /
153e0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
153f0 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
15400 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15410 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20  are true:.      
15420 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73  ** (1) the bytes
15430 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65   of the header e
15440 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64  xtend past the d
15450 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73  eclared header s
15460 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29  ize.      ** (2)
15470 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64   the entire head
15480 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20  er was used but 
15490 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73  not all data was
154a0 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28   used.      ** (
154b0 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  3) the end of th
154c0 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62  e data extends b
154d0 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66  eyond the end of
154e0 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
154f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
15500 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26  (zHdr>=zEndHdr &
15510 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20  & (zHdr>zEndHdr 
15520 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d  || offset64!=pC-
15530 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20  >payloadSize)). 
15540 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
15550 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  64 > pC->payload
15560 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
15570 20 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73         if( aOffs
15580 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  et[0]==0 ){.    
15590 20 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20        i = 0;.   
155a0 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45         zHdr = zE
155b0 6e 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d  ndHdr;.        }
155c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
155d0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
155e0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
155f0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
15600 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f            goto o
15610 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74  p_column_corrupt
15620 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15630 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e    }..      pC->n
15640 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20  HdrParsed = i;. 
15650 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66       pC->iHdrOff
15660 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72  set = (u32)(zHdr
15670 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20   - zData);.     
15680 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
15690 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
156a0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
156b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
156c0 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a    t = 0;.    }..
156d0 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20      /* If after 
156e0 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63  trying to extrac
156f0 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72  t new entries fr
15700 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e  om the header, n
15710 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20  HdrParsed is.   
15720 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70   ** still not up
15730 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61   to p2, that mea
15740 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ns that the reco
15750 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61  rd has fewer tha
15760 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75  n p2.    ** colu
15770 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73  mns.  So the res
15780 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68  ult will be eith
15790 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  er the default v
157a0 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a  alue or a NULL..
157b0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
157c0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
157d0 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  2 ){.      if( p
157e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d  Op->p4type==P4_M
157f0 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  EM ){.        sq
15800 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
15810 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
15820 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
15830 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20  _Static);.      
15840 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
15850 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15860 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
15870 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
15880 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
15890 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
158a0 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
158b0 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45  p2];.  }..  /* E
158c0 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
158d0 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
158e0 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
158f0 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
15900 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
15910 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
15920 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
15930 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  , and pC->aType[
15940 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
15950 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
15960 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
15970 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
15980 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
15990 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  _OK );.  assert(
159a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
159b0 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70  kMemInvariants(p
159c0 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56  Dest) );.  if( V
159d0 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44  dbeMemDynamic(pD
159e0 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  est) ){.    sqli
159f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
15a00 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20  l(pDest);.  }.  
15a10 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61  assert( t==pC->a
15a20 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66  Type[p2] );.  if
15a30 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
15a40 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
15a50 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
15a60 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
15a70 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
15a80 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
15a90 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
15aa0 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
15ab0 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
15ac0 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
15ad0 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44  w page */.    zD
15ae0 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b  ata = pC->aRow +
15af0 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20   aOffset[p2];.  
15b00 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20    if( t<12 ){.  
15b10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15b20 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20  erialGet(zData, 
15b30 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
15b40 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49  else{.      /* I
15b50 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
15b60 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20  ue is a string, 
15b70 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73  we need a persis
15b80 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a  tent value, not.
15b90 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45        ** a MEM_E
15ba0 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69  phem value.  Thi
15bb0 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61  s branch is a fa
15bc0 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61  st short-cut tha
15bd0 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  t is equivalent.
15be0 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c        ** to call
15bf0 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53  ing sqlite3VdbeS
15c00 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73  erialGet() and s
15c10 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65  qlite3VdbeDeephe
15c20 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20  meralize()..    
15c30 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69    */.      stati
15c40 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61  c const u16 aFla
15c50 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62  g[] = { MEM_Blob
15c60 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65  , MEM_Str|MEM_Te
15c70 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73  rm };.      pDes
15c80 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d  t->n = len = (t-
15c90 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65  12)/2;.      pDe
15ca0 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
15cb0 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44  ng;.      if( pD
15cc0 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20  est->szMalloc < 
15cd0 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20  len+2 ){.       
15ce0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
15cf0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
15d00 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15d10 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20  eMemGrow(pDest, 
15d20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f  len+2, 0) ) goto
15d30 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d   no_mem;.      }
15d40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44  else{.        pD
15d50 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e  est->z = pDest->
15d60 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d  zMalloc;.      }
15d70 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44  .      memcpy(pD
15d80 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
15d90 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  en);.      pDest
15da0 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20  ->z[len] = 0;.  
15db0 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
15dc0 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  +1] = 0;.      p
15dd0 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46  Dest->flags = aF
15de0 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a  lag[t&1];.    }.
15df0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65    }else{.    pDe
15e00 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
15e10 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  ng;.    /* This 
15e20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
15e30 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74  nly when content
15e40 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20   is on overflow 
15e50 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28  pages */.    if(
15e60 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50   ((pOp->p5 & (OP
15e70 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f  FLAG_LENGTHARG|O
15e80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
15e90 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26  )!=0.          &
15ea0 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
15eb0 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
15ec0 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
15ed0 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20  OFARG)!=0)).    
15ee0 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74   || (len = sqlit
15ef0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15f00 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29  Len(t))==0.    )
15f10 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65  {.      /* Conte
15f20 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
15f30 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20   for.      **   
15f40 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29   1. the typeof()
15f50 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20   function,.     
15f60 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65   **    2. the le
15f70 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
15f80 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c   if X is a blob,
15f90 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20   and.      **   
15fa0 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65   3. if the conte
15fb0 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72  nt length is zer
15fc0 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77  o..      ** So w
15fd0 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
15fe0 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  use bogus conten
15ff0 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
16000 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63  ading.      ** c
16010 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
16020 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  . .      **.    
16030 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71    ** Although sq
16040 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
16050 65 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74  et() may read at
16060 20 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72   most 8 bytes fr
16070 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  om the.      ** 
16080 62 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f  buffer passed to
16090 20 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66   it, debugging f
160a0 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50  unction VdbeMemP
160b0 72 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79  rettyPrint() may
160c0 0a 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75  .      ** read u
160d0 70 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62  p to 16. So 16 b
160e0 79 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f  ytes of bogus co
160f0 6e 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65  ntent is supplie
16100 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
16110 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72    static u8 aZer
16120 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20  o[16];  /* This 
16130 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e  is the bogus con
16140 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71  tent */.      sq
16150 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
16160 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65  et(aZero, t, pDe
16170 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
16180 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16190 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
161a0 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ee(pC->uc.pCurso
161b0 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
161c0 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  len, pDest);.   
161d0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
161e0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
161f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16200 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
16210 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73  eSerialGet((cons
16220 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20  t u8*)pDest->z, 
16230 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  t, pDest);.     
16240 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
16250 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20   ~MEM_Ephem;.   
16260 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d   }.  }..op_colum
16270 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
16280 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
16290 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
162a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
162b0 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
162c0 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75  .op_column_corru
162d0 70 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d  pt:.  if( aOp[0]
162e0 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70  .p3>0 ){.    pOp
162f0 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70   = &aOp[aOp[0].p
16300 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  3-1];.    break;
16310 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
16320 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
16330 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f  T_BKPT;.    goto
16340 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16350 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f  ror;.  }.}../* O
16360 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
16370 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
16380 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
16390 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
163a0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
163b0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
163c0 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
163d0 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
163e0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
163f0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
16400 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
16410 2e 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61  . The N-th chara
16420 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
16430 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
16440 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
16450 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
16460 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
16470 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63  N-th.** memory c
16480 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
16490 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
164a0 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
164b0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
164c0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
164d0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
164e0 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  d */..  zAffinit
164f0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16500 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
16510 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
16520 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
16530 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
16540 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
16550 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
16560 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f  m[pOp->p1];.  do
16570 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
16580 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
16590 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
165a0 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
165b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
165c0 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
165d0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
165e0 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  n1, *(zAffinity+
165f0 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  +), encoding);. 
16600 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68     pIn1++;.  }wh
16610 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
16620 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ] );.  break;.}.
16630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65  ./* Opcode: Make
16640 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20  Record P1 P2 P3 
16650 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
16660 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b  : r[P3]=mkrec(r[
16670 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f  P1@P2]).**.** Co
16680 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
16690 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
166a0 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72  h P1 into the [r
166b0 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a  ecord format].**
166c0 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
166d0 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
166e0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
166f0 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
16700 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f  ndex.  The OP_Co
16710 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
16720 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
16730 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  d later..**.** P
16740 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e  4 may be a strin
16750 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
16760 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
16770 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65  he N-th characte
16780 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
16790 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
167a0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
167b0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
167c0 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74  used for the N-t
167d0 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  h.** field of th
167e0 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a  e index key..**.
167f0 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66  ** The mapping f
16800 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f  rom character to
16810 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76   affinity is giv
16820 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45  en by the SQLITE
16830 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20  _AFF_.** macros 
16840 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74  defined in sqlit
16850 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66  eInt.h..**.** If
16860 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P4 is NULL then
16870 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64   all index field
16880 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e  s have the affin
16890 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73  ity BLOB..*/.cas
168a0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  e OP_MakeRecord:
168b0 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63   {.  u8 *zNewRec
168c0 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ord;        /* A
168d0 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20   buffer to hold 
168e0 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
168f0 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
16900 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20   Mem *pRec;     
16910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
16920 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75  ew record */.  u
16930 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20  64 nData;       
16940 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16950 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
16960 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
16970 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  nHdr;           
16980 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16990 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
169a0 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e  space */.  i64 n
169b0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
169c0 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
169d0 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
169e0 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  s record */.  i6
169f0 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  4 nZero;        
16a00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16a10 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
16a20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
16a30 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
16a40 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20  Varint;         
16a50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16a60 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74  ytes in a varint
16a70 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c   */.  u32 serial
16a80 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20  _type;       /* 
16a90 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20  Type field */.  
16aa0 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20  Mem *pData0;    
16ab0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
16ac0 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62  field to be comb
16ad0 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65  ined into the re
16ae0 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
16af0 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Last;           
16b00 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f   /* Last field o
16b10 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
16b20 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
16b30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16b40 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
16b50 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16b60 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
16b70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
16b80 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f  finity string fo
16b90 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
16ba0 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61    int file_forma
16bb0 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65  t;       /* File
16bc0 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66   format to use f
16bd0 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  or encoding */. 
16be0 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
16bf0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
16c00 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
16c10 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a  ord[] header */.
16c20 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
16c30 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
16c40 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
16c50 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a  cord[] content *
16c60 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20  /.  u32 len;    
16c70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
16c80 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
16c90 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  */..  /* Assumin
16ca0 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
16cb0 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
16cc0 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
16cd0 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
16ce0 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
16cf0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
16d00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16d10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16d20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16d30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
16d40 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
16d50 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
16d60 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
16d70 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
16d80 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
16d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16dd0 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
16de0 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
16df0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
16e00 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
16e10 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
16e20 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
16e30 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20  so forth..  **. 
16e40 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
16e50 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
16e60 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
16e70 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
16e80 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
16e90 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
16ea0 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
16eb0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
16ec0 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
16ed0 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
16ee0 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
16ef0 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
16f00 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
16f10 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
16f20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
16f30 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20  .  */.  nData = 
16f40 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
16f50 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
16f60 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
16f70 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20   nHdr = 0;      
16f80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16f90 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
16fa0 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72   space */.  nZer
16fb0 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
16fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
16fd0 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
16fe0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16ff0 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  */.  nField = pO
17000 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
17010 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
17020 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
17030 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
17040 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
17050 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  d<=(p->nMem+1 - 
17060 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
17070 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
17080 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
17090 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
170a0 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
170b0 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
170c0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
170d0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
170e0 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
170f0 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
17100 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
17110 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
17120 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
17130 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
17140 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
17150 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
17160 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
17170 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
17180 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
17190 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
171a0 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
171b0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
171c0 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
171d0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
171e0 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
171f0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
17200 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
17210 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
17220 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
17230 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
17240 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
17250 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
17260 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
17270 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23  ity[0] );.  }..#
17280 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
17290 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
172a0 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20  /* NULLs can be 
172b0 73 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66  safely trimmed f
172c0 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74  rom the end of t
172d0 68 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f  he record, as lo
172e0 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68  ng as.  ** as th
172f0 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
17300 69 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64  is 2 or more and
17310 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69   none of the omi
17320 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a  tted columns.  *
17330 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c  * have a non-NUL
17340 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e  L default value.
17350 20 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f    Also, the reco
17360 72 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20  rd must be left 
17370 77 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61  with.  ** at lea
17380 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49  st one field.  I
17390 66 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77  f P5>0 then it w
173a0 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20  ill be one more 
173b0 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e  than the.  ** in
173c0 64 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74  dex of the right
173d0 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74  -most column wit
173e0 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66  h a non-NULL def
173f0 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
17400 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
17410 20 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74     while( (pLast
17420 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
17430 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64  ll)!=0 && nField
17440 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20  >pOp->p5 ){.    
17450 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20    pLast--;.     
17460 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d   nField--;.    }
17470 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
17480 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74  * Loop through t
17490 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74  he elements that
174a0 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68   will make up th
174b0 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75  e record to figu
174c0 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20  re.  ** out how 
174d0 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65  much space is re
174e0 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e  quired for the n
174f0 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a  ew record..  */.
17500 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a    pRec = pLast;.
17510 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
17520 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
17530 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c  c) );.    serial
17540 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
17550 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
17560 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c  ec, file_format,
17570 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20   &len);.    if( 
17580 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
17590 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
175a0 69 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  if( serial_type=
175b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
175c0 20 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d   Values with MEM
175d0 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65  _Null and MEM_Ze
175e0 72 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62  ro are created b
175f0 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61  y xColumn virtua
17600 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  l.        ** tab
17610 6c 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20  le methods that 
17620 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c  never invoke sql
17630 69 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78  ite3_result_xxxx
17640 78 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20  x() while.      
17650 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61    ** computing a
17660 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c  n unchanging col
17670 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20  umn value in an 
17680 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
17690 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76  ..        ** Giv
176a0 65 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20  e such values a 
176b0 73 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c  special internal
176c0 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c  -use-only serial
176d0 2d 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20  -type of 10.    
176e0 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74      ** so that t
176f0 68 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65  hey can be passe
17700 64 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70  d through to xUp
17710 64 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20  date and have.  
17720 20 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20        ** a true 
17730 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f  sqlite3_value_no
17740 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20  change(). */.   
17750 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
17760 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43  ->p5==OPFLAG_NOC
17770 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52  HNG_MAGIC || COR
17780 52 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20  RUPT_DB );.     
17790 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
177a0 20 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   10;.      }else
177b0 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
177c0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
177d0 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
177e0 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
177f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
17800 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
17810 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
17820 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
17830 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
17840 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
17850 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
17860 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
17870 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
17880 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
17890 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
178a0 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
178b0 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
178c0 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
178d0 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
178e0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65  l_type);.    pRe
178f0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
17900 6c 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20  l_type;.    if( 
17910 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62  pRec==pData0 ) b
17920 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d  reak;.    pRec--
17930 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a  ;.  }while(1);..
17940 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
17950 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20  : R-22564-11647 
17960 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e  The header begin
17970 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  s with a single 
17980 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63  varint.  ** whic
17990 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  h determines the
179a0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
179b0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65   bytes in the he
179c0 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74  ader. The varint
179d0 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74  .  ** value is t
179e0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68  he size of the h
179f0 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69  eader in bytes i
17a00 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a  ncluding the siz
17a10 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74  e varint.  ** it
17a20 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63  self. */.  testc
17a30 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29  ase( nHdr==126 )
17a40 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  ;.  testcase( nH
17a50 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28  dr==127 );.  if(
17a60 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20   nHdr<=126 ){.  
17a70 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20    /* The common 
17a80 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72  case */.    nHdr
17a90 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   += 1;.  }else{.
17aa0 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65      /* Rare case
17ab0 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72   of a really lar
17ac0 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  ge header */.   
17ad0 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
17ae0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17af0 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e  );.    nHdr += n
17b00 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20  Varint;.    if( 
17b10 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
17b20 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
17b30 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
17b40 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
17b50 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e  a;.  if( nByte+n
17b60 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Zero>db->aLimit[
17b70 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
17b80 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
17b90 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
17ba0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
17bb0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
17bc0 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
17bd0 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
17be0 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
17bf0 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
17c00 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
17c10 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
17c20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
17c30 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
17c40 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
17c50 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
17c60 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
17c70 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
17c80 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29  ClearAndResize()
17c90 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
17ca0 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
17cb0 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
17cc0 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  /.  if( sqlite3V
17cd0 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
17ce0 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29  size(pOut, (int)
17cf0 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f  nByte) ){.    go
17d00 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
17d10 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
17d20 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
17d30 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
17d40 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
17d50 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
17d60 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
17d70 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
17d80 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
17d90 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
17da0 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
17db0 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63  rial_type = pRec
17dc0 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20  ->uTemp;.    /* 
17dd0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
17de0 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f  6529-47362 Follo
17df0 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  wing the size va
17e00 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20  rint are one or 
17e10 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69  more.    ** addi
17e20 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
17e30 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
17e40 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  */.    i += putV
17e50 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
17e60 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
17e70 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20  ype);           
17e80 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
17e90 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  */.    /* EVIDEN
17ea0 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35  CE-OF: R-64536-5
17eb0 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20  1728 The values 
17ec0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
17ed0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20  in the record.  
17ee0 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
17ef0 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64   follow the head
17f00 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20  er. */.    j += 
17f10 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
17f20 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
17f30 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61  [j], pRec, seria
17f40 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74  l_type); /* cont
17f50 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28  ent */.  }while(
17f60 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
17f70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
17f80 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72  =nHdr );.  asser
17f90 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( j==nByte );..
17fa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17fb0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
17fc0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
17fd0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
17fe0 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
17ff0 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
18000 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
18010 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
18020 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
18030 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
18040 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
18050 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  ero;.  }.  REGIS
18060 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
18070 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
18080 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
18090 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
180a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
180b0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
180c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
180d0 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
180e0 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
180f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
18100 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
18110 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
18120 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
18130 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
18140 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
18150 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18160 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
18170 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
18180 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
18190 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
181a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
181b0 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
181c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
181d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
181e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
181f0 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
18200 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
18210 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
18220 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
18230 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
18240 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
18250 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
18260 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
18270 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
18280 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
18290 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
182a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
182b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
182c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
182d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
182e0 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
182f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
18300 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
18310 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
18320 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
18330 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
18340 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
18350 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
18360 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
18370 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
18380 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
18390 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
183a0 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
183b0 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
183c0 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
183d0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
183e0 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
183f0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
18400 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
18410 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
18420 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
18450 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
18460 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
18490 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
184a0 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
184b0 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
184c0 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
184d0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
184e0 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
184f0 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
18500 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
18510 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
18520 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
18530 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
18540 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
18550 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
18560 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
18570 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
18580 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
18590 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
185a0 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
185b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
185c0 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
185d0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
185e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
185f0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
18600 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
18610 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
18620 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
18630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18640 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
18650 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18660 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
18670 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
18680 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
18690 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
186a0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
186b0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
186c0 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
186d0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
186e0 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
186f0 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
18700 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
18710 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
18720 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
18730 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
18740 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
18750 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
18760 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
18770 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
18780 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18790 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
187a0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
187b0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
187c0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
187d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
187e0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
187f0 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
18800 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
18810 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
18820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18830 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
18840 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
18850 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
18860 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
18870 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
18880 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
18890 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
188a0 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
188b0 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
188c0 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
188d0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
188e0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
188f0 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
18900 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
18910 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
18920 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
18930 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
18940 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
18950 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
18960 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18970 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
18980 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
18990 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
189a0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
189b0 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
189e0 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
189f0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
18a00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18a10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
18a20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
18a30 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
18a40 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
18a50 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
18a60 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
18a70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
18a80 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
18a90 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
18aa0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
18ab0 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
18ac0 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
18ad0 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
18ae0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
18af0 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
18b00 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
18b10 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
18b20 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
18b30 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
18b40 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
18b50 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
18b60 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
18b70 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
18b80 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
18b90 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18ba0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18bb0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
18bc0 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
18bd0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
18be0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
18bf0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
18c00 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
18c10 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
18c20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
18c30 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
18c40 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
18c50 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
18c60 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
18c70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
18c80 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
18c90 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
18ca0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
18cb0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
18cc0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18cd0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
18ce0 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
18cf0 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18d00 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18d10 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
18d20 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
18d30 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
18d40 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
18d50 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
18d60 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
18d70 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
18d80 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
18d90 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
18da0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
18db0 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
18dc0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
18dd0 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
18de0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
18df0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
18e00 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
18e10 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
18e20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
18e30 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
18e40 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
18e50 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
18e60 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
18e70 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
18e80 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
18e90 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
18ea0 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
18eb0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18ec0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
18ed0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
18ee0 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
18ef0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18f00 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
18f10 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
18f20 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
18f30 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
18f40 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
18f50 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
18f60 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
18f70 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
18f80 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
18f90 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
18fa0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
18fb0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
18fd0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18fe0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18ff0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
19000 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
19010 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
19020 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
19030 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
19040 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
19050 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
19060 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
19070 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
19080 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
19090 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
190a0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
190b0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
190c0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
190d0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
190e0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
190f0 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
19100 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
19110 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
19120 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
19130 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
19140 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
19150 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19160 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
19170 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19180 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
19190 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
191a0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
191b0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
191c0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
191d0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
191e0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
191f0 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
19200 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
19210 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19220 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
19230 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
19240 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
19250 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
19260 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
19270 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19280 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
19290 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
192a0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
192b0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
192c0 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
192d0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
192e0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
192f0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19300 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
19310 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
19320 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
19330 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
19340 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
19350 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c  nge = (db->mDbFl
19360 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68  ags & DBFLAG_Sch
19370 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20  emaChange)!=0;. 
19380 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
19390 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
193a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
193b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
193c0 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
193d0 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
193e0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
19410 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c  _ABORT_ROLLBACK,
19420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
19450 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20  Change==0);.    
19460 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
19470 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19480 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19490 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
194a0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
194b0 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
194c0 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  maChange = 0;.  
194d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
194e0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
194f0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
19500 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19510 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
19520 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
19530 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
19540 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
19550 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19560 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
19570 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19580 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
19590 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
195a0 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65        if( isSche
195b0 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20  maChange ){.    
195c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
195d0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
195e0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
195f0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
19600 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
19610 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
19620 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c         db->mDbFl
19630 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63  ags |= DBFLAG_Sc
19640 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
19650 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
19660 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
19670 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
19680 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
19690 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
196a0 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
196b0 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
196c0 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
196d0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
196e0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
196f0 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
19700 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
19710 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
19720 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
19730 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
19740 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
19750 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
19760 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
19770 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19780 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
19790 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
197a0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
197b0 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
197c0 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
197d0 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
197e0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
197f0 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
19800 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
19810 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
19820 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
19830 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
19840 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
19850 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
19860 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
19870 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
19880 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
19890 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
198a0 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
198b0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
198c0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
198d0 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
198e0 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
198f0 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
19900 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
19910 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
19920 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
19930 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
19940 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
19950 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
19960 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
19970 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
19980 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
19990 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
199a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
199b0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
199c0 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
199d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
199e0 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
199f0 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53  rredImmCons = pS
19a00 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
19a10 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
19a20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
19a30 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c  isTransaction ||
19a40 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
19a50 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
19a60 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
19a70 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
19a80 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
19a90 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
19aa0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19ab0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19ac0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
19ad0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
19ae0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
19af0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
19b00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19b10 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
19b20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
19b30 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
19b40 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
19b50 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
19b60 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
19b70 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
19b80 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
19b90 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
19ba0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
19bb0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
19bc0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
19bd0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
19be0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
19bf0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
19c00 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
19c10 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
19c20 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
19c30 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
19c40 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
19c50 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
19c60 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
19c70 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
19c80 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
19c90 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
19ca0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
19cb0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a  int iRollback;..
19cc0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
19cd0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
19ce0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
19cf0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
19d00 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19d10 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
19d20 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
19d30 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
19d40 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
19d50 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
19d60 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
19d70 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
19d80 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
19d90 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
19da0 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
19db0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
19dc0 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41  ..  if( desiredA
19dd0 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
19de0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
19df0 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
19e00 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
19e10 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19e20 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
19e30 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
19e40 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
19e50 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
19e60 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
19e70 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
19e80 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
19e90 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56  Commit && db->nV
19ea0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
19eb0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
19ec0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
19ed0 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
19ee0 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
19ef0 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a   writing.      *
19f00 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
19f10 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
19f20 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
19f30 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
19f40 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  rst. .      */. 
19f50 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
19f60 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
19f70 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
19f80 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
19fb0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
19fc0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19fd0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
19fe0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19ff0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
1a000 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
1a010 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
1a020 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
1a030 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
1a040 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
1a050 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
1a060 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
1a070 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
1a080 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mit;.    }.    i
1a090 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
1a0a0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
1a0b0 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
1a0c0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
1a0d0 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  aOp);.      db->
1a0e0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
1a0f0 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
1a100 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d  ommit);.      p-
1a110 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
1a120 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
1a130 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1a140 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1a150 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
1a160 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
1a170 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
1a180 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
1a190 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
1a1a0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
1a1b0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
1a1c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
1a1d0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
1a1e0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
1a1f0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
1a200 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
1a210 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
1a220 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
1a230 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
1a240 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
1a250 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
1a260 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
1a270 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
1a280 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
1a290 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
1a2a0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
1a2d0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
1a2e0 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
1a2f0 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
1a300 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
1a310 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
1a320 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a330 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1a340 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
1a350 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
1a360 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
1a370 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
1a380 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
1a390 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
1a3a0 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
1a3b0 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
1a3c0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1a3d0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
1a3e0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1a3f0 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
1a400 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
1a410 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
1a420 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
1a430 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
1a440 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
1a450 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
1a460 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
1a470 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
1a480 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
1a490 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
1a4a0 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
1a4b0 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
1a4c0 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
1a4d0 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
1a4e0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1a4f0 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
1a500 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
1a510 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
1a520 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
1a530 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
1a540 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
1a550 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
1a560 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
1a570 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
1a580 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
1a590 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
1a5a0 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
1a5b0 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
1a5c0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
1a5d0 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
1a5e0 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
1a5f0 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
1a600 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1a610 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
1a620 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a630 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
1a640 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
1a650 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
1a660 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1a670 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
1a680 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
1a690 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
1a6a0 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
1a6b0 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
1a6c0 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
1a6d0 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
1a6e0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
1a6f0 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
1a700 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
1a710 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
1a720 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
1a730 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
1a740 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1a750 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
1a760 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
1a770 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
1a780 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
1a790 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
1a7a0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
1a7b0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
1a7c0 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
1a7d0 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
1a7e0 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
1a7f0 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
1a800 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1a810 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
1a820 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
1a830 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
1a840 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
1a850 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
1a860 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
1a870 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
1a880 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
1a890 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
1a8a0 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
1a8b0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1a8c0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
1a8d0 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
1a8e0 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
1a8f0 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
1a900 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
1a910 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
1a920 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
1a930 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
1a940 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
1a950 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
1a960 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
1a970 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
1a980 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
1a990 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
1a9a0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
1a9b0 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
1a9c0 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
1a9d0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1a9e0 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
1a9f0 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
1aa00 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
1aa10 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
1aa20 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
1aa30 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
1aa40 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
1aa50 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
1aa60 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
1aa70 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
1aa80 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
1aa90 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
1aaa0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
1aab0 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
1aac0 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65 72 74 28   = 0;..  assert(
1aad0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1aae0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
1aaf0 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70  adOnly==0 || pOp
1ab00 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p2==0 );.  ass
1ab10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ab20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
1ab30 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1ab40 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1ab50 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
1ab60 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ) );.  if( pOp->
1ab70 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  p2 && (db->flags
1ab80 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f   & SQLITE_QueryO
1ab90 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72  nly)!=0 ){.    r
1aba0 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  c = SQLITE_READO
1abb0 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  NLY;.    goto ab
1abc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1abd0 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62  ;.  }.  pBt = db
1abe0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1abf0 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29  Bt;..  if( pBt )
1ac00 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1ac10 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1ac20 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  s(pBt, pOp->p2, 
1ac30 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 74 65 73  &iMeta);.    tes
1ac40 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
1ac50 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20  E_BUSY_SNAPSHOT 
1ac60 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
1ac70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
1ac80 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20  _RECOVERY );.   
1ac90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1aca0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  OK ){.      if( 
1acb0 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
1acc0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
1acd0 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
1ace0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
1acf0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a      p->rc = rc;.
1ad00 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
1ad10 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
1ad20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  }.      goto abo
1ad30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1ad40 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
1ad50 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
1ad60 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
1ad70 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
1ad80 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
1ad90 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
1ada0 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
1adb0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
1adc0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
1add0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
1ade0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
1adf0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ae00 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
1ae10 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
1ae20 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
1ae30 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
1ae40 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
1ae50 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
1ae60 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
1ae70 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
1ae80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
1ae90 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1aea0 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
1aeb0 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
1aec0 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
1aed0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1aee0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1aef0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1af00 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
1af10 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
1af20 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1af30 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
1af40 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
1af50 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
1af60 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
1af70 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
1af80 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
1af90 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1afa0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
1afb0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
1afc0 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
1afd0 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
1afe0 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
1aff0 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
1b000 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
1b010 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
1b020 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
1b030 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
1b040 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1b050 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
1b060 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1b070 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1b080 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1b090 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
1b0a0 2d 3e 70 35 0a 20 20 20 26 26 20 28 69 4d 65 74  ->p5.   && (iMet
1b0b0 61 21 3d 70 4f 70 2d 3e 70 33 0a 20 20 20 20 20  a!=pOp->p3.     
1b0c0 20 7c 7c 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   || db->aDb[pOp-
1b0d0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47  >p1].pSchema->iG
1b0e0 65 6e 65 72 61 74 69 6f 6e 21 3d 70 4f 70 2d 3e  eneration!=pOp->
1b0f0 70 34 2e 69 29 0a 20 20 29 7b 0a 20 20 20 20 2f  p4.i).  ){.    /
1b100 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  *.    ** IMPLEME
1b110 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33  NTATION-OF: R-03
1b120 31 38 39 2d 35 31 31 33 35 20 41 73 20 65 61 63  189-51135 As eac
1b130 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
1b140 72 75 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61  runs, the schema
1b150 0a 20 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20  .    ** version 
1b160 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e  is checked to en
1b170 73 75 72 65 20 74 68 61 74 20 74 68 65 20 73 63  sure that the sc
1b180 68 65 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61  hema has not cha
1b190 6e 67 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20  nged since the. 
1b1a0 20 20 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d     ** SQL statem
1b1b0 65 6e 74 20 77 61 73 20 70 72 65 70 61 72 65 64  ent was prepared
1b1c0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
1b1d0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1b1e0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
1b1f0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
1b200 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
1b210 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
1b220 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
1b230 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
1b240 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
1b250 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1b260 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
1b270 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
1b280 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
1b290 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
1b2a0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
1b2b0 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
1b2c0 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
1b2d0 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
1b2e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
1b2f0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
1b300 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
1b310 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
1b320 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
1b330 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
1b340 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
1b350 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
1b360 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
1b370 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
1b380 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
1b390 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
1b3a0 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
1b3b0 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
1b3c0 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
1b3d0 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
1b3e0 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
1b3f0 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
1b400 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
1b410 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
1b420 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
1b430 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
1b440 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
1b450 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
1b460 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
1b470 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
1b480 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
1b490 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
1b4a0 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
1b4b0 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
1b4c0 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
1b4d0 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
1b4e0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
1b4f0 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
1b500 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
1b510 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
1b520 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
1b530 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
1b540 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
1b550 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
1b560 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
1b570 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  );.    }.    p->
1b580 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
1b590 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
1b5a0 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  EMA;.  }.  if( r
1b5b0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1b5c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
1b5d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1b5e0 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
1b5f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1b600 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
1b610 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
1b620 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
1b630 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
1b640 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31  ter P2..** P3==1
1b650 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
1b660 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69  ersion.  P3==2 i
1b670 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1b680 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20  ormat..** P3==3 
1b690 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
1b6a0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
1b6b0 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
1b6c0 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
1b6d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1b6e0 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
1b6f0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
1b700 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1b710 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
1b720 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   tables..**.** T
1b730 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
1b740 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
1b750 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
1b760 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
1b770 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
1b780 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
1b790 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
1b7a0 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
1b7b0 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
1b7c0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1b7d0 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
1b7e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1b7f0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
1b800 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
1b810 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
1b820 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
1b830 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69  bIsReader );.  i
1b840 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
1b850 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
1b860 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
1b870 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
1b880 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1b890 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1b8a0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1b8b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
1b8c0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
1b8d0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1b8e0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1b8f0 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71  k, iDb) );..  sq
1b900 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
1b910 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
1b920 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
1b930 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
1b940 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
1b950 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
1b960 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74  pOut->u.i = iMet
1b970 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  a;.  break;.}../
1b980 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
1b990 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1b9a0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
1b9b0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
1b9c0 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  3 into cookie nu
1b9d0 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
1b9e0 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31  ase P1..** P2==1
1b9f0 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
1ba00 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69  ersion.  P2==2 i
1ba10 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1ba20 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20  ormat..** P2==3 
1ba30 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
1ba40 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
1ba50 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
1ba60 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1ba70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ba80 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
1ba90 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
1baa0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1bab0 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
1bac0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
1bad0 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
1bae0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
1baf0 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
1bb00 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1bb10 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
1bb20 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  e: {.  Db *pDb;.
1bb30 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
1bb40 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
1bb50 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
1bb60 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
1bb70 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1bb80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1bb90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1bba0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1bbb0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1bbc0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1bbd0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
1bbe0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1bbf0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1bc00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
1bc10 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
1bc20 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1bc30 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1bc40 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
1bc50 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f  p->p1, 0) );.  /
1bc60 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1bc70 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1bc80 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1bc90 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1bca0 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1bcb0 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1bcc0 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  >p2, pOp->p3);. 
1bcd0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1bce0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1bcf0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1bd00 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1bd10 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1bd20 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1bd30 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1bd40 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1bd50 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1bd60 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
1bd70 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20  db->mDbFlags |= 
1bd80 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
1bd90 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nge;.  }else if(
1bda0 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1bdb0 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20  FILE_FORMAT ){. 
1bdc0 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
1bdd0 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
1bde0 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
1bdf0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1be00 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e  e_format = pOp->
1be10 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  p3;.  }.  if( pO
1be20 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
1be30 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
1be40 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
1be50 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
1be60 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
1be70 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
1be80 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
1be90 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
1bea0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
1beb0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
1bec0 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
1bed0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  red = 0;.  }.  i
1bee0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1bef0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1bf00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bf10 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1bf20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1bf30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1bf40 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1bf50 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1bf60 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1bf70 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1bf80 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1bf90 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1bfa0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1bfb0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1bfc0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1bfd0 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1bfe0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1bff0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1c000 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1c010 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1c020 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1c030 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1c040 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1c050 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1c060 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1c070 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1c080 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1c090 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1c0a0 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1c0b0 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1c0c0 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1c0d0 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1c0e0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1c0f0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1c100 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1c110 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77  ive..**.** Allow
1c120 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c  ed P5 bits:.** <
1c130 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  ul>.** <li>  <b>
1c140 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b  0x02 OPFLAG_SEEK
1c150 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  EQ</b>: This cur
1c160 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  sor will only be
1c170 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20   used for.**    
1c180 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b     equality look
1c190 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64  ups (implemented
1c1a0 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70   as a pair of op
1c1b0 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f  codes OP_SeekGE/
1c1c0 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20  OP_IdxGT.**     
1c1d0 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f    of OP_SeekLE/O
1c1e0 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c  P_IdxGT).** </ul
1c1f0 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  >.**.** The P4 v
1c200 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1c210 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1c220 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1c230 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1c240 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1c250 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1c260 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1c270 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1c280 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74  * object, then t
1c290 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1c2a0 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e  d must be an [in
1c2b0 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72  dex b-tree] wher
1c2c0 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f  e the.** KeyInfo
1c2d0 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20   object defines 
1c2e0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1c2f0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1c300 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69  quence of that i
1c310 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68  ndex b-tree. Oth
1c320 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1c330 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1c340 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
1c350 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1c360 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61  ed must be a [ta
1c370 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68  ble b-tree] with
1c380 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20   a.** number of 
1c390 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20  columns no less 
1c3a0 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  than the value o
1c3b0 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  f P4..**.** See 
1c3c0 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1c3d0 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1c3e0 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1c3f0 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1c400 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1c410 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1c420 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1c430 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  x opcode works l
1c440 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20  ike OP_OpenRead 
1c450 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1c460 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1c470 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1c480 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1c490 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68 65  eady open on the
1c4a0 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65 20   same.** b-tree 
1c4b0 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1c4c0 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1c4d0 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1c4e0 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1c4f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1c500 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1c510 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1c520 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1c530 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1c540 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1c550 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50 46  P5==0 or P5==OPF
1c560 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61 6e  LAG_SEEKEQ.** an
1c570 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 20  d with P4 being 
1c580 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1c590 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1c5a0 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1c5b0 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65 20 73  must.** be the s
1c5c0 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f 74 68  ame as every oth
1c5d0 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1c5e0 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1c5f0 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a 20   same cursor.** 
1c600 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c  number..**.** Al
1c610 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a  lowed P5 bits:.*
1c620 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20  * <ul>.** <li>  
1c630 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53  <b>0x02 OPFLAG_S
1c640 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20  EEKEQ</b>: This 
1c650 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79  cursor will only
1c660 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   be used for.** 
1c670 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c        equality l
1c680 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e  ookups (implemen
1c690 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66  ted as a pair of
1c6a0 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b   opcodes OP_Seek
1c6b0 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20  GE/OP_IdxGT.**  
1c6c0 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c       of OP_SeekL
1c6d0 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c  E/OP_IdxGT).** <
1c6e0 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  /ul>.**.** See a
1c6f0 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64  lso: OP_OpenRead
1c700 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a 2a  , OP_OpenWrite.*
1c710 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1c720 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
1c730 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1c740 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1c750 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1c760 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1c770 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
1c780 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1c790 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
1c7a0 67 65 20 69 73 20 50 32 20 28 6f 72 20 77 68 6f  ge is P2 (or who
1c7b0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20  se root page is 
1c7c0 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
1c7d0 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f 50   P2 if the.** OP
1c7e0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62 69 74  FLAG_P2ISREG bit
1c7f0 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 2d 20   is set in P5 - 
1c800 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a  see below)..**.*
1c810 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1c820 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1c830 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1c840 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1c850 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1c860 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1c870 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1c880 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1c890 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65  KeyInfo .** obje
1c8a0 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62  ct, then table b
1c8b0 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74  eing opened must
1c8c0 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d   be an [index b-
1c8d0 74 72 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a  tree] where the.
1c8e0 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  ** KeyInfo objec
1c8f0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  t defines the co
1c900 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1c910 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1c920 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20 62   of that index b
1c930 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65  -tree. Otherwise
1c940 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1c950 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1c960 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1c970 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73  being opened mus
1c980 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d  t be a [table b-
1c990 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20  tree] with a.** 
1c9a0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c9b0 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74  s no less than t
1c9c0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a  he value of P4..
1c9d0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1c9e0 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1c9f0 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1ca00 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1ca10 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1ca20 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1ca30 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1ca40 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1ca50 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1ca60 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1ca70 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1ca80 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1ca90 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1caa0 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  GT).** <li>  <b>
1cab0 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52 44  0x08 OPFLAG_FORD
1cac0 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73 20  ELETE</b>: This 
1cad0 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f  cursor is used o
1cae0 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20 20  nly to seek.**  
1caf0 20 20 20 20 20 61 6e 64 20 73 75 62 73 65 71 75       and subsequ
1cb00 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65 6e 74  ently delete ent
1cb10 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  ries in an index
1cb20 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
1cb30 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e 74   a.**       hint
1cb40 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67 65 20   to the storage 
1cb50 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68 65 20  engine that the 
1cb60 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 69  storage engine i
1cb70 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a 20  s allowed to.** 
1cb80 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20 20 54        ignore.  T
1cb90 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74 20 75  he hint is not u
1cba0 73 65 64 20 62 79 20 74 68 65 20 6f 66 66 69 63  sed by the offic
1cbb0 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74 72 65  ial SQLite b*tre
1cbc0 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20 20  e storage.**    
1cbd0 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74 20 69     engine, but i
1cbe0 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44 42 32  s used by COMDB2
1cbf0 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78  ..** <li>  <b>0x
1cc00 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  10 OPFLAG_P2ISRE
1cc10 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65 20 63  G</b>: Use the c
1cc20 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1cc30 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20 20 61  er P2.**       a
1cc40 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
1cc50 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
1cc60 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 20  f P2 itself..** 
1cc70 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  </ul>.**.** This
1cc80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
1cc90 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  ks like OpenRead
1cca0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1ccb0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
1ccc0 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
1ccd0 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  e mode..**.** Se
1cce0 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52  e also: OP_OpenR
1ccf0 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49 64  ead, OP_ReopenId
1cd00 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f  x.*/.case OP_Reo
1cd10 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20  penIdx: {.  int 
1cd20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1cd30 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1cd40 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1cd50 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1cd60 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1cd70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1cd80 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1cd90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1cda0 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1cdb0 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1cdc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1cdd0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1cde0 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   );.  pCur = p->
1cdf0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1ce00 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43    if( pCur && pC
1ce10 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75  ur->pgnoRoot==(u
1ce20 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  32)pOp->p2 ){.  
1ce30 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
1ce40 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20  iDb==pOp->p3 ); 
1ce50 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65       /* Guarante
1ce60 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67  ed by the code g
1ce70 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  enerator */.    
1ce80 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72  goto open_cursor
1ce90 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a  _set_hints;.  }.
1cea0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
1ceb0 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  or is not curren
1cec0 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f  tly open or is o
1ced0 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65  pen on a differe
1cee0 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74  nt.  ** index, t
1cef0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1cf00 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61   into OP_OpenRea
1cf10 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f  d to force a reo
1cf20 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  pen */.case OP_O
1cf30 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
1cf40 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61  _OpenWrite:..  a
1cf50 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1cf60 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1cf70 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c   || pOp->p5==0 |
1cf80 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1cf90 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1cfa0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1cfb0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1cfc0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1cfd0 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d  OpenRead || pOp-
1cfe0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70  >opcode==OP_Reop
1cff0 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20  enIdx.          
1d000 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  || p->readOnly==
1d010 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  0 );..  if( p->e
1d020 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63  xpired ){.    rc
1d030 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f   = SQLITE_ABORT_
1d040 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f  ROLLBACK;.    go
1d050 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d060 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46  error;.  }..  nF
1d070 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
1d080 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
1d090 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
1d0a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1d0b0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1d0c0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1d0d0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1d0e0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1d0f0 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d   iDb) );.  pDb =
1d100 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1d110 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
1d120 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
1d130 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
1d140 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1d150 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ite ){.    asser
1d160 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  t( OPFLAG_FORDEL
1d170 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45  ETE==BTREE_FORDE
1d180 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c  LETE );.    wrFl
1d190 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52  ag = BTREE_WRCSR
1d1a0 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50   | (pOp->p5 & OP
1d1b0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b  FLAG_FORDELETE);
1d1c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
1d1d0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1d1e0 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
1d1f0 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  );.    if( pDb->
1d200 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1d210 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
1d220 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
1d230 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
1d240 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
1d250 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1d260 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
1d270 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
1d280 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
1d290 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1d2a0 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20  AG_P2ISREG ){.  
1d2b0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29    assert( p2>0 )
1d2c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
1d2d0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
1d2e0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1d2f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1d300 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1d310 69 74 65 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  ite );.    pIn2 
1d320 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1d330 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1d340 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1d350 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1d360 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1d370 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1d380 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1d390 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1d3a0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1d3b0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1d3c0 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1d3d0 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1d3e0 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  r OP_CreateBtree
1d3f0 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1d400 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1d410 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1d420 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1d430 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1d440 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1d450 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1d460 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1d470 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1d480 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1d490 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1d4a0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1d4b0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1d4c0 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1d4d0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1d4e0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1d4f0 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1d500 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1d510 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1d520 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1d530 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1d540 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1d550 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1d560 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1d570 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20  fo->nAllField;. 
1d580 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1d590 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1d5a0 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1d5b0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1d5c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d5d0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1d5e0 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1d5f0 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1d600 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1d610 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1d620 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1d630 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1d640 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1d650 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1d660 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1d670 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1d680 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1d690 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1d6a0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1d6b0 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1d6c0 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1d6d0 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1d6e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d6f0 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1d700 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1d710 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1d720 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1d730 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1d740 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1d750 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1d760 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1d770 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1d780 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1d790 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1d7a0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1d7b0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1d7c0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1d7d0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1d7e0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1d7f0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1d800 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1d810 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1d820 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1d830 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1d840 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1d850 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1d860 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1d870 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1d880 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1d890 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1d8a0 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1d8b0 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1d8c0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1d8d0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1d8e0 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1d8f0 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1d900 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1d910 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1d920 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1d930 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1d940 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1d950 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1d960 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1d970 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1d980 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1d990 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1d9a0 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1d9b0 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1d9e0 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1d9f0 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1da00 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1da10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1da20 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1da30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1da40 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1da50 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1da60 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1da70 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1da80 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1da90 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1daa0 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1dab0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1dac0 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1dad0 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1dae0 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1daf0 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1db00 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1db10 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1db20 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1db30 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1db40 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1db50 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1db60 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1db70 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1db80 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1db90 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1dba0 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1dbb0 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1dbc0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1dbd0 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1dbe0 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1dbf0 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1dc00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1dc10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1dc20 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1dc30 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1dc40 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1dc50 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1dc60 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1dc70 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1dc80 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1dc90 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1dca0 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1dcb0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1dcc0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1dcd0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1dce0 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1dcf0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1dd00 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1dd10 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1dd20 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1dd30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1dd40 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67  treeCursor(pOrig
1dd50 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1dd60 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1dd70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dd80 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1dd90 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1dda0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1ddb0 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1ddc0 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1ddd0 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1dde0 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1ddf0 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1de00 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1de10 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1de20 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1de30 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1de40 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1de50 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1de60 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1de70 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1de80 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1de90 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1dea0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1deb0 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1dec0 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1ded0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1dee0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1def0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1df00 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1df10 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1df20 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1df30 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1df40 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1df50 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1df60 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1df70 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1df80 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1df90 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1dfa0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1dfb0 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1dfc0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1dfd0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1dfe0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1dff0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1e000 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1e010 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1e020 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1e030 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1e040 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1e050 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1e060 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1e070 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1e080 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1e090 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1e0a0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1e0b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1e0c0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1e0d0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1e0e0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1e0f0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1e100 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1e110 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1e120 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1e130 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1e140 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1e150 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1e160 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1e170 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1e180 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1e190 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1e1a0 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1e1b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e1c0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1e1d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1e1e0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1e1f0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1e200 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1e210 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1e220 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1e230 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1e240 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1e250 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1e260 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1e270 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1e280 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1e290 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1e2a0 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1e2b0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1e2c0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1e2d0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1e2e0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1e2f0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1e300 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1e310 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1e320 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1e330 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1e340 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1e350 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1e360 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1e370 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1e380 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1e390 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1e3a0 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1e3b0 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1e3c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1e3d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e3e0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1e3f0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1e400 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1e410 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1e420 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1e430 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1e440 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1e450 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1e460 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1e470 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1e480 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1e490 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1e4a0 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1e4c0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1e4d0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1e4e0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1e4f0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1e500 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e510 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e520 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1e530 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b 0a  x->pBtx, 1, 0);.
1e540 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1e550 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1e560 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1e570 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1e580 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1e590 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1e5a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1e5b0 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1e5c0 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1e5d0 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1e5e0 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1e5f0 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1e600 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1e610 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1e620 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1e630 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1e640 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1e650 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1e660 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1e670 2f 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e  /.    if( (pCx->
1e680 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1e690 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1e6a0 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1e6b0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1e6c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1e6d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1e6e0 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1e6f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1e700 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1e710 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  Btx, &pgno, BTRE
1e720 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1e730 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1e740 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e750 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1e760 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1e770 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1e780 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1e790 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1e7a0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1e7b0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1e7c0 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72  db) );.        r
1e7d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e7e0 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1e7f0 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52  , pgno, BTREE_WR
1e800 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CSR,.           
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70       pKeyInfo, p
1e830 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1e840 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1e850 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1e860 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e880 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1e890 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  Btx, MASTER_ROOT
1e8a0 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
1e8d0 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1e8e0 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1e8f0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1e900 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1e910 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e920 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69  _error;.  pCx->i
1e930 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1e940 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1e950 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1e960 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1e970 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1e980 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1e990 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1e9a0 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1e9b0 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1e9c0 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1e9d0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1e9e0 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1e9f0 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1ea00 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1ea10 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1ea20 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1ea30 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1ea40 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1ea50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1ea60 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1ea70 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1ea80 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1ea90 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1eaa0 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1eab0 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1eac0 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1ead0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1eae0 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1eaf0 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1eb00 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1eb10 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1eb20 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1eb30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1eb40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1eb50 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1eb60 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1eb70 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1eb80 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1eb90 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20  TYPE_SORTER);.  
1eba0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1ebb0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1ebc0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1ebd0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1ebe0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1ebf0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1ec00 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1ec10 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1ec20 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
1ec30 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1ec40 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
1ec50 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20  p3, pCx);.  if( 
1ec60 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1ec70 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ec80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ec90 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73  ode: SequenceTes
1eca0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1ecb0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63   Synopsis: if( c
1ecc0 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20  ursor[P1].ctr++ 
1ecd0 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20  ) pc = P2.**.** 
1ece0 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
1ecf0 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65  ursor. If the se
1ed00 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69  quence counter i
1ed10 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
1ed20 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  , jump.** to P2.
1ed30 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
1ed40 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1ed50 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
1ed60 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a   increment the.*
1ed70 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76  * the sequence v
1ed80 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
1ed90 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b  _SequenceTest: {
1eda0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1edb0 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
1edc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1edd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1ede0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1edf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1ee00 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
1ee10 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e  ) );.  if( (pC->
1ee20 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29  seqCount++)==0 )
1ee30 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
1ee40 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
1ee50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1ee60 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
1ee70 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1ee80 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e  opsis: P3 column
1ee90 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  s in r[P2].**.**
1eea0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1eeb0 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
1eec0 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
1eed0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
1eee0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
1eef0 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
1ef00 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
1ef10 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ow is the conten
1ef20 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
1ef30 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
1ef40 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
1ef50 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
1ef60 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
1ef70 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
1ef80 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
1ef90 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
1efa0 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
1efb0 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
1efc0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
1efd0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
1efe0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
1eff0 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
1f000 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
1f010 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
1f020 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
1f030 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
1f040 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
1f050 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
1f060 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1f070 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
1f080 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
1f090 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
1f0a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
1f0b0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
1f0c0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f0d0 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
1f0e0 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
1f0f0 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
1f100 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1f110 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
1f120 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1f130 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1f140 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1f150 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1f160 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1f170 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1f180 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1f190 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50  3, -1, CURTYPE_P
1f1a0 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43  SEUDO);.  if( pC
1f1b0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1f1c0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1f1d0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73  ow = 1;.  pCx->s
1f1e0 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d  eekResult = pOp-
1f1f0 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1f200 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69  ble = 1;.  /* Gi
1f210 76 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63  ve this pseudo-c
1f220 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43  ursor a fake BtC
1f230 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f  ursor pointer so
1f240 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63   that pCx.  ** c
1f250 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61 73  an be safely pas
1f260 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64  sed to sqlite3Vd
1f270 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
1f280 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 61  .  This avoids a
1f290 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70   test.  ** for p
1f2a0 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  Cx->eCurType==CU
1f2b0 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69  RTYPE_BTREE insi
1f2c0 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62  de of sqlite3Vdb
1f2d0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a  eCursorMoveto().
1f2e0 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20    ** which is a 
1f2f0 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69  performance opti
1f300 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43  mization */.  pC
1f310 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20  x->uc.pCursor = 
1f320 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65  sqlite3BtreeFake
1f330 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20  ValidCursor();. 
1f340 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1f350 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
1f360 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1f370 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1f380 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1f390 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1f3a0 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1f3b0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1f3c0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1f3d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1f3e0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1f3f0 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1f400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f410 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f420 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1f430 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f440 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f450 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1f460 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1f470 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1f480 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1f490 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
1f4a0 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65  D_MASK./* Opcode
1f4b0 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31  : ColumnsUsed P1
1f4c0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
1f4d0 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69  This opcode (whi
1f4e0 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69  ch only exists i
1f4f0 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d  f SQLite was com
1f500 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51  piled with.** SQ
1f510 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1f520 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64  MN_USED_MASK) id
1f530 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63  entifies which c
1f540 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a  olumns of the.**
1f550 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1f560 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72  for cursor P1 ar
1f570 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61  e used.  P4 is a
1f580 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
1f590 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e  ** (P4_INT64) in
1f5a0 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74   which the first
1f5b0 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65   63 bits are one
1f5c0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
1f5d0 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c  .** first 63 col
1f5e0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
1f5f0 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20  e or index that 
1f600 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65  are actually use
1f610 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73  d.** by the curs
1f620 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72  or.  The high-or
1f630 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69  der bit is set i
1f640 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74  f any column aft
1f650 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69  er.** the 64th i
1f660 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  s used..*/.case 
1f670 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20  OP_ColumnsUsed: 
1f680 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1f690 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  pC;.  pC = p->ap
1f6a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1f6b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
1f6c0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1f6d0 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73  REE );.  pC->mas
1f6e0 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70  kUsed = *(u64*)p
1f6f0 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
1f700 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
1f710 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1f720 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1f730 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1f740 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1f750 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1f760 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1f770 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1f780 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1f790 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1f7a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1f7b0 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
1f7c0 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
1f7d0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1f7e0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1f7f0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1f800 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1f810 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1f820 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1f830 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1f840 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1f850 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1f860 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1f870 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1f880 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1f890 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1f8a0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1f8b0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1f8c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1f8d0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
1f8e0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1f8f0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1f900 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1f910 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1f920 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
1f930 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1f940 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1f950 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1f960 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1f970 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1f980 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1f990 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1f9a0 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1f9b0 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1f9c0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1f9d0 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1f9e0 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1f9f0 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1fa00 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1fa10 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1fa20 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xLE opcode with 
1fa30 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1fa40 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45  ts..** The IdxLE
1fa50 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1fa60 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1fa70 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1fa80 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c   but the.** IdxL
1fa90 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1faa0 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1fab0 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1fac0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ons..**.** This 
1fad0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1fae0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1faf0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1fb00 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1fb10 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1fb20 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1fb30 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1fb40 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1fb50 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1fb60 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1fb70 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1fb80 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1fb90 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1fba0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1fbb0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1fbc0 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
1fbd0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1fbe0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1fbf0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1fc00 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1fc10 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1fc20 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1fc30 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1fc40 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1fc50 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1fc60 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1fc70 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1fc80 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1fc90 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1fca0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1fcb0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1fcc0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1fcd0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1fce0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1fcf0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1fd00 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1fd10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1fd20 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1fd30 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1fd40 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1fd50 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1fd60 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1fd70 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1fd80 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1fd90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1fda0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1fdb0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1fdc0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1fdd0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1fde0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
1fdf0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1fe00 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
1fe10 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
1fe20 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1fe30 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1fe40 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
1fe50 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
1fe60 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1fe70 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1fe80 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1fe90 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1fea0 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
1feb0 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
1fec0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1fed0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1fee0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1fef0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1ff00 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ff10 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1ff20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1ff30 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1ff40 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1ff50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1ff60 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1ff70 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1ff80 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1ff90 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1ffa0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1ffb0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1ffc0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1ffd0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1ffe0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1fff0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
20000 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
20010 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
20020 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
20030 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
20040 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
20050 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
20060 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
20070 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
20080 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
20090 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
200a0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
200b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
200c0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
200d0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
200e0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
200f0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
20100 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
20110 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
20120 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
20130 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
20140 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20150 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
20160 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
20170 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
20180 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
20190 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
201a0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
201b0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
201c0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
201d0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
201e0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
201f0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
20200 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
20210 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
20220 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
20230 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
20240 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
20250 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
20260 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
20270 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
20280 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
20290 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
202a0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
202b0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
202c0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
202d0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
202e0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
202f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
20300 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
20310 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
20320 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
20330 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
20340 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
20350 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
20360 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
20370 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
20380 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
20390 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
203a0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
203b0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
203c0 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
203d0 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
203e0 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
203f0 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
20400 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
20410 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
20420 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
20430 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   Next..**.** If 
20440 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61  the cursor P1 wa
20450 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
20460 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  he OPFLAG_SEEKEQ
20470 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73   flag, then this
20480 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  .** opcode will 
20490 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61  always land on a
204a0 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75   record that equ
204b0 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20  ally equals the 
204c0 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20  key, or.** else 
204d0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
204e0 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68   to P2.  When th
204f0 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c  e cursor is OPFL
20500 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a  AG_SEEKEQ, this.
20510 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62  ** opcode must b
20520 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  e followed by an
20530 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69   IdxGE opcode wi
20540 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75  th the same argu
20550 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64  ments..** The Id
20560 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
20570 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68  be skipped if th
20580 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65  is opcode succee
20590 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49  ds, but the.** I
205a0 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
205b0 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73   be used on subs
205c0 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72  equent loop iter
205d0 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  ations..**.** Se
205e0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
205f0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
20600 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
20610 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
20620 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  T:         /* ju
20630 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
20640 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20  OP_SeekLE:      
20650 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
20660 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
20670 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
20680 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
20690 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20  OP_SeekGT: {    
206a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
206b0 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
206c0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61          /* Compa
206d0 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a  rison result */.
206e0 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20    int oc;       
206f0 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a       /* Opcode *
20700 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
20710 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75  pC;    /* The cu
20720 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a  rsor to seek */.
20730 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
20740 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20   r;  /* The key 
20750 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20  to seek for */. 
20760 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
20770 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20780 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c   columns or fiel
20790 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f  ds in the key */
207a0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
207b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
207c0 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
207d0 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71  k to */.  int eq
207e0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  Only;        /* 
207f0 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20  Only interested 
20800 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f  in == results */
20810 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20820 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20830 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20840 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20850 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
20860 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20870 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
20880 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20890 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
208a0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
208b0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
208c0 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31  E == OP_SeekLT+1
208d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
208e0 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65  _SeekGE == OP_Se
208f0 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLT+2 );.  asse
20900 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d  rt( OP_SeekGT ==
20910 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a   OP_SeekLT+3 );.
20920 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
20930 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
20940 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
20950 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d  sor!=0 );.  oc =
20960 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
20970 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43  eqOnly = 0;.  pC
20980 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23  ->nullRow = 0;.#
20990 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
209a0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
209b0 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23  = pOp->opcode;.#
209c0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
209d0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
209e0 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45  /* The BTREE_SEE
209f0 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c  K_EQ flag is onl
20a00 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63  y set on index c
20a10 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73  ursors */.    as
20a20 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
20a30 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
20a40 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
20a50 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d  BTREE_SEEK_EQ)==
20a60 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0.              
20a70 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
20a80 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  ..    /* The inp
20a90 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
20aa0 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
20ab0 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
20ac0 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
20ad0 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
20ae0 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
20af0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
20b00 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
20b10 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
20b20 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74  k, so convert it
20b30 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20  . */.    pIn3 = 
20b40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
20b50 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
20b60 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
20b70 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
20b80 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
20b90 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
20ba0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  cAffinity(pIn3, 
20bb0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b  0);.    }.    iK
20bc0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
20bd0 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
20be0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
20bf0 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
20c00 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
20c10 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
20c20 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f  ithout.    ** lo
20c30 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
20c40 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
20c50 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
20c60 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
20c70 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
20c80 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
20c90 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
20ca0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
20cb0 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
20cc0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
20cd0 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
20ce0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
20cf0 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
20d00 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mber,.        **
20d10 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
20d20 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
20d30 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
20d40 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
20d50 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67  nchTaken(1,2); g
20d60 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
20d70 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
20d80 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
20d90 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
20da0 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
20db0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
20dc0 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
20dd0 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
20de0 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
20df0 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
20e00 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
20e10 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
20e20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
20e30 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
20e40 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
20e50 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
20e60 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
20e70 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
20e80 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
20e90 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
20ea0 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
20eb0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
20ec0 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
20ed0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
20ee0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
20ef0 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
20f00 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
20f10 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
20f20 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
20f30 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
20f40 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
20f50 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
20f60 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
20f70 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
20f80 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
20f90 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
20fa0 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
20fb0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
20fc0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
20fd0 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
20fe0 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
20ff0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
21000 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
21010 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
21020 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
21030 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
21040 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
21050 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
21060 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
21070 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
21080 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
21090 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
210a0 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
210b0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
210c0 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
210d0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
210e0 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
210f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
21100 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
21110 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
21120 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
21130 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
21140 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21150 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21160 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
21170 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
21180 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
21190 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
211a0 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
211b0 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
211c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
211d0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
211e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
211f0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
21200 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63  {.    /* For a c
21210 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42  ursor with the B
21220 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e  TREE_SEEK_EQ hin
21230 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53  t, only the OP_S
21240 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a  eekGE and.    **
21250 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64   OP_SeekLE opcod
21260 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20  es are allowed, 
21270 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62  and these must b
21280 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
21290 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79  llowed.    ** by
212a0 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
212b0 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
212c0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
212d0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
212e0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
212f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21300 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
21310 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
21320 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
21330 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20     eqOnly = 1;. 
21340 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21350 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
21360 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
21370 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
21380 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21390 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
213a0 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
213b0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
213c0 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
213d0 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
213e0 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20  p[0].p1 );.     
213f0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
21400 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b  p2==pOp[0].p2 );
21410 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21420 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
21430 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p3 );.      ass
21440 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69  ert( pOp[1].p4.i
21450 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b  ==pOp[0].p4.i );
21460 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65  .    }..    nFie
21470 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
21480 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
21490 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
214a0 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
214b0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
214c0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
214d0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
214e0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
214f0 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
21500 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
21510 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
21520 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
21530 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
21540 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
21550 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
21560 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
21570 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
21580 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
21590 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
215a0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
215b0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
215c0 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
215d0 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
215e0 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
215f0 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
21600 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
21610 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
21620 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
21630 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
21640 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
21650 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
21660 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
21670 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
21680 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
21690 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
216a0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
216b0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
216c0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
216d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
216e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
216f0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
21700 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
21710 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
21720 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
21730 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
21740 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e  dif.    r.eqSeen
21750 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
21760 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
21770 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
21780 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  .pCursor, &r, 0,
21790 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
217a0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
217b0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
217c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
217d0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
217e0 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53   eqOnly && r.eqS
217f0 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  een==0 ){.      
21800 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29  assert( res!=0 )
21810 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65  ;.      goto see
21820 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
21830 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66   }.  }.  pC->def
21840 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
21850 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
21860 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21870 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21880 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
21890 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
218a0 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
218b0 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
218c0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
218d0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
218e0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
218f0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
21900 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
21910 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
21920 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
21930 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
21940 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
21950 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
21960 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
21970 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
21980 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
21990 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
219a0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
219b0 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
219c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
219d0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
219e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
219f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
21a00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21a10 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
21a20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21a30 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
21a40 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
21a50 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
21a60 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
21a70 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
21a80 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
21a90 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
21aa0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
21ab0 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ous(pC->uc.pCurs
21ac0 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  or, 0);.      if
21ad0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
21ae0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  ){.        if( r
21af0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
21b00 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
21b10 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
21b20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20        res = 1;. 
21b30 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
21b40 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
21b50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21b60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
21b70 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
21b80 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
21b90 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
21ba0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
21bb0 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
21bc0 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20  to.      ** see 
21bd0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
21be0 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
21bf0 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
21c00 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63  3BtreeEof(pC->uc
21c10 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
21c20 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f  .  }.seek_not_fo
21c30 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70  und:.  assert( p
21c40 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
21c50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
21c60 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
21c70 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
21c80 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
21c90 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b  se if( eqOnly ){
21ca0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
21cb0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
21cc0 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
21cd0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
21ce0 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a  );.    pOp++; /*
21cf0 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78   Skip the OP_Idx
21d00 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74  Lt or OP_IdxGT t
21d10 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20  hat follows */. 
21d20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21d30 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69  * Opcode: SeekHi
21d40 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
21d50 20 53 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48   Synopsis: seekH
21d60 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20  it=P2.**.** Set 
21d70 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
21d80 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f   on cursor P1 to
21d90 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32   the value in P2
21da0 2e 0a 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74  ..** The seekHit
21db0 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 62 79   flag is used by
21dc0 20 74 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70   the IfNoHope op
21dd0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  code..**.** P1 m
21de0 75 73 74 20 62 65 20 61 20 76 61 6c 69 64 20 62  ust be a valid b
21df0 2d 74 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50  -tree cursor.  P
21e00 32 20 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c  2 must be a bool
21e10 65 61 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69  ean value,.** ei
21e20 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a  ther 0 or 1..*/.
21e30 63 61 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a  case OP_SeekHit:
21e40 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
21e50 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
21e60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21e70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21e80 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21e90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21ea0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21eb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21ec0 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  2==0 || pOp->p2=
21ed0 3d 31 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  =1 );.  pC->seek
21ee0 48 69 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20  Hit = pOp->p2 & 
21ef0 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
21f00 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
21f10 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
21f20 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
21f30 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
21f40 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
21f50 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
21f60 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
21f70 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
21f80 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
21f90 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
21fa0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
21fb0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
21fc0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
21fd0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
21fe0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
21ff0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
22000 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
22010 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
22020 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
22030 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
22040 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
22050 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
22060 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
22070 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
22080 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
22090 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
220a0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
220b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
220c0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
220d0 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
220e0 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
220f0 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
22100 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
22110 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
22120 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
22130 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
22140 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22150 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
22160 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
22170 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
22180 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
22190 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
221a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
221b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
221c0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
221d0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
221e0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
221f0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
22200 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
22210 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
22220 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
22230 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
22240 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
22250 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
22260 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
22270 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
22280 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
22290 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
222a0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
222b0 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
222c0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
222d0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
222e0 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
222f0 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
22300 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
22310 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
22320 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
22330 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
22340 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
22350 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
22360 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
22370 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
22380 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
22390 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
223a0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
223b0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
223c0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
223d0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
223e0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
223f0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
22400 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
22410 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
22420 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
22430 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
22440 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
22450 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22460 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
22470 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66  , NoConflict, If
22480 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  NoHope.*/./* Opc
22490 6f 64 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31  ode: IfNoHope P1
224a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
224b0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
224c0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  3@P4].**.** Regi
224d0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
224e0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
224f0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
22500 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
22510 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
22520 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
22530 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
22540 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
22550 20 69 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74   is set on P1, t
22560 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  hen.** this opco
22570 64 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  de is a no-op.  
22580 42 75 74 20 69 66 20 74 68 65 20 73 65 65 6b 48  But if the seekH
22590 69 74 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73  it flag of P1 is
225a0 20 63 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20   clear, then.** 
225b0 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  check to see if 
225c0 74 68 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74  there is any ent
225d0 72 79 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61  ry in P1 that ma
225e0 74 63 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65  tches the.** pre
225f0 66 69 78 20 69 64 65 6e 74 69 66 69 65 64 20 62  fix identified b
22600 79 20 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66  y P3 and P4.  If
22610 20 6e 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65   no entry matche
22620 73 20 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a  s the prefix,.**
22630 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
22640 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
22650 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ough..**.** This
22660 20 6f 70 63 6f 64 65 20 62 65 68 61 76 65 73 20   opcode behaves 
22670 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  like OP_NotFound
22680 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a   if the seekHit.
22690 2a 2a 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ** flag is clear
226a0 20 61 6e 64 20 69 74 20 62 65 68 61 76 65 73 20   and it behaves 
226b0 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20  like OP_Noop if 
226c0 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
226d0 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54   is set..**.** T
226e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
226f0 65 64 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20  ed in IN clause 
22700 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61  processing for a
22710 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65   multi-column ke
22720 79 2e 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63  y..** If an IN c
22730 6c 61 75 73 65 20 69 73 20 61 74 74 61 63 68 65  lause is attache
22740 64 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20  d to an element 
22750 6f 66 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72  of the key other
22760 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66   than the.** lef
22770 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20  t-most element, 
22780 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72 65  and if there are
22790 20 6e 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74   no matches on t
227a0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
227b0 2a 20 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20  * seek over the 
227c0 77 68 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20  whole key, then 
227d0 69 74 20 6d 69 67 68 74 20 62 65 20 74 68 61 74  it might be that
227e0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20   one of the key 
227f0 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68  element.** to th
22800 65 20 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62  e left is prohib
22810 69 74 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61  iting a match, a
22820 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20 69  nd hence there i
22830 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a  s "no hope" of.*
22840 2a 20 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61  * any match rega
22850 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
22860 6e 79 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65  ny IN clause ele
22870 6d 65 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65  ments are checke
22880 64 2e 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20  d..** In such a 
22890 63 61 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e  case, we abandon
228a0 20 74 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73   the IN clause s
228b0 65 61 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69  earch early, usi
228c0 6e 67 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  ng this.** opcod
228d0 65 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e  e.  The opcode n
228e0 61 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74  ame comes from t
228f0 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68 65  he fact that the
22900 0a 2a 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  .** jump is take
22910 6e 20 69 66 20 74 68 65 72 65 20 69 73 20 22 6e  n if there is "n
22920 6f 20 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65  o hope" of achie
22930 76 69 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a  ving a match..**
22940 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
22950 74 46 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a  tFound, SeekHit.
22960 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
22970 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
22980 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
22990 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
229a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
229b0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
229c0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
229d0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
229e0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
229f0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
22a00 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
22a10 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
22a20 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
22a30 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
22a40 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
22a50 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
22a60 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
22a70 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
22a80 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
22a90 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
22aa0 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
22ab0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
22ac0 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
22ad0 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
22ae0 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
22af0 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
22b00 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
22b10 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
22b20 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
22b30 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
22b40 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
22b50 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
22b60 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
22b70 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
22b80 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
22b90 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
22ba0 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
22bb0 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
22bc0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
22bd0 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
22be0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
22bf0 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
22c00 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
22c10 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
22c20 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
22c30 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
22c40 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
22c50 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
22c60 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
22c70 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
22c80 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
22c90 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
22ca0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
22cb0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
22cc0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
22cd0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
22ce0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
22cf0 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
22d00 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
22d10 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
22d20 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
22d30 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
22d40 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
22d50 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
22d60 49 66 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20  IfNoHope: {     
22d70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22d80 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22d90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22da0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22db0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22dc0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22dd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22de0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
22df0 66 28 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29  f( pC->seekHit )
22e00 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
22e10 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
22e20 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a  P_NotFound */.}.
22e30 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
22e40 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
22e50 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
22e60 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
22e70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22e80 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
22e90 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22ea0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
22eb0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
22ec0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
22ed0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
22ee0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
22ef0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
22f00 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
22f10 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
22f20 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
22f30 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
22f40 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
22f50 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
22f60 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
22f70 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
22f80 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
22f90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22fa0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22fb0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22fc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22fd0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
22fe0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
22ff0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23000 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23010 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
23020 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
23030 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
23040 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
23050 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
23060 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
23070 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
23080 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
23090 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
230a0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
230b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
230c0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
230d0 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
230e0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
230f0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
23100 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
23110 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
23120 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
23130 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
23140 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
23150 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
23160 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
23170 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
23180 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
23190 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
231a0 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
231b0 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
231c0 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
231d0 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
231e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
231f0 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
23200 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
23210 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
23220 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
23230 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
23240 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
23250 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
23260 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
23270 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
23280 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
23290 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
232a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20  QLITE_NOMEM );. 
232b0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
232c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72   no_mem;.    pFr
232d0 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73  ee = pIdxKey = s
232e0 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
232f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43  npackedRecord(pC
23300 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
23310 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
23320 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
23330 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
23340 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
23350 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
23360 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
23370 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
23380 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
23390 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
233a0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
233b0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
233c0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
233d0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
233e0 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
233f0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
23400 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
23410 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
23420 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
23430 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
23440 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
23450 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
23460 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
23470 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
23480 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
23490 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
234a0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
234b0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
234c0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
234d0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
234e0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
234f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23500 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
23510 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
23520 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
23530 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
23540 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
23550 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  NN(db, pFree);. 
23560 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23570 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
23580 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23590 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
235a0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
235b0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
235c0 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
235d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
235e0 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
235f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23600 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23610 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23620 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
23630 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
23640 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
23650 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
23660 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
23670 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
23680 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
23690 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
236a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
236b0 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
236c0 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
236d0 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
236e0 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
236f0 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
23700 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
23710 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23720 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
23730 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
23740 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
23750 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
23760 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
23770 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
23780 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
23790 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
237a0 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
237b0 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
237c0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
237d0 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
237e0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
237f0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
23800 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
23810 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
23820 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
23830 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
23840 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
23850 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
23860 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
23870 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
23880 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
23890 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
238a0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
238b0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
238c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
238d0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
238e0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
238f0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
23900 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
23910 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
23920 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
23930 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
23940 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
23950 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
23960 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
23970 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
23980 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
23990 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
239a0 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
239b0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
239c0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
239d0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
239e0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
239f0 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
23a00 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
23a10 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
23a20 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
23a30 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
23a40 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
23a50 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
23a60 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
23a70 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
23a80 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
23a90 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
23aa0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
23ab0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
23ac0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
23ad0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
23ae0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
23af0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
23b00 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
23b10 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
23b20 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
23b30 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
23b40 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
23b50 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
23b60 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
23b70 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
23b80 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
23b90 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
23ba0 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
23bb0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
23bc0 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
23bd0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
23be0 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
23bf0 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
23c00 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23c10 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
23c20 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
23c30 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
23c40 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
23c50 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
23c60 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
23c70 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
23c80 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
23c90 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
23ca0 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
23cb0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
23cc0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
23cd0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
23ce0 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
23cf0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
23d00 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
23d10 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
23d20 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
23d30 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
23d40 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
23d50 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
23d60 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
23d70 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
23d80 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
23d90 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
23da0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
23db0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
23dc0 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
23dd0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
23de0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
23df0 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
23e00 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
23e10 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
23e20 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
23e30 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
23e40 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
23e50 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
23e60 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
23e70 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
23e80 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
23e90 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
23ea0 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
23eb0 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
23ec0 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
23ed0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
23ee0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
23ef0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
23f00 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
23f10 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
23f20 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
23f30 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
23f40 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23f50 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
23f60 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
23f70 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
23f80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23f90 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
23fa0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
23fb0 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
23fc0 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51  ffinity(pIn3, SQ
23fd0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
23fe0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
23ff0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
24000 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
24010 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
24020 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  2;.  }.  /* Fall
24030 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
24040 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61  _NotExists */.ca
24050 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
24060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
24070 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  p, in3 */.  pIn3
24080 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
24090 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
240a0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
240b0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
240c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
240d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
240e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
240f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24100 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24110 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24120 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
24130 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  p = OP_SeekRowid
24140 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
24150 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
24160 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24170 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
24180 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
24190 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
241a0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
241b0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
241c0 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
241d0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
241e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
241f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
24200 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
24210 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
24220 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
24230 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d   res==0 );.  pC-
24240 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
24250 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
24260 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
24270 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
24280 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24290 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
242a0 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
242b0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
242c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
242d0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e  es!=0,2);.  pC->
242e0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
242f0 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
24300 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
24310 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
24320 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
24330 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
24340 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
24350 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
24360 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
24370 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
24380 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
24390 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
243a0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
243b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
243c0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
243d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
243e0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
243f0 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
24400 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
24410 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
24420 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
24430 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
24440 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
24450 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
24460 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
24470 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
24480 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
24490 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
244a0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
244b0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
244c0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
244d0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
244e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
244f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24500 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
24510 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
24520 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
24530 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
24540 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
24550 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
24560 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  B );.  pOut = ou
24570 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
24580 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
24590 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
245a0 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
245b0 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
245c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
245d0 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
245e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
245f0 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
24600 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
24610 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
24620 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
24630 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
24640 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
24650 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
24660 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
24670 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
24680 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24690 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
246a0 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
246b0 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
246c0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
246d0 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
246e0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
246f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
24700 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
24710 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
24720 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
24730 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
24740 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
24750 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
24760 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
24770 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
24780 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
24790 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
247a0 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
247b0 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
247c0 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
247d0 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
247e0 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
247f0 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
24800 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
24810 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
24820 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
24830 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
24840 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
24850 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
24860 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
24870 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
24880 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
24890 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
248a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
248b0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
248e0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
248f0 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
24900 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
24910 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
24920 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
24930 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
24940 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
24950 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
24960 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
24970 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24980 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
24990 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
249a0 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
249b0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
249c0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
249d0 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
249e0 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
249f0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
24a00 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
24a10 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
24a20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
24a30 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
24a40 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
24a50 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
24a60 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
24a70 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24a80 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24a90 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24aa0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24ab0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24ad0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
24ae0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
24af0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
24b00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24b10 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
24b20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68  );.  {.    /* Th
24b30 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
24b40 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
24b50 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
24b60 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
24b70 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
24b80 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
24b90 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
24ba0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
24bb0 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
24bc0 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
24bd0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
24be0 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
24bf0 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
24c00 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
24c10 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
24c20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
24c30 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
24c40 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
24c50 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
24c60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
24c70 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
24c80 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
24c90 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
24ca0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
24cb0 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
24cc0 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
24cd0 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
24ce0 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
24cf0 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
24d00 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
24d10 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
24d20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
24d30 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
24d40 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
24d50 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
24d60 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
24d70 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
24d80 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
24d90 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
24da0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24db0 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
24dc0 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
24dd0 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
24de0 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
24df0 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
24e00 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
24e10 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
24e20 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
24e30 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
24e40 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
24e50 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
24e60 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
24e70 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
24e80 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
24e90 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
24ea0 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
24eb0 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
24ec0 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
24ed0 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
24ee0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
24ef0 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
24f00 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
24f10 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
24f20 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
24f30 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
24f40 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
24f50 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24f60 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75  3BtreeLast(pC->u
24f70 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
24f80 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
24f90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
24fa0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
24fb0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24fc0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
24fd0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
24fe0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
24ff0 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
25000 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
25010 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
25020 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
25030 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70  IsValid(pC->uc.p
25040 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
25050 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
25060 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
25070 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
25080 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
25090 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
250a0 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
250b0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
250c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
250d0 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
250e0 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
250f0 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
25100 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
25110 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25120 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
25130 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
25140 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
25150 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
25160 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
25170 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
25180 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
25190 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
251a0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
251b0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
251c0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
251d0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
251e0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
251f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
25200 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
25210 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
25220 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
25230 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
25240 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
25250 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
25260 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
25270 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
25280 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
25290 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
252a0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
252b0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
252c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
252d0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
252e0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
252f0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
25300 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
25310 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
25320 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
25330 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
25340 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
25350 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
25360 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
25370 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
25380 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
25390 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
253a0 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
253b0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
253c0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
253d0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
253e0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
253f0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
25400 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
25410 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
25420 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
25430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
25440 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
25450 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20  7817-00630 */.  
25460 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
25470 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25480 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
25490 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
254a0 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
254b0 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
254c0 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
254d0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
254e0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
254f0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
25500 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
25510 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
25520 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
25530 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
25540 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
25550 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
25560 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
25570 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
25580 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
25590 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
255a0 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
255b0 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
255c0 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
255d0 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
255e0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
255f0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
25600 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
25610 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
25620 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25630 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
25640 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
25650 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
25660 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
25690 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
256a0 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
256b0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
256c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
256d0 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
256e0 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
256f0 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
25700 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
25710 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
25720 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
25730 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
25740 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
25750 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
25760 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
25770 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
25780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
257c0 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
257d0 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
257e0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
257f0 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
25800 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
25810 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25820 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ror;.      if( r
25830 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
25840 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
25850 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
25860 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
25870 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
25880 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25890 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
258a0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
258b0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
258c0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
258d0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
258e0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
258f0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25900 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
25910 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
25920 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25930 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
25940 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
25950 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
25960 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
25970 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
25980 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
25990 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
259a0 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
259b0 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
259c0 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
259d0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
259e0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
259f0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
25a00 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
25a10 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
25a20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
25a30 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
25a40 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
25a50 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
25a60 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
25a70 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
25a80 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
25a90 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25aa0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
25ab0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
25ac0 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
25ad0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
25ae0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
25af0 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
25b00 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
25b10 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
25b20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
25b30 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
25b40 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
25b50 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
25b60 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
25b70 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
25b80 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
25b90 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
25ba0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
25bb0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
25bc0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
25bd0 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
25be0 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
25bf0 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
25c00 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
25c10 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
25c20 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
25c30 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
25c40 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
25c50 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
25c60 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
25c70 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
25c80 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
25c90 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
25ca0 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
25cb0 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
25cc0 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a  y equal to P3..*
25cd0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
25ce0 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
25cf0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
25d00 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
25d10 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
25d20 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
25d30 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
25d40 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
25d50 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
25d60 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
25d70 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
25d80 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
25d90 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
25da0 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
25db0 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
25dc0 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
25dd0 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61  ay point to a Ta
25de0 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f  ble structure, o
25df0 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  r may be NULL. I
25e00 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20  f it is .** not 
25e10 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
25e20 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69  pdate-hook (sqli
25e30 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
25e40 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
25e50 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  .** following a 
25e60 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
25e70 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
25e80 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
25e90 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
25ea0 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
25eb0 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
25ec0 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
25ed0 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
25ee0 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
25ef0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
25f00 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
25f10 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
25f20 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
25f30 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
25f40 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
25f50 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
25f60 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
25f70 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
25f80 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
25f90 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
25fa0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
25fb0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
25fc0 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
25fd0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
25fe0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
25ff0 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
26000 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
26010 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
26020 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
26030 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
26040 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a  y=P3 data=r[P2].
26050 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
26060 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
26070 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
26080 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
26090 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
260a0 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
260b0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
260c0 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
260d0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
260e0 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
260f0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
26100 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
26110 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
26120 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
26130 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
26140 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
26150 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
26160 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
26170 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
26180 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
26190 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
261a0 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
261b0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
261c0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
261d0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73  itten */.  int s
261e0 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
261f0 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
26200 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
26210 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
26220 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
26230 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
26240 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
26250 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
26260 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
26270 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
26280 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
26290 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
262a0 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
262b0 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50  ooks */.  BtreeP
262c0 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50  ayload x;   /* P
262d0 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73  ayload to be ins
262e0 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74  erted */..  pDat
262f0 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
26300 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
26310 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26320 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26330 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
26340 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
26350 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26360 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26370 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26380 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
26390 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
263a0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
263b0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
263c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
263d0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
263e0 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d  G_ISNOOP) || pC-
263f0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
26400 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26410 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
26420 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53  Op->p4type>=P4_S
26430 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53  TATIC );.  REGIS
26440 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
26450 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c  2, pData);.  sql
26460 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
26470 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
26480 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
26490 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
264a0 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
264b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
264c0 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
264d0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
264e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
264f0 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
26500 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
26510 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
26520 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  ey);.    x.nKey 
26530 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
26540 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
26550 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
26560 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
26570 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d     x.nKey = pOp-
26580 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
26590 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
265a0 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44  TABLE && HAS_UPD
265b0 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
265c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
265d0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44  iDb>=0 );.    zD
265e0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
265f0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
26600 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
26610 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65  4.pTab;.    asse
26620 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  rt( (pOp->p5 & O
26630 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c  PFLAG_ISNOOP) ||
26640 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
26650 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
26660 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a 44  pTab = 0;.    zD
26670 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
26680 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
26690 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
266a0 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
266b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
266c0 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
266d0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
266e0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
266f0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28   if any */.  if(
26700 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66 28   pTab ){.    if(
26710 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
26720 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f 70  allback && !(pOp
26730 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
26740 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20 20  UPDATE) ){.     
26750 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
26760 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
26770 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
26780 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65  zDb, pTab, x.nKe
26790 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  y,pOp->p2);.    
267a0 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55  }.    if( db->xU
267b0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d 30  pdateCallback==0
267c0 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d 3d   || pTab->aCol==
267d0 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50 72  0 ){.      /* Pr
267e0 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61 74  event post-updat
267f0 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e 6e  e hook from runn
26800 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68 65  ing in cases whe
26810 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20  n it should not 
26820 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  */.      pTab = 
26830 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
26840 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
26850 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
26860 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  ak;.#endif..  if
26870 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
26880 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
26890 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
268a0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
268b0 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
268c0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e  ->lastRowid = x.
268d0 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20  nKey;.  assert( 
268e0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
268f0 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
26900 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d  ) );.  x.pData =
26910 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e   pData->z;.  x.n
26920 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b  Data = pData->n;
26930 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
26940 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
26950 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
26960 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
26970 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
26980 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
26990 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e  M_Zero ){.    x.
269a0 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
269b0 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
269c0 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30  .    x.nZero = 0
269d0 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d  ;.  }.  x.pKey =
269e0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
269f0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
26a00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
26a10 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35  ,.      (pOp->p5
26a20 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
26a30 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
26a40 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73  ITION)), seekRes
26a50 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64  ult.  );.  pC->d
26a60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
26a70 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
26a80 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
26a90 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
26aa0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
26ab0 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
26ac0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26ad0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26ae0 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62 20  ror;.  if( pTab 
26af0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
26b00 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
26b10 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  ck!=0 );.    ass
26b20 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c 21  ert( pTab->aCol!
26b30 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  =0 );.    db->xU
26b40 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
26b50 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20 20  ->pUpdateArg,.  
26b60 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
26b70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
26b80 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
26b90 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
26ba0 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20 20  SERT,.          
26bb0 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
26bc0 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a  e, x.nKey);.  }.
26bd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26be0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
26bf0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
26c00 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
26c10 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
26c20 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
26c30 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
26c40 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
26c50 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
26c60 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50  ION bit of the P
26c70 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  5 parameter is s
26c80 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  et, then.** the 
26c90 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
26ca0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
26cb0 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
26cc0 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
26cd0 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
26ce0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
26cf0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
26d00 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
26d10 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
26d20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
26d30 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
26d40 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75  no-op. As a resu
26d50 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65  lt, in this case
26d60 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20  .** it is ok to 
26d70 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20  delete a record 
26d80 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65  from within a Ne
26d90 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20  xt loop. If .** 
26da0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
26db0 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73  ION bit of P5 is
26dc0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65   clear, then the
26dd0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a   cursor will be.
26de0 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e  ** left in an un
26df0 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a  defined state..*
26e00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
26e10 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74  AG_AUXDELETE bit
26e20 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74   is set on P5, t
26e30 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
26e40 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74  at this.** delet
26e50 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c  e one of several
26e60 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
26e70 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c   deleting a tabl
26e80 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74  e row and all it
26e90 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
26ea0 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20  index entries.  
26eb0 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
26ec0 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73 20  hose deletes is 
26ed0 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a  the "primary".**
26ee0 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74   delete.  The ot
26ef0 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20  hers are all on 
26f00 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
26f10 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65   cursors or else
26f20 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77   are.** marked w
26f30 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45 54  ith the AUXDELET
26f40 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  E flag..**.** If
26f50 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
26f60 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28  NGE flag of P2 (
26f70 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69  NB: P2 not P5) i
26f80 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
26f90 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  row.** change co
26fa0 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
26fb0 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
26fc0 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
26fd0 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
26fe0 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
26ff0 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
27000 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
27010 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
27020 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
27030 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20   then it points 
27040 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63  to a Table objec
27050 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  t. In this case 
27060 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75  either .** the u
27070 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64  pdate or pre-upd
27080 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74  ate hook, or bot
27090 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65  h, may be invoke
270a0 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  d. The P1 cursor
270b0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65   must.** have be
270c0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73  en positioned us
270d0 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
270e0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
270f0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  g this opcode in
27100 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20   .** this case. 
27110 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66  Specifically, if
27120 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
27130 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61  ed, the pre-upda
27140 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69  te hook is .** i
27150 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20  nvoked if P4 is 
27160 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70  not NULL. The up
27170 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76  date-hook is inv
27180 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63  oked if one is c
27190 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50  onfigured, .** P
271a0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61  4 is not NULL, a
271b0 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  nd the OPFLAG_NC
271c0 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65  HANGE flag is se
271d0 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  t in P2..**.** I
271e0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
271f0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
27200 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33  t in P2, then P3
27210 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
27220 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20  dress.** of the 
27230 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
27240 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61   contains the va
27250 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77  lue that the row
27260 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69  id of the row wi
27270 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20  ll.** be set to 
27280 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a  by the update..*
27290 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
272a0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
272b0 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *pC;.  const ch
272c0 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65  ar *zDb;.  Table
272d0 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70   *pTab;.  int op
272e0 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67  flags;..  opflag
272f0 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  s = pOp->p2;.  a
27300 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27310 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27320 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27330 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27340 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27350 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27360 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27370 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27380 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
27390 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
273a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
273b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
273c0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
273d0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
273e0 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65 66  (p, pC);..#ifdef
273f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27400 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
27410 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73  =P4_TABLE && Has
27420 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54  Rowid(pOp->p4.pT
27430 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ab) && pOp->p5==
27440 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70  0 ){.    /* If p
27450 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73  5 is zero, the s
27460 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
27470 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
27480 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
27490 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65  o.    ** OP_Dele
274a0 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73  te will have als
274b0 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
274c0 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
274d0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
274e0 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20  .    ** the row 
274f0 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65  that is being de
27500 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34  leted */.    i64
27510 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42   iKey = sqlite3B
27520 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
27530 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
27540 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27550 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
27560 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
27570 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
27580 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
27590 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
275a0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
275b0 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
275c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
275d0 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
275e0 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
275f0 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
27600 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
27610 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
27620 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
27630 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
27640 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
27650 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
27660 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
27670 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
27680 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
27690 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
276a0 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
276b0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
276c0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
276d0 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
276e0 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
276f0 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
27700 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
27710 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
27720 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30   pOp->p4.pTab!=0
27730 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
27740 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
27750 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
27760 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
27770 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
27780 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45  p5 & OPFLAG_SAVE
27790 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20  POSITION)!=0 && 
277a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
277b0 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
277c0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42  arget = sqlite3B
277d0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
277e0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
277f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
27800 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a     zDb = 0;   /*
27810 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
27820 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
27830 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
27840 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e   pTab = 0;  /* N
27850 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
27860 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
27870 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
27880 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
27890 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
278a0 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
278b0 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
278c0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
278d0 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
278e0 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
278f0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62   && pOp->p4.pTab
27900 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27910 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  !(opflags & OPFL
27920 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20  AG_ISUPDATE) .  
27930 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77         || HasRow
27940 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20  id(pTab)==0 .   
27950 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70        || (aMem[p
27960 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20  Op->p3].flags & 
27970 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b  MEM_Int) .    );
27980 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
27990 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
279a0 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70   pC,.        (op
279b0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
279c0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
279d0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
279e0 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20  E_DELETE, .     
279f0 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43     zDb, pTab, pC
27a00 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a  ->movetoTarget,.
27a10 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
27a20 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28      );.  }.  if(
27a30 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
27a40 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
27a50 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  ;.#endif. .  /* 
27a60 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20  Only flags that 
27a70 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53  can be set are S
27a80 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20  AVEPOISTION and 
27a90 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20  AUXDELETE */ .  
27aa0 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
27ab0 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45   & ~(OPFLAG_SAVE
27ac0 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f  POSITION|OPFLAG_
27ad0 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29  AUXDELETE))==0 )
27ae0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
27af0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d  AG_SAVEPOSITION=
27b00 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54  =BTREE_SAVEPOSIT
27b10 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ION );.  assert(
27b20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
27b30 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45  E==BTREE_AUXDELE
27b40 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  TE );..#ifdef SQ
27b50 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
27b60 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b   p->pFrame==0 ){
27b70 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45  .    if( pC->isE
27b80 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20  phemeral==0.    
27b90 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20      && (pOp->p5 
27ba0 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  & OPFLAG_AUXDELE
27bb0 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  TE)==0.        &
27bc0 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20  & (pC->wrFlag & 
27bd0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
27be0 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
27bf0 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
27c00 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
27c10 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
27c20 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
27c30 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
27c40 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
27c50 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ndif..  rc = sql
27c60 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
27c70 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
27c80 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
27c90 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
27ca0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
27cb0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
27cc0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
27cd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27ce0 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ror;..  /* Invok
27cf0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
27d00 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
27d10 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
27d20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
27d30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
27d40 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62  ge++;.    if( db
27d50 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
27d60 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  k && HasRowid(pT
27d70 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ab) ){.      db-
27d80 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
27d90 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
27da0 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
27db0 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
27dc0 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ,.          pC->
27dd0 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
27de0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
27df0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d  >iDb>=0 );.    }
27e00 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
27e10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
27e20 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
27e30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
27e40 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
27e50 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
27e60 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
27e70 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
27e80 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
27e90 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
27ea0 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
27eb0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
27ec0 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
27ed0 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
27ee0 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
27ef0 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
27f00 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
27f10 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
27f20 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
27f30 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
27f40 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
27f50 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
27f60 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
27f70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27f80 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
27f90 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
27fa0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65   Synopsis: if ke
27fb0 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
27fc0 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
27fd0 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
27fe0 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
27ff0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
28000 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
28010 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
28020 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
28030 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
28040 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
28050 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
28060 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
28070 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
28080 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
28090 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
280a0 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
280b0 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
280c0 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
280d0 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
280e0 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
280f0 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
28100 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
28110 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
28120 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
28130 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
28140 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
28150 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
28160 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
28170 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
28180 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
28190 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
281a0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
281b0 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
281c0 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
281d0 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
281e0 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
281f0 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
28200 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
28210 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
28220 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
28230 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
28240 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
28250 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28260 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28270 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
28280 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
28290 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
282a0 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
282b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
282c0 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
282d0 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
282e0 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
282f0 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
28300 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
28310 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
28320 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
28330 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
28340 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
28350 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28360 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
28370 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
28380 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
28390 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
283a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
283b0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
283c0 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
283d0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
283e0 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
283f0 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
28400 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
28410 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
28420 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
28430 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
28440 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
28450 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
28460 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
28470 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
28480 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
28490 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
284a0 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
284b0 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
284c0 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
284d0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
284e0 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
284f0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
28500 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
28510 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
28520 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
28530 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
28540 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
28550 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
28560 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
28570 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
28580 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
28590 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
285a0 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
285b0 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
285c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
285d0 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
285e0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
285f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
28600 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
28610 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28620 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
28630 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
28640 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
28650 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
28660 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
28670 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
28680 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
28690 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
286a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
286b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
286c0 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29  or );.  if( rc )
286d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
286e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61  to_error;.  p->a
286f0 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
28700 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28710 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
28720 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28730 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50   RowData P1 P2 P
28740 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
28750 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
28760 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
28770 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
28780 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74  omplete row cont
28790 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20  ent for the row 
287a0 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72  at .** which cur
287b0 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e  sor P1 is curren
287c0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
287d0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
287e0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
287f0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
28800 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
28810 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
28820 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
28830 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
28840 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
28850 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  file..**.** If c
28860 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69  ursor P1 is an i
28870 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63  ndex, then the c
28880 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65  ontent is the ke
28890 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a  y of the row..**
288a0 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73   If cursor P2 is
288b0 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74   a table, then t
288c0 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61  he content extra
288d0 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61  cted is the data
288e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
288f0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
28900 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
28910 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
28920 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
28930 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
28940 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
28950 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30  ..**.** If P3!=0
28960 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
28970 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
28980 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72 61  make an ephemera
28990 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74  l pointer.** int
289a0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
289b0 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73  age.  That means
289c0 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e   that the conten
289d0 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a  t of the output.
289e0 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c  ** register will
289f0 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
28a00 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
28a10 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e  ursor moves - in
28a20 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73  cluding.** moves
28a30 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72   caused by other
28a40 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73   cursors that "s
28a50 61 76 65 22 20 74 68 65 20 63 75 72 72 65 6e 74  ave" the current
28a60 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69   cursors.** posi
28a70 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68  tion in order th
28a80 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74  at they can writ
28a90 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  e to the same ta
28aa0 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a  ble.  If P3==0.*
28ab0 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66  * then a copy of
28ac0 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64   the data is mad
28ad0 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20  e into memory.  
28ae0 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c  P3!=0 is faster,
28af0 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73   but.** P3==0 is
28b00 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66   safer..**.** If
28b10 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P3!=0 then the 
28b20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50  content of the P
28b30 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e  2 register is un
28b40 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
28b50 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74  .** in OP_Result
28b60 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75   and any OP_Resu
28b70 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61  lt will invalida
28b80 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74  te the P2 regist
28b90 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54  er content..** T
28ba0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
28bb0 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69  ontent is invali
28bc0 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73  dated by opcodes
28bd0 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f   like OP_Functio
28be0 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75  n or.** by any u
28bf0 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75  se of another cu
28c00 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
28c10 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
28c20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  .*/.case OP_RowD
28c30 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
28c40 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
28c50 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
28c60 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  2 n;..  pOut = o
28c70 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
28c80 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74   pOp);..  assert
28c90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28ca0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28cb0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28cc0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28cd0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28ce0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28cf0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28d00 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
28d10 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28d20 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
28d30 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
28d40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28d50 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
28d60 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
28d70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
28d80 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61   /* The OP_RowDa
28d90 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
28da0 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
28db0 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
28dc0 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50  _SeekRowid or OP
28dd0 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
28de0 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
28df0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
28e00 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74  .  ** that might
28e10 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
28e20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20  cursor..  ** If 
28e30 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74  this where not t
28e40 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74  he case, on of t
28e50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
28e60 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c  ert()s.  ** woul
28e70 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20  d fail.  Should 
28e80 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65  this ever change
28e90 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61   (because of cha
28ea0 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65  nges in the code
28eb0 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29  .  ** generator)
28ec0 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f   then the fix wo
28ed0 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74  uld be to insert
28ee0 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20   a call to.  ** 
28ef0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
28f00 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a  rMoveto()..  */.
28f10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
28f20 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
28f30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
28f40 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
28f50 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
28f60 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72  .#if 0  /* Not r
28f70 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74  equired due to t
28f80 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61  he previous to a
28f90 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
28fa0 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ts */.  rc = sql
28fb0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
28fc0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
28fd0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
28fe0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28ff0 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
29000 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74  .  n = sqlite3Bt
29010 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
29020 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28  Crsr);.  if( n>(
29030 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
29040 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
29050 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
29060 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74  too_big;.  }.  t
29070 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b  estcase( n==0 );
29080 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29090 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
290a0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
290b0 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  t);.  if( rc ) g
290c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
290d0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70  _error;.  if( !p
290e0 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d  Op->p3 ) Deephem
290f0 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
29100 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
29110 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45  SIZE(pOut);.  RE
29120 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
29130 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
29140 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29150 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
29160 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
29170 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
29180 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
29190 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
291a0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
291b0 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
291c0 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
291d0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
291e0 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
291f0 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
29200 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
29210 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
29220 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
29230 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
29240 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
29250 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
29260 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
29270 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
29280 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
29290 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
292a0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
292b0 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292d0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
292e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
292f0 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
29300 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
29310 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
29320 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
29330 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
29340 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
29350 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29360 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29370 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29380 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
29390 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
293a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
293b0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
293c0 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe!=CURTYPE_PSEU
293d0 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  DO || pC->nullRo
293e0 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  w );.  if( pC->n
293f0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
29400 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
29410 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
29420 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
29430 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
29440 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
29450 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
29460 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29470 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
29480 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43  }else if( pC->eC
29490 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
294a0 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65  VTAB ){.    asse
294b0 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  rt( pC->uc.pVCur
294c0 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62  !=0 );.    pVtab
294d0 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d   = pC->uc.pVCur-
294e0 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
294f0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
29500 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
29510 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
29520 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
29530 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
29540 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b  ->uc.pVCur, &v);
29550 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
29560 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
29570 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
29580 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29590 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
295a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
295b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
295c0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
295d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
295e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
295f0 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
29600 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
29610 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
29620 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
29630 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
29640 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
29650 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29660 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
29670 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
29680 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
29690 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
296a0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
296b0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
296c0 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
296d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
296e0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
296f0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
29700 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
29710 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
29720 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
29730 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
29740 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
29750 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
29760 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
29770 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
29780 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
29790 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
297a0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
297b0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
297c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
297d0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
297e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
297f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29800 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29810 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29820 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29830 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
29840 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
29850 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
29860 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
29870 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29880 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61  E_BTREE ){.    a
29890 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
298a0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
298b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
298c0 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  rCursor(pC->uc.p
298d0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69 66  Cursor);.  }.#if
298e0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
298f0 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 4f  .  if( pC->seekO
29900 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b 4f  p==0 ) pC->seekO
29910 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a  p = OP_NullRow;.
29920 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
29930 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
29940 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a  ekEnd P1 * * * *
29950 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20  .**.** Position 
29960 63 75 72 73 6f 72 20 50 31 20 61 74 20 74 68 65  cursor P1 at the
29970 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
29980 65 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  e for the purpos
29990 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e  e of.** appendin
299a0 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e  g a new entry on
299b0 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a  to the btree..**
299c0 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d 65  .** It is assume
299d0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  d that the curso
299e0 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66  r is used only f
299f0 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64  or appending and
29a00 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63 75   so.** if the cu
29a10 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74  rsor is valid, t
29a20 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
29a30 75 73 74 20 61 6c 72 65 61 64 79 20 62 65 20 70  ust already be p
29a40 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68  ointing.** at th
29a50 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
29a60 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61  ee and so no cha
29a70 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f  nges are made to
29a80 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  .** the cursor..
29a90 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  */./* Opcode: La
29aa0 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
29ab0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
29ac0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
29ad0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
29ae0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
29af0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
29b00 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
29b10 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
29b20 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
29b30 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
29b40 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
29b50 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
29b60 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
29b70 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
29b80 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
29b90 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
29ba0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
29bb0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
29bc0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
29bd0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
29be0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
29bf0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
29c00 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
29c10 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
29c20 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
29c30 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
29c40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
29c50 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
29c60 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
29c70 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
29c80 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
29c90 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  xt..*/.case OP_S
29ca0 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f  eekEnd:.case OP_
29cb0 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
29cc0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
29cd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
29ce0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
29cf0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
29d00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29d10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
29d20 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
29d30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29d40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29d50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29d60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
29d70 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
29d80 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
29d90 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
29da0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
29db0 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65 66  rsr!=0 );.#ifdef
29dc0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
29dd0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
29de0 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
29df0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
29e00 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29  de==OP_SeekEnd )
29e10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
29e20 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20  p->p2==0 );.    
29e30 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
29e40 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71 6c   -1;.    if( sql
29e50 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
29e60 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29 20  sValidNN(pCrsr) 
29e70 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ){.      break;.
29e80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
29e90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
29ea0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
29eb0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
29ec0 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
29ed0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
29ee0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
29ef0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
29f00 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  LE;.  if( rc ) g
29f10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29f20 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f  _error;.  if( pO
29f30 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
29f40 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29f50 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
29f60 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
29f70 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
29f80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29f90 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50 31  de: IfSmaller P1
29fa0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
29fb0 20 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e 75   Estimate the nu
29fc0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
29fd0 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20 4a  the table P1.  J
29fe0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 61  ump to P2 if tha
29ff0 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69 73  t.** estimate is
2a000 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72 6f   less than appro
2a010 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31  ximately 2**(0.1
2a020 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  *P3)..*/.case OP
2a030 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20  _IfSmaller: {   
2a040 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2a050 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2a060 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2a070 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2a080 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73    i64 sz;..  ass
2a090 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a0a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2a0b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2a0c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a0d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2a0e0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
2a0f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2a100 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
2a110 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a120 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
2a130 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  r, &res);.  if( 
2a140 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2a150 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2a160 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2a170 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42 74    sz = sqlite3Bt
2a180 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28 70  reeRowCountEst(p
2a190 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20 41  Crsr);.    if( A
2a1a0 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26 20  LWAYS(sz>=0) && 
2a1b0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75  sqlite3LogEst((u
2a1c0 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29  64)sz)<pOp->p3 )
2a1d0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20   res = 1;.  }.  
2a1e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2a1f0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
2a200 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2a210 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2a220 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
2a230 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50 32  SorterSort P1 P2
2a240 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74   * * *.**.** Aft
2a250 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 68  er all records h
2a260 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65  ave been inserte
2a270 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74 65  d into the Sorte
2a280 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e  r object.** iden
2a290 74 69 66 69 65 64 20 62 79 20 50 31 2c 20 69 6e  tified by P1, in
2a2a0 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
2a2b0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f 20   to actually do 
2a2c0 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20  the sorting..** 
2a2d0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
2a2e0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
2a2f0 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e  ds to be sorted.
2a300 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2a310 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  de is an alias f
2a320 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f  or OP_Sort and O
2a330 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69 73  P_Rewind that is
2a340 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72   used.** for Sor
2a350 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ter objects..*/.
2a360 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20  /* Opcode: Sort 
2a370 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a380 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
2a390 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
2a3a0 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
2a3b0 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
2a3c0 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
2a3d0 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
2a3e0 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
2a3f0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
2a400 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
2a410 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
2a420 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
2a430 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
2a440 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
2a450 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
2a460 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
2a470 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
2a480 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
2a490 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
2a4a0 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
2a4b0 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
2a4c0 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
2a4d0 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
2a4e0 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
2a4f0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
2a500 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
2a510 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
2a520 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
2a530 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
2a540 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
2a550 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
2a560 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
2a570 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
2a580 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20  OP_SorterSort:  
2a590 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2a5a0 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20  e OP_Sort: {    
2a5b0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23      /* jump */.#
2a5c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2a5d0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  T.  sqlite3_sort
2a5e0 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69  _count++;.  sqli
2a5f0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
2a600 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e  --;.#endif.  p->
2a610 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
2a620 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
2a630 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ++;.  /* Fall th
2a640 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65  rough into OP_Re
2a650 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63  wind */.}./* Opc
2a660 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50  ode: Rewind P1 P
2a670 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54  2 * * P5.**.** T
2a680 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
2a690 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
2a6a0 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
2a6b0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
2a6c0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
2a6d0 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
2a6e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a6f0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
2a700 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
2a710 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
2a720 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  y, jump immediat
2a730 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
2a740 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2a750 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
2a760 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2a770 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
2a780 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2a790 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2a7a0 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68 65  non-zero and the
2a7b0 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 65 6d   table is not em
2a7c0 70 74 79 2c 20 74 68 65 6e 20 74 68 65 20 22 73  pty, then the "s
2a7d0 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66 6c 61  kip-next".** fla
2a7e0 67 20 69 73 20 73 65 74 20 6f 6e 20 74 68 65 20  g is set on the 
2a7f0 63 75 72 73 6f 72 20 73 6f 20 74 68 61 74 20 74  cursor so that t
2a800 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78 74 20  he next OP_Next 
2a810 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a 2a 20  instruction .** 
2a820 65 78 65 63 75 74 65 64 20 6f 6e 20 69 74 20 69  executed on it i
2a830 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a  s a no-op..**.**
2a840 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
2a850 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
2a860 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
2a870 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
2a880 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
2a890 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
2a8a0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
2a8b0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
2a8c0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
2a8d0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
2a8e0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
2a8f0 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
2a900 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2a910 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2a920 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2a930 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2a940 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
2a950 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a960 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a970 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2a980 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2a990 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2a9a0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2a9b0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
2a9c0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2a9d0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
2a9e0 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
2a9f0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
2aa00 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
2aa10 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
2aa20 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2aa30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2aa40 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
2aa50 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
2aa60 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2aa70 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2aa80 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2aa90 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
2aaa0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  c.pCursor;.    a
2aab0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
2aac0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2aad0 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
2aae0 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e 64 65 66  , &res);.#ifndef
2aaf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
2ab00 44 4f 57 46 55 4e 43 0a 20 20 20 20 69 66 28 20  DOWFUNC.    if( 
2ab10 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69 74 65  pOp->p5 ) sqlite
2ab20 33 42 74 72 65 65 53 6b 69 70 4e 65 78 74 28 70  3BtreeSkipNext(p
2ab30 43 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  Crsr);.#endif.  
2ab40 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2ab50 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
2ab60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2ab70 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2ab80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2ab90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2aba0 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ror;.  pC->nullR
2abb0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
2abc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2abd0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
2abe0 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
2abf0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2ac00 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
2ac10 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2ac20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ac30 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
2ac40 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2ac50 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
2ac60 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2ac70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
2ac80 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
2ac90 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2aca0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2acb0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2acc0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
2acd0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2ace0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2acf0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2ad00 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
2ad10 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
2ad20 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2ad30 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2ad40 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
2ad50 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2ad60 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2ad70 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
2ad80 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
2ad90 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
2ada0 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
2adb0 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
2adc0 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
2add0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
2ade0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2adf0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
2ae00 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2ae10 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2ae20 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2ae30 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
2ae40 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
2ae50 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
2ae60 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
2ae70 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
2ae80 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
2ae90 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2aea0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2aeb0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2aec0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2aed0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2aee0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2aef0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2af00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2af10 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2af20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2af30 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2af40 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2af50 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2af60 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2af70 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2af80 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2af90 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2afa0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2afb0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2afc0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
2afd0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
2afe0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2aff0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2b000 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2b010 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2b020 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2b030 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2b040 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2b050 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2b060 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
2b070 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
2b080 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
2b090 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
2b0a0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
2b0b0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
2b0c0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
2b0d0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2b0e0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2b0f0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
2b100 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
2b110 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2b120 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2b130 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2b140 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2b150 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
2b160 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2b170 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2b180 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2b190 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
2b1a0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2b1b0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2b1c0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2b1d0 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
2b1e0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2b1f0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2b200 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2b210 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2b220 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2b230 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2b240 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2b250 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2b260 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2b270 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2b280 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2b290 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2b2a0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2b2b0 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2b2c0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2b2d0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2b2e0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2b2f0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2b300 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2b310 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2b320 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2b330 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2b340 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2b350 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2b360 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2b370 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2b380 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2b390 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2b3a0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2b3b0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2b3c0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2b3d0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2b3e0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2b3f0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2b400 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2b410 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2b420 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2b430 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2b440 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2b450 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2b460 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2b470 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2b480 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2b490 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a  rterNext P1 P2 *
2b4a0 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73   * P5.**.** This
2b4b0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
2b4c0 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
2b4d0 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d  except that P1 m
2b4e0 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74  ust be a.** sort
2b4f0 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68  er object for wh
2b500 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65  ich the OP_Sorte
2b510 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73  rSort opcode has
2b520 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64   been.** invoked
2b530 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61  .  This opcode a
2b540 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73  dvances the curs
2b550 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  or to the next s
2b560 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c  orted.** record,
2b570 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20   or jumps to P2 
2b580 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
2b590 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f  more sorted reco
2b5a0 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rds..*/.case OP_
2b5b0 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
2b5c0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2b5d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
2b5e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2b5f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b600 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2b610 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2b620 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
2b630 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  , pC);.  goto ne
2b640 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
2b650 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2b660 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2b670 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2b680 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2b690 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b6a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b6b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2b6c0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2b6d0 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2b6e0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2b6f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b700 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b710 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b720 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2b730 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2b740 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b750 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b760 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2b770 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
2b780 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2b790 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2b7a0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
2b7b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2b7c0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
2b7d0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2b7e0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2b7f0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65   );..  /* The Ne
2b800 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2b810 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2b820 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77  kGT, SeekGE, Rew
2b830 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a  ind, and Found..
2b840 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
2b850 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2b860 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
2b870 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
2b880 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
2b890 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2b8a0 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  ext.       || pC
2b8b0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2b8c0 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2b8d0 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2b8e0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2b8f0 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2b900 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2b910 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20  ound .       || 
2b920 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e  pC->seekOp==OP_N
2b930 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73 65 72  ullRow);.  asser
2b940 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2b950 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20 7c  OP_Prev.       |
2b960 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2b970 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
2b980 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
2b990 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2b9a0 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 0a  eekOp==OP_Last .
2b9b0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2b9c0 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77  ekOp==OP_NullRow
2b9d0 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
2b9e0 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
2b9f0 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d  uc.pCursor, pOp-
2ba00 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a  >p3);.next_tail:
2ba10 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
2ba20 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2ba30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2ba40 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  ken(rc==SQLITE_O
2ba50 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  K,2);.  if( rc==
2ba60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2ba70 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
2ba80 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
2ba90 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
2baa0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2bab0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
2bac0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
2bad0 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
2bae0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2baf0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2bb00 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
2bb10 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74  QLITE_DONE ) got
2bb20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2bb30 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c  rror;.  rc = SQL
2bb40 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75  ITE_OK;.  pC->nu
2bb50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74  llRow = 1;.  got
2bb60 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2bb70 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2bb80 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
2bb90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2bba0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2bbb0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
2bbc0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
2bbd0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
2bbe0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
2bbf0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
2bc00 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
2bc10 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
2bc20 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
2bc30 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
2bc40 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
2bc50 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66  is nil..**.** If
2bc60 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P4 is not zero,
2bc70 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
2bc80 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
2bc90 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65 64   in the unpacked
2bca0 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28 50  .** key of reg(P
2bcb0 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  2).  In that cas
2bcc0 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e 64  e, P3 is the ind
2bcd0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
2bce0 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20  register.** for 
2bcf0 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79  the unpacked key
2bd00 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69 6c  .  The availabil
2bd10 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61 63  ity of the unpac
2bd20 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65  ked key can some
2bd30 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f  times.** be an o
2bd40 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a  ptimization..**.
2bd50 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
2bd60 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 62   OPFLAG_APPEND b
2bd70 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73 20  it set, that is 
2bd80 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
2bd90 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68  tree layer.** th
2bda0 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20 69  at this insert i
2bdb0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
2bdc0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
2bdd0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2bde0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2bdf0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
2be00 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2be10 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
2be20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
2be30 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
2be40 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
2be50 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
2be60 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
2be70 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
2be80 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2be90 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2bea0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
2beb0 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
2bec0 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
2bed0 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
2bee0 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
2bef0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
2bf00 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
2bf10 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
2bf20 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2bf30 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
2bf40 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
2bf50 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
2bf60 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
2bf70 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
2bf80 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
2bf90 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
2bfa0 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20  y equivalent.** 
2bfb0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  to P2. .**.** Th
2bfc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2bfd0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
2bfe0 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
2bff0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
2c000 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
2c010 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
2c020 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2c030 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32 20  terInsert P1 P2 
2c040 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2c050 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
2c060 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
2c070 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
2c080 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
2c090 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
2c0a0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
2c0b0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
2c0c0 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
2c0d0 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65 72   into the sorter
2c0e0 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
2c0f0 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
2c100 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
2c110 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
2c120 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f  /* in2 */.case O
2c130 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
2c140 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2c150 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c160 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64  ;.  BtreePayload
2c170 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   x;..  assert( p
2c180 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c190 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c1a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c1b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73  sr[pOp->p1];.  s
2c1c0 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
2c1d0 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
2c1e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
2c1f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c200 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2c210 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2c220 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
2c230 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2c240 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2c250 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
2c260 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
2c270 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
2c280 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
2c290 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
2c2a0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2c2b0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2c2c0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2c2d0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2c2e0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2c2f0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2c300 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
2c310 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
2c320 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2c330 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c340 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2c350 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2c360 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2c370 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
2c380 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
2c390 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b   }else{.    x.nK
2c3a0 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
2c3b0 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d    x.pKey = pIn2-
2c3c0 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d  >z;.    x.aMem =
2c3d0 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b   aMem + pOp->p3;
2c3e0 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75  .    x.nMem = (u
2c3f0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2c400 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c410 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63  reeInsert(pC->uc
2c420 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20  .pCursor, &x,.  
2c430 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
2c440 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
2c450 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
2c460 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20  TION)), .       
2c470 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
2c480 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2c490 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
2c4a0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
2c4b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2c4c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2c4d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
2c4e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2c4f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
2c500 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61    if( rc) goto a
2c510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2c520 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
2c530 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
2c540 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
2c550 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c560 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
2c570 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
2c580 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
2c590 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
2c5a0 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
2c5b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
2c5c0 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
2c5d0 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
2c5e0 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
2c5f0 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
2c600 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
2c610 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
2c620 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2c630 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
2c640 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
2c650 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2c660 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2c670 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
2c680 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2c690 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
2c6a0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2c6b0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
2c6c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2c6d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c6e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c6f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c700 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c710 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2c720 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2c730 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2c740 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69 74  BTREE );.  sqlit
2c750 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
2c760 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20  ounter(p, pC);. 
2c770 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
2c780 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
2c790 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
2c7a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2c7b0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
2c7c0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2c7d0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2c7e0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
2c7f0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2c800 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
2c810 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2c820 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c830 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
2c840 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
2c850 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
2c860 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2c870 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2c880 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
2c890 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c8a0 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42  eDelete(pCrsr, B
2c8b0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b  TREE_AUXDELETE);
2c8c0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2c8d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c8e0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
2c8f0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2c900 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2c910 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2c920 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2c930 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2c940 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2c950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65  ./* Opcode: Defe
2c960 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33  rredSeek P1 * P3
2c970 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2c980 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31  s: Move P3 to P1
2c990 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64  .rowid if needed
2c9a0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
2c9b0 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  open index curso
2c9c0 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75  r and P3 is a cu
2c9d0 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72  rsor on the corr
2c9e0 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62  esponding.** tab
2c9f0 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  le.  This opcode
2ca00 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64   does a deferred
2ca10 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20   seek of the P3 
2ca20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20  table cursor.** 
2ca30 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
2ca40 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2ca50 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  he current row o
2ca60 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  f P1..**.** This
2ca70 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73   is a deferred s
2ca80 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
2ca90 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
2caa0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
2cab0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
2cac0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
2cad0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
2cae0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
2caf0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
2cb00 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20   happens..**.** 
2cb10 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72  P4 may be an arr
2cb20 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28  ay of integers (
2cb30 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59  type P4_INTARRAY
2cb40 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20  ) containing.** 
2cb50 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  one entry for ea
2cb60 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
2cb70 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61   P3 table.  If a
2cb80 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a  rray entry a(i).
2cb90 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ** is non-zero, 
2cba0 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2cbb0 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20  umn a(i)-1 from 
2cbc0 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a  cursor P3 is .**
2cbd0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70   equivalent to p
2cbe0 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65  erforming the de
2cbf0 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20  ferred seek and 
2cc00 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2cc10 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50  umn i .** from P
2cc20 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  1.  This informa
2cc30 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
2cc40 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f  n P3 and used to
2cc50 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61   redirect.** rea
2cc60 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76  ds against P3 ov
2cc70 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70  er to P1, thus p
2cc80 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67  ossibly avoiding
2cc90 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20   the need to.** 
2cca0 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75  seek and read cu
2ccb0 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f  rsor P3..*/./* O
2ccc0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
2ccd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2cce0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2ccf0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
2cd00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2cd10 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2cd20 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
2cd30 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
2cd40 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
2cd50 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
2cd60 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
2cd70 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
2cd80 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
2cd90 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
2cda0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
2cdb0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
2cdc0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
2cdd0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
2cde0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
2cdf0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
2ce00 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a  OP_DeferredSeek:
2ce10 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
2ce20 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
2ce30 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
2ce40 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
2ce50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2ce60 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  1 index cursor *
2ce70 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2ce80 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  pTabCur;        
2ce90 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20  /* The P2 table 
2cea0 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72  cursor (OP_Defer
2ceb0 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  redSeek only) */
2cec0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cee0 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20  * Rowid that P1 
2cef0 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74  current points t
2cf00 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
2cf10 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2cf20 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2cf30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cf40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2cf50 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2cf60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2cf70 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2cf80 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2cf90 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2cfa0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
2cfb0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2cfc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2cfd0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2cfe0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2cff0 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  ( !pC->nullRow |
2d000 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2d010 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20  P_IdxRowid );.. 
2d020 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64   /* The IdxRowid
2d030 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65   and Seek opcode
2d040 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62  s are combined b
2d050 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f  ecause of the co
2d060 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f  mmonality.  ** o
2d070 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  f sqlite3VdbeCur
2d080 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64  sorRestore() and
2d090 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2d0a0 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20  owid(). */.  rc 
2d0b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
2d0c0 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
2d0d0 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65  .  /* sqlite3Vbe
2d0e0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2d0f0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66  can only fail if
2d100 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
2d110 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a  been deleted.  *
2d120 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72  * out from under
2d130 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
2d140 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61  at will never ha
2d150 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78  ppens for an Idx
2d160 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65  Rowid.  ** or Se
2d170 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  ek opcode */.  i
2d180 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
2d190 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
2d1a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2d1b0 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e  r;..  if( !pC->n
2d1c0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
2d1d0 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
2d1e0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2d1f0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2d200 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
2d210 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2d220 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
2d230 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
2d240 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
2d250 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
2d260 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
2d270 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2d280 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
2d290 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66  ->opcode==OP_Def
2d2a0 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20  erredSeek ){.   
2d2b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2d2c0 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
2d2d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2d2e0 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70       pTabCur = p
2d2f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d  ->apCsr[pOp->p3]
2d300 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2d310 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20  pTabCur!=0 );.  
2d320 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2d330 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
2d340 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2d350 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2d360 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  abCur->uc.pCurso
2d370 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2d380 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69  sert( pTabCur->i
2d390 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20  sTable );.      
2d3a0 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  pTabCur->nullRow
2d3b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62   = 0;.      pTab
2d3c0 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65  Cur->movetoTarge
2d3d0 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  t = rowid;.     
2d3e0 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72   pTabCur->deferr
2d3f0 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
2d400 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2d410 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
2d420 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  RRAY || pOp->p4.
2d430 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70  ai==0 );.      p
2d440 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20  TabCur->aAltMap 
2d450 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
2d460 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c      pTabCur->pAl
2d470 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20  tCursor = pC;.  
2d480 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
2d490 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2d4a0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2d4b0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2d4c0 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  rowid;.    }.  }
2d4d0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2d4e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2d4f0 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20  P_IdxRowid );.  
2d500 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d510 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f  SetNull(&aMem[pO
2d520 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62  p->p2]);.  }.  b
2d530 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d540 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
2d550 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2d560 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2d570 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2d580 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2d590 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2d5a0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2d5b0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2d5c0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2d5d0 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
2d5e0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
2d5f0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
2d600 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
2d610 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2d620 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2d630 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2d640 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
2d650 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
2d660 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
2d670 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2d680 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
2d690 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
2d6a0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2d6b0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2d6c0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2d6d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d6e0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2d6f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2d700 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34  dxGT P1 P2 P3 P4
2d710 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2d720 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2d730 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2d740 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2d750 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2d760 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2d770 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2d780 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2d790 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2d7a0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2d7b0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2d7c0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2d7d0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2d7e0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2d7f0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2d800 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2d810 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2d820 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2d830 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2d840 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
2d850 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2d860 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2d870 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2d880 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d890 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2d8a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2d8b0 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
2d8c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2d8d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2d8e0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2d8f0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2d900 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2d910 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2d920 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2d930 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2d940 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2d950 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2d960 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2d970 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2d980 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2d990 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2d9a0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2d9b0 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2d9c0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2d9d0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2d9e0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2d9f0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
2da00 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
2da10 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
2da20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2da30 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2da40 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2da50 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2da60 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xLE P1 P2 P3 P4 
2da70 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2da80 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2da90 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2daa0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2dab0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2dac0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2dad0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2dae0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2daf0 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2db00 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2db10 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2db20 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2db30 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2db40 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2db50 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2db60 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2db70 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2db80 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2db90 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2dba0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
2dbb0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
2dbc0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
2dbd0 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65  p.** to P2. Othe
2dbe0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2dbf0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2dc00 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2dc10 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20  ase OP_IdxLE:   
2dc20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2dc30 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a  /.case OP_IdxGT:
2dc40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2dc50 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2dc60 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
2dc70 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2dc80 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20  IdxGE:  {       
2dc90 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2dca0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
2dcb0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2dcc0 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2dcd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2dce0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2dcf0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2dd00 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2dd10 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2dd20 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2dd30 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
2dd40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2dd50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2dd60 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2dd70 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2dd80 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65  rsor!=0);.  asse
2dd90 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2dda0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
2ddb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2ddc0 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
2ddd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2dde0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2ddf0 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  32 );.  r.pKeyIn
2de00 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2de10 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2de20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2de30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2de40 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  e<OP_IdxLT ){.  
2de50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2de60 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2de70 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2de80 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
2de90 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
2dea0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2deb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2dec0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
2ded0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2dee0 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxLT );.    r.
2def0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
2df00 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26    }.  r.aMem = &
2df10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
2df20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2df30 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  UG.  { int i; fo
2df40 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
2df50 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
2df60 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2df70 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
2df80 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f  if.  res = 0;  /
2df90 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
2dfa0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
2dfb0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2dfc0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2dfd0 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
2dfe0 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72  e(db, pC, &r, &r
2dff0 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  es);.  assert( (
2e000 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50  OP_IdxLE&1)==(OP
2e010 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50  _IdxLT&1) && (OP
2e020 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxGE&1)==(OP_I
2e030 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28  dxGT&1) );.  if(
2e040 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29   (pOp->opcode&1)
2e050 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29  ==(OP_IdxLT&1) )
2e060 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2e070 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2e080 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2e090 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2e0a0 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
2e0b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2e0c0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2e0d0 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
2e0e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2e0f0 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b  xGT );.    res++
2e100 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2e110 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29  chTaken(res>0,2)
2e120 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2e130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2e140 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e  rror;.  if( res>
2e150 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2e160 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2e170 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
2e180 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
2e190 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
2e1a0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2e1b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2e1c0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
2e1d0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
2e1e0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
2e1f0 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
2e200 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
2e210 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
2e220 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2e230 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
2e240 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
2e250 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2e260 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2e270 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2e280 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2e290 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2e2a0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2e2b0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2e2c0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2e2d0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2e2e0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
2e2f0 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
2e300 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
2e310 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
2e320 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
2e330 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
2e340 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
2e350 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
2e360 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
2e370 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
2e380 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
2e390 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
2e3a0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
2e3b0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
2e3c0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
2e3d0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
2e3e0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
2e3f0 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
2e400 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
2e410 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d  If no page movem
2e420 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
2e430 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a   (because the.**
2e440 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2e450 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2e460 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2e470 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2e480 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69  hen a .** zero i
2e490 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2e4a0 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54  ster P2.  If AUT
2e4b0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
2e4c0 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
2e4d0 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2e4e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2e4f0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2e500 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2e510 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
2e520 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56   active reader V
2e530 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73  Ms when.** it is
2e540 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69   invoked. This i
2e550 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  s done to avoid 
2e560 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61  the difficulty a
2e570 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a  ssociated with .
2e580 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73  ** updating exis
2e590 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65  ting cursors whe
2e5a0 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73  n a root page is
2e5b0 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54   moved in an AUT
2e5c0 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61  OVACUUM .** data
2e5d0 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72  base. This error
2e5e0 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20   is thrown even 
2e5f0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2e600 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41  is not an AUTOVA
2e610 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f  CUUM .** db in o
2e620 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e  rder to avoid in
2e630 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63  troducing an inc
2e640 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74  ompatibility bet
2e650 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20  ween autovacuum 
2e660 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f  .** and non-auto
2e670 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a  vacuum modes..**
2e680 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
2e690 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
2e6a0 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
2e6b0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
2e6c0 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
2e6d0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
2e6e0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2e6f0 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  (p, 0);.  assert
2e700 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2e710 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e720 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75  p->p1>1 );.  pOu
2e730 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2e740 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
2e750 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2e760 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e  Null;.  if( db->
2e770 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e  nVdbeRead > db->
2e780 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20  nVDestroy+1 ){. 
2e790 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
2e7a0 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
2e7b0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
2e7c0 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61  bort;.    goto a
2e7d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2e7e0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
2e7f0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
2e800 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
2e810 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2e820 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20  sk, iDb) );.    
2e830 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20  iMoved = 0;  /* 
2e840 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2e850 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  y to silence a w
2e860 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2e870 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2e880 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
2e890 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
2e8a0 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
2e8b0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
2e8c0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
2e8d0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
2e8e0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2e8f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e900 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20  _error;.#ifndef 
2e910 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2e920 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69  VACUUM.    if( i
2e930 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
2e940 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
2e950 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
2e960 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
2e970 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
2e980 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
2e990 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
2e9a0 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
2e9b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
2e9c0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2e9d0 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
2e9e0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
2e9f0 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
2ea00 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
2ea10 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
2ea20 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
2ea30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
2ea40 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
2ea50 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
2ea60 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
2ea70 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2ea80 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2ea90 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
2eaa0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2eab0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
2eac0 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
2ead0 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
2eae0 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
2eaf0 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
2eb00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2eb10 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2eb20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
2eb30 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2eb40 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
2eb50 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
2eb60 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
2eb70 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
2eb80 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2eb90 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
2eba0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2ebb0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
2ebc0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
2ebd0 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
2ebe0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2ebf0 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
2ec00 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
2ec10 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
2ec20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
2ec30 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
2ec40 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
2ec50 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
2ec60 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
2ec70 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
2ec80 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
2ec90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2eca0 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
2ecb0 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
2ecc0 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
2ecd0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
2ece0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
2ecf0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2ed00 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
2ed10 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2ed20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2ed30 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2ed40 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
2ed50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
2ed60 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
2ed70 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
2ed80 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c  nChange;. .  sql
2ed90 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2eda0 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
2edb0 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2edc0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2edd0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2ede0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2edf0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2ee00 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2ee10 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2ee20 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2ee30 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2ee40 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2ee50 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2ee60 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2ee70 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2ee80 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2ee90 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2eea0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2eeb0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2eec0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2eed0 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2eee0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2eef0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2ef00 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2ef10 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2ef20 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2ef30 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2ef40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ef50 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2ef60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2ef70 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2ef80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2ef90 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2efa0 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2efb0 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2efc0 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2efd0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2efe0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2eff0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2f000 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2f010 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2f020 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2f030 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2f040 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2f050 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2f060 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2f070 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2f080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2f090 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2f0a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2f0b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2f0c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f0d0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2f0e0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2f0f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2f100 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2f110 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2f120 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2f130 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2f140 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2f150 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2f160 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2f170 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2f180 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2f190 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2f1a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2f1b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2f1c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2f1d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2f1e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2f1f0 65 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20  eBtree P1 P2 P3 
2f200 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f210 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2f220 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a  P1 flags=P3.**.*
2f230 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2f240 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d   b-tree in the m
2f250 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2f260 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2f270 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74   the.** TEMP dat
2f280 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2f290 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
2f2a0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
2f2b0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20  f.** P1>1.  The 
2f2c0 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  P3 argument must
2f2d0 20 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54   be 1 (BTREE_INT
2f2e0 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64  KEY) for a rowid
2f2f0 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73   table.** it mus
2f300 74 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c  t be 2 (BTREE_BL
2f310 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e  OBKEY) for an in
2f320 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52  dex or WITHOUT R
2f330 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  OWID table..** T
2f340 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2f350 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62  ber of the new b
2f360 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20  -tree is stored 
2f370 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2f380 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2f390 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20  eBtree: {       
2f3a0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2f3b0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a  int pgno;.  Db *
2f3c0 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
2f3d0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2f3e0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75  ter(p, 0);.  pOu
2f3f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2f400 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2f410 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2f420 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45  ( pOp->p3==BTREE
2f430 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e  _INTKEY || pOp->
2f440 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45  p3==BTREE_BLOBKE
2f450 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
2f460 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2f470 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2f480 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2f490 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2f4a0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
2f4b0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2f4c0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
2f4d0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
2f4e0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f4f0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
2f500 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f510 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
2f520 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70  b->pBt, &pgno, p
2f530 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72  Op->p3);.  if( r
2f540 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2f550 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2f560 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
2f570 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f580 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20  Opcode: SqlExec 
2f590 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2f5a0 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
2f5b0 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d  tement or statem
2f5c0 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
2f5d0 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  n the P4 string.
2f5e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45  .*/.case OP_SqlE
2f5f0 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  xec: {.  sqlite3
2f600 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2f610 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62  nter(p, 0);.  db
2f620 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20  ->nSqlExec++;.  
2f630 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2f640 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  c(db, pOp->p4.z,
2f650 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d   0, 0, 0);.  db-
2f660 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69  >nSqlExec--;.  i
2f670 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2f680 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2f690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f6a0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
2f6b0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
2f6c0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
2f6d0 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
2f6e0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
2f6f0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
2f700 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
2f710 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
2f720 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
2f730 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2f740 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
2f750 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
2f760 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
2f770 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
2f780 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
2f790 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
2f7a0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
2f7b0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
2f7c0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
2f7d0 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
2f7e0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
2f7f0 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
2f800 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
2f810 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
2f820 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
2f830 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
2f840 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
2f850 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
2f860 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
2f870 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
2f880 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
2f890 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
2f8a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
2f8b0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
2f8c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2f8d0 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
2f8e0 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
2f8f0 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
2f900 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
2f910 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
2f920 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
2f930 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
2f940 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
2f950 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
2f960 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
2f970 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f980 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
2f990 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
2f9a0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
2f9b0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
2f9c0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
2f9d0 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d  .    zMaster = M
2f9e0 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20  ASTER_NAME;.    
2f9f0 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
2fa00 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
2fa10 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
2fa20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
2fa30 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
2fa40 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
2fa50 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2fa60 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
2fa70 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
2fa80 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
2fa90 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
2faa0 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
2fab0 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
2fac0 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  DbSName, zMaster
2fad0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2fae0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
2faf0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2fb00 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
2fb10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2fb20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2fb30 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
2fb40 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2fb50 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
2fb60 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
2fb70 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
2fb80 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
2fb90 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
2fba0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2fbb0 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
2fbc0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
2fbd0 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2fbe0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2fbf0 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
2fc00 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
2fc10 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64  qlite3DbFreeNN(d
2fc20 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
2fc30 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2fc40 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
2fc50 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2fc60 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2fc70 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2fc80 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  db);.    if( rc=
2fc90 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
2fca0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2fcb0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  em;.    }.    go
2fcc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2fcd0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2fce0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
2fcf0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2fd00 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
2fd10 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
2fd20 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
2fd30 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
2fd40 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
2fd50 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
2fd60 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
2fd70 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
2fd80 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
2fd90 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
2fda0 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
2fdb0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
2fdc0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
2fdd0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
2fde0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
2fdf0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
2fe00 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
2fe10 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
2fe20 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2fe30 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2fe40 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fe50 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
2fe60 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
2fe70 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2fe80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2fe90 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
2fea0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
2feb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2fec0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
2fed0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
2fee0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2fef0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2ff00 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2ff10 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2ff20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2ff30 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
2ff40 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2ff50 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2ff60 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
2ff70 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
2ff80 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2ff90 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2ffa0 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2ffb0 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2ffc0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2ffd0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2ffe0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2fff0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
30000 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
30010 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
30020 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
30030 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
30040 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e   0);.  sqlite3Un
30050 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
30060 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
30070 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
30080 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30090 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
300a0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
300b0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
300c0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
300d0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
300e0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
300f0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
30100 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
30110 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
30120 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
30130 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
30140 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
30150 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
30160 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
30170 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
30180 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
30190 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
301a0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
301b0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
301c0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
301d0 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
301e0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
301f0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
30200 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
30210 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
30220 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
30230 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
30240 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30250 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
30260 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30270 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
30280 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
30290 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
302a0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
302b0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
302c0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
302d0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
302e0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
302f0 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
30300 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
30310 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
30320 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
30330 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
30340 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
30350 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
30360 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
30370 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
30380 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
30390 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
303a0 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  er: {.  sqlite3V
303b0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
303c0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
303d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
303e0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
303f0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
30400 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
30410 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30420 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
30430 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
30440 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
30450 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
30460 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
30470 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
30480 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
30490 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
304a0 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
304b0 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
304c0 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
304d0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
304e0 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
304f0 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
30500 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
30510 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
30520 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
30530 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73  ontains one less
30540 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75   than the maximu
30550 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
30560 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
30570 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
30580 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
30590 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
305a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
305b0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
305c0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
305d0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
305e0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
305f0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
30600 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
30610 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
30620 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
30630 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
30640 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
30650 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
30660 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20  egers.** stored 
30670 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61  in P4_INTARRAY a
30680 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  rgument..**.** I
30690 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
306a0 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
306b0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
306c0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
306d0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
306e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
306f0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
30700 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
30710 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
30720 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
30730 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
30740 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
30750 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
30760 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
30770 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
30780 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
30790 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
307a0 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
307b0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
307c0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
307d0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
307e0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ked */.  int nEr
307f0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
30800 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
30810 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
30820 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
30830 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
30840 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
30850 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
30860 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
30870 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
30880 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
30890 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
308a0 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
308b0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f  = pOp->p2;.  aRo
308c0 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ot = pOp->p4.ai;
308d0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
308e0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
308f0 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20  aRoot[0]==nRoot 
30900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
30910 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
30920 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
30930 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
30940 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
30950 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
30960 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
30970 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
30980 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
30990 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
309a0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
309b0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
309c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
309d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
309e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
309f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
30a00 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
30a10 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
30a20 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
30a30 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
30a40 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
30a50 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f  , &aRoot[1], nRo
30a60 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
30a90 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a  >u.i+1, &nErr);.
30aa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
30ab0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
30ac0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
30ad0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
30ae0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
30af0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
30b00 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
30b10 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69  {.    pnErr->u.i
30b20 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20   -= nErr-1;.    
30b30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
30b40 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
30b50 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
30b60 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
30b70 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
30b80 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
30b90 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
30ba0 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
30bb0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
30bc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30bd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
30be0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
30bf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
30c00 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
30c10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
30c20 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
30c30 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
30c40 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
30c50 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
30c60 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74  P2 into a RowSet
30c70 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20   object.** held 
30c80 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
30c90 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
30ca0 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
30cb0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
30cc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
30cd0 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
30ce0 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
30cf0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
30d00 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
30d10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
30d20 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
30d30 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d40 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
30d50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
30d60 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
30d70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30d80 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
30d90 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
30da0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
30db0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
30dc0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
30dd0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
30de0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
30df0 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
30e00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
30e10 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
30e20 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30e30 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
30e40 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
30e50 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
30e60 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
30e70 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  m the RowSet obj
30e80 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  ect in P1.** and
30e90 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
30ea0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
30eb0 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53  ..** Or, if RowS
30ec0 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20  et object P1 is 
30ed0 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
30ee0 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
30ef0 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
30f00 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
30f10 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
30f20 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
30f30 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
30f40 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
30f50 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
30f60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
30f70 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
30f80 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
30f90 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
30fa0 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
30fb0 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
30fc0 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
30fd0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
30fe0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
30ff0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31000 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
31010 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
31020 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74  en(1,2);.    got
31030 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
31040 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
31050 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
31060 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
31070 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
31080 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56  e index */.    V
31090 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
310a0 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ,2);.    sqlite3
310b0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
310c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
310d0 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  val);.  }.  goto
310e0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
310f0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
31100 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
31110 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
31120 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
31130 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
31140 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
31150 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
31160 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
31170 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
31180 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
31190 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
311a0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
311b0 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
311c0 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
311d0 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
311e0 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
311f0 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
31200 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
31210 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
31220 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
31230 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
31240 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
31250 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
31260 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
31270 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
31280 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
31290 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67  re sets of integ
312a0 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72  ers.** are inser
312b0 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20  ted in distinct 
312c0 70 68 61 73 65 73 2c 20 77 68 69 63 68 20 65 61  phases, which ea
312d0 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
312e0 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a  no duplicates..*
312f0 2a 20 45 61 63 68 20 73 65 74 20 69 73 20 69 64  * Each set is id
31300 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
31310 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
31320 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
31330 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
31340 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d   the final set m
31350 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c  ust have P4==-1,
31360 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68   and for all oth
31370 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20  er sets.** must 
31380 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a  have P4>0..**.**
31390 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
313a0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
313b0 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
313c0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
313d0 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65  est.** the RowSe
313e0 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
313f0 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
31400 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
31410 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
31420 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
31430 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
31440 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
31450 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
31460 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
31470 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
31480 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
31490 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
314a0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
314b0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
314c0 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
314d0 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
314e0 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
314f0 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
31500 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
31510 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
31520 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
31530 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
31540 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
31550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
31560 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31580 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
31590 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
315a0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
315b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
315c0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
315d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
315e0 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
315f0 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
31600 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
31610 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
31620 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
31630 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
31640 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
31650 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
31660 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
31670 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
31680 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
31690 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
316a0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
316b0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
316c0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
316d0 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
316e0 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
316f0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
31700 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
31710 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
31720 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
31730 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
31740 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
31750 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
31760 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
31770 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
31780 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
31790 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
317a0 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e  et, iSet, pIn3->
317b0 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72  u.i);.    VdbeBr
317c0 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73  anchTaken(exists
317d0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
317e0 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  exists ) goto ju
317f0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
31800 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
31810 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
31820 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
31830 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
31840 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
31850 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
31860 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
31870 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
31880 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
31890 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
318a0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
318b0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
318c0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
318d0 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
318e0 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
318f0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
31900 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
31910 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
31920 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
31930 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
31940 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
31950 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
31960 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
31970 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
31980 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
31990 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
319a0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
319b0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
319c0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
319d0 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
319e0 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
319f0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
31a00 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
31a10 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
31a20 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
31a30 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
31a40 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
31a50 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
31a60 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
31a70 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
31a80 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
31a90 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
31aa0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
31ab0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
31ac0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
31ad0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
31ae0 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
31af0 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
31b00 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
31b10 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
31b20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
31b30 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
31b40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
31b50 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
31b60 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
31b70 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
31b80 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
31b90 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
31ba0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
31bb0 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
31bc0 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
31bd0 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
31be0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
31bf0 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
31c00 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
31c10 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
31c20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
31c30 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
31c40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
31c50 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
31c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
31c70 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
31c80 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
31c90 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
31ca0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
31cb0 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
31cc0 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
31cd0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
31ce0 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
31cf0 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
31d00 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31d20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
31d30 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
31d40 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
31d50 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
31d60 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
31d70 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
31d80 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
31d90 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
31da0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
31db0 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
31dc0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
31dd0 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
31de0 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
31df0 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
31e00 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
31e10 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
31e20 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
31e30 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
31e40 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
31e50 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
31e60 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
31e70 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
31e80 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
31e90 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
31ea0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
31eb0 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
31ec0 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
31ed0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
31ee0 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
31ef0 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
31f00 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
31f10 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
31f20 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
31f30 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
31f40 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
31f50 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
31f60 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
31f70 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
31f80 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
31f90 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
31fa0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
31fb0 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
31fc0 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
31fd0 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
31fe0 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
31ff0 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
32000 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
32010 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
32020 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
32030 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
32040 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
32050 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
32060 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
32070 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
32080 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
32090 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
320a0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
320b0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
320c0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
320d0 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
320e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
320f0 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
32100 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
32110 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
32120 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
32130 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  or(p, "too many 
32140 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
32150 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
32160 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
32170 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
32180 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
32190 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
321a0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
321b0 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
321c0 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
321d0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
321e0 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
321f0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
32200 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
32210 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
32220 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
32230 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
32240 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
32250 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
32260 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
32270 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
32280 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
32290 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
322a0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
322b0 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
322c0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
322d0 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
322e0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
322f0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
32300 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
32310 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
32320 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
32330 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
32340 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
32350 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
32360 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
32370 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
32380 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
32390 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
323a0 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
323b0 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
323c0 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
323d0 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
323e0 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
323f0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
32400 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
32410 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  r;.    assert( n
32420 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  Mem>0 );.    if(
32430 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
32440 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20  =0 ) nMem++;.   
32450 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
32460 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
32470 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
32480 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
32490 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
324a0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
324b0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
324c0 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20  beCursor*).     
324d0 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f           + (pPro
324e0 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38  gram->nOp + 7)/8
324f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
32500 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
32510 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
32520 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
32530 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
32540 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
32550 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
32560 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
32570 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
32580 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
32590 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
325a0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
325b0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
325c0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
325d0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
325e0 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
325f0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
32600 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
32610 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
32620 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
32630 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
32640 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
32650 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
32660 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
32670 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
32680 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
32690 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
326a0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
326b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
326c0 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
326d0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
326e0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
326f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
32700 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
32710 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
32720 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
32730 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  Exec;.#endif..  
32740 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
32750 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
32760 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
32770 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
32780 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
32790 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
327a0 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
327b0 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
327c0 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
327d0 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
327e0 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
327f0 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
32800 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
32810 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
32820 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
32830 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
32840 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20  >nChildMem .    
32850 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d      || (pProgram
32860 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72  ->nCsr==0 && pPr
32870 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70  ogram->nMem+1==p
32880 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
32890 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
328a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
328b0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
328c0 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
328d0 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  ( (int)(pOp - aO
328e0 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  p)==pFrame->pc )
328f0 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
32900 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
32910 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
32920 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
32930 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
32940 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
32950 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
32960 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61  >nChange;.  pFra
32970 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20  me->nDbChange = 
32980 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a  p->db->nChange;.
32990 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65    assert( pFrame
329a0 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b  ->pAuxData==0 );
329b0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  .  pFrame->pAuxD
329c0 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74  ata = p->pAuxDat
329d0 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61  a;.  p->pAuxData
329e0 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e   = 0;.  p->nChan
329f0 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
32a00 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
32a10 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
32a20 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46   VdbeFrameMem(pF
32a30 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  rame);.  p->nMem
32a40 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
32a50 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
32a60 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
32a70 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
32a80 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
32a90 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
32aa0 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d  ->nMem];.  pFram
32ab0 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29  e->aOnce = (u8*)
32ac0 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72  &p->apCsr[pProgr
32ad0 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d  am->nCsr];.  mem
32ae0 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63  set(pFrame->aOnc
32af0 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d  e, 0, (pProgram-
32b00 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20  >nOp + 7)/8);.  
32b10 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
32b20 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
32b30 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
32b40 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53  m->nOp;.#ifdef S
32b50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
32b60 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
32b70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
32b80 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
32b90 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b  p[-1];..  break;
32ba0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
32bb0 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
32bc0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
32bd0 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
32be0 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
32bf0 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
32c00 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
32c10 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
32c20 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
32c30 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
32c40 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
32c50 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
32c60 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
32c70 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
32c80 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
32c90 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
32ca0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
32cb0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
32cc0 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
32cd0 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
32ce0 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
32cf0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
32d00 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
32d10 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
32d20 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
32d30 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
32d40 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
32d50 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
32d60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
32d70 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
32d80 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
32d90 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
32da0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32db0 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
32dc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
32dd0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
32de0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
32df0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
32e00 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32e10 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
32e20 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
32e30 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
32e40 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
32e50 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
32e60 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
32e70 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
32e80 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
32e90 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
32ea0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
32eb0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
32ec0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
32ed0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32ee0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
32ef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
32f00 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
32f10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
32f20 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
32f30 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
32f40 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
32f50 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
32f60 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
32f70 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
32f80 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
32f90 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
32fa0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
32fb0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
32fc0 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
32fd0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
32fe0 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
32ff0 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
33000 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
33010 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
33020 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
33030 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
33040 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
33050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
33060 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
33070 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
33080 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
33090 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
330a0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
330b0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
330c0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
330d0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
330e0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
330f0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
33100 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
33110 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
33120 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
33130 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
33140 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
33150 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
33160 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
33170 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
33180 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
33190 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
331a0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
331b0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
331c0 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
331d0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
331e0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
331f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
33200 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
33210 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
33220 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
33230 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
33240 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
33250 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
33260 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
33270 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
33280 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
33290 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
332a0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
332b0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
332c0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
332d0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
332e0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
332f0 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
33300 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
33310 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
33320 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
33330 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
33340 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
33350 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
33360 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
33370 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
33380 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
33390 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
333a0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
333b0 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
333c0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
333d0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
333e0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
333f0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
33400 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
33410 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
33420 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
33430 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
33440 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
33450 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
33460 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
33470 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
33480 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
33490 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
334a0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
334b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
334c0 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
334d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
334e0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
334f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
33500 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
33510 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
33520 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
33530 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
33540 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
33550 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
33560 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
33570 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
33580 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
33590 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
335a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
335b0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
335c0 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
335d0 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
335e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
335f0 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
33600 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
33610 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
33620 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
33630 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
33640 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
33650 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
33660 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
33670 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
33680 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
33690 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
336a0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
336b0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
336c0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
336d0 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
336e0 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
336f0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
33700 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
33710 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
33720 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
33730 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
33740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
33750 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
33760 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
33770 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
33780 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
33790 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
337a0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
337b0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
337c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
337d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
337e0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
337f0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
33800 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
33810 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
33820 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
33830 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
33840 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
33850 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
33860 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
33870 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
33880 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
33890 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
338a0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
338b0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
338c0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
338d0 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
338e0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
338f0 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
33900 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
33910 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
33920 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
33930 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
33940 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
33950 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
33960 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
33970 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
33980 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
33990 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
339a0 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
339b0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
339c0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
339d0 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
339e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
339f0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
33a00 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33a10 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
33a20 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
33a30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33a40 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
33a50 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
33a60 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
33a70 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
33a80 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
33a90 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
33aa0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33ab0 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
33ac0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
33ad0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
33ae0 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
33af0 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
33b00 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
33b10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
33b20 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
33b30 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
33b40 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
33b50 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
33b60 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
33b70 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
33b80 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
33b90 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
33ba0 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
33bb0 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
33bc0 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
33bd0 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
33be0 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
33bf0 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
33c00 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
33c10 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
33c20 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
33c30 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
33c40 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
33c50 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
33c60 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
33c70 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
33c80 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
33c90 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
33ca0 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
33cb0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
33cc0 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
33cd0 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
33ce0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
33cf0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33d00 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
33d10 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
33d20 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
33d30 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
33d40 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
33d50 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
33d60 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
33d70 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
33d80 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
33d90 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
33da0 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
33db0 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
33dc0 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
33dd0 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
33de0 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
33df0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33e00 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
33e10 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
33e20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
33e30 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
33e40 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
33e50 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
33e60 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
33e70 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
33e80 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
33e90 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
33ea0 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
33eb0 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
33ec0 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
33ed0 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
33ee0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
33ef0 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
33f00 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
33f10 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
33f20 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
33f30 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
33f40 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
33f50 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
33f60 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
33f70 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
33f80 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
33f90 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
33fa0 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
33fb0 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
33fc0 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
33fd0 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
33fe0 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
33ff0 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
34000 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
34010 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
34020 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
34030 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
34040 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
34050 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
34060 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
34070 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
34080 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
34090 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
340a0 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
340b0 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
340c0 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
340d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
340e0 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
340f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
34100 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
34110 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
34120 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
34130 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
34140 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
34150 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
34160 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
34170 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
34180 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
34190 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
341a0 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
341b0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
341c0 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
341d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
341e0 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
341f0 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
34200 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
34210 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
34220 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
34230 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
34240 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
34250 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
34260 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
34270 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
34280 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
34290 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
342a0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
342b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
342c0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
342d0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
342e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
342f0 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
34300 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
34310 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
34320 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
34330 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
34340 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
34350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
34360 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
34370 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
34380 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
34390 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
343a0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
343b0 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
343c0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
343d0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
343e0 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
343f0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
34400 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
34410 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
34420 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
34430 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
34440 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
34450 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
34460 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
34470 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
34480 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
34490 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
344a0 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
344b0 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
344c0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
344d0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
344e0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
344f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
34500 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
34510 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 50  code: AggStep0 P
34520 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
34530 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
34540 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
34550 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
34560 75 74 65 20 74 68 65 20 78 53 74 65 70 20 28 69  ute the xStep (i
34570 66 20 50 31 3d 3d 30 29 20 6f 72 20 78 49 6e 76  f P1==0) or xInv
34580 65 72 73 65 20 28 69 66 20 50 31 21 3d 30 29 20  erse (if P1!=0) 
34590 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 0a  function for an.
345a0 2a 2a 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  ** aggregate.  T
345b0 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  he function has 
345c0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50  P5 arguments.  P
345d0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
345e0 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65  o the .** FuncDe
345f0 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  f structure that
34600 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
34610 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
34620 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20  er P3 is the.** 
34630 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
34640 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
34650 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
34660 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
34670 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
34680 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sors..*/./* Opco
34690 64 65 3a 20 41 67 67 53 74 65 70 20 50 31 20 50  de: AggStep P1 P
346a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
346b0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
346c0 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
346d0 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
346e0 20 74 68 65 20 78 53 74 65 70 20 28 69 66 20 50   the xStep (if P
346f0 31 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73  1==0) or xInvers
34700 65 20 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e  e (if P1!=0) fun
34710 63 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20  ction for an.** 
34720 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 20  aggregate.  The 
34730 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
34740 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69  arguments.  P4 i
34750 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
34760 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73  he .** FuncDef s
34770 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
34780 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
34790 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
347a0 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
347b0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
347c0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
347d0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
347e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
347f0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
34800 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
34810 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c  code is initiall
34820 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67  y coded as OP_Ag
34830 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73  gStep0.  On firs
34840 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a  t evaluation,.**
34850 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f   the FuncDef sto
34860 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e  red in P4 is con
34870 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73  verted into an s
34880 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61  qlite3_context a
34890 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65  nd.** the opcode
348a0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e   is changed.  In
348b0 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69   this way, the i
348c0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  nitialization of
348d0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
348e0 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70  context only hap
348f0 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65  pens once, inste
34900 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61  ad of on each ca
34910 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65  ll to the.** ste
34920 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  p function..*/.c
34930 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a  ase OP_AggStep0:
34940 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
34950 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
34960 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
34970 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
34980 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
34990 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
349a0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
349b0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
349c0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
349d0 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
349e0 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
349f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
34a00 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
34a10 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
34a20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
34a30 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
34a40 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
34a50 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
34a60 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
34a70 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71  (db, n*sizeof(sq
34a80 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a  lite3_value*) +.
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
34aa0 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29 20  sizeof(pCtx[0]) 
34ab0 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20  + sizeof(Mem) - 
34ac0 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76  sizeof(sqlite3_v
34ad0 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28 20  alue*)));.  if( 
34ae0 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
34af0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
34b00 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
34b10 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28  >pOut = (Mem*)&(
34b20 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a  pCtx->argv[n]);.
34b30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34b40 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c  Init(pCtx->pOut,
34b50 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a   db, MEM_Null);.
34b60 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20    pCtx->pFunc = 
34b70 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
34b80 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e   pCtx->iOp = (in
34b90 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
34ba0 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70   pCtx->pVdbe = p
34bb0 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  ;.  pCtx->skipFl
34bc0 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e  ag = 0;.  pCtx->
34bd0 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70  isError = 0;.  p
34be0 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20  Ctx->argc = n;. 
34bf0 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
34c00 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70  4_FUNCCTX;.  pOp
34c10 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78  ->p4.pCtx = pCtx
34c20 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
34c30 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20  = OP_AggStep;.  
34c40 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
34c50 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20  into OP_AggStep 
34c60 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67  */.}.case OP_Agg
34c70 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  Step: {.  int i;
34c80 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
34c90 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20  xt *pCtx;.  Mem 
34ca0 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74  *pMem;..  assert
34cb0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
34cc0 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
34cd0 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
34ce0 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d  tx;.  pMem = &aM
34cf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20  em[pOp->p3];..  
34d00 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
34d10 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
34d20 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
34d30 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
34d40 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
34d50 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
34d60 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
34d70 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
34d80 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
34d90 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
34da0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
34db0 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
34dc0 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
34dd0 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
34de0 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
34df0 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
34e00 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
34e10 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
34e20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
34e30 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
34e40 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
34e50 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
34e60 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
34e70 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
34e80 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
34e90 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
34ea0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
34eb0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
34ec0 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
34ed0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
34ee0 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
34ef0 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
34f00 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
34f10 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
34f20 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
34f30 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
34f40 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f  assert( pCtx->pO
34f50 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
34f60 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ull );.  assert(
34f70 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d   pCtx->isError==
34f80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
34f90 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
34fa0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
34fb0 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
34fc0 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  NC.  if( pOp->p1
34fd0 20 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70   ){.    (pCtx->p
34fe0 46 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28  Func->xInverse)(
34ff0 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
35000 70 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d  pCtx->argv);.  }
35010 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70  else.#endif.  (p
35020 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
35030 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
35040 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
35050 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
35060 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28  -23230 */..  if(
35070 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
35080 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
35090 69 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20  isError>0 ){.   
350a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
350b0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
350c0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
350d0 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
350e0 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
350f0 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
35100 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70    if( pCtx->skip
35110 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73  Flag ){.      as
35120 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
35130 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
35140 20 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f   );.      i = pO
35150 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20  p[-1].p1;.      
35160 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
35170 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
35180 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20  aMem[i], 1);.   
35190 20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61     pCtx->skipFla
351a0 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
351b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
351c0 65 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75  elease(pCtx->pOu
351d0 74 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f  t);.    pCtx->pO
351e0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
351f0 4e 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e  Null;.    pCtx->
35200 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20  isError = 0;.   
35210 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35220 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35230 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
35240 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
35250 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
35260 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
35270 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 20  skipFlag==0 );. 
35280 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
35290 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
352a0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
352b0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
352c0 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a  r[P1] N=P2.**.**
352d0 20 50 31 20 69 73 20 74 68 65 20 6d 65 6d 6f 72   P1 is the memor
352e0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
352f0 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
35300 6f 72 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  or for an aggreg
35310 61 74 65 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77  ate.** or window
35320 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 50 33   function. If P3
35330 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 65   is zero, then e
35340 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
35350 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 0a 2a  izer function .*
35360 2a 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  * for an aggrega
35370 74 65 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  te and store the
35380 20 72 65 73 75 6c 74 20 69 6e 20 50 31 2e 20 4f   result in P1. O
35390 72 2c 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  r, if P3 is non-
353a0 7a 65 72 6f 2c 0a 2a 2a 20 69 6e 76 6f 6b 65 20  zero,.** invoke 
353b0 74 68 65 20 78 56 61 6c 75 65 28 29 20 66 75 6e  the xValue() fun
353c0 63 74 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20  ction and store 
353d0 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
353e0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
353f0 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
35400 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
35410 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
35420 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
35430 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
35440 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
35450 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
35460 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
35470 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
35480 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
35490 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
354a0 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
354b0 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
354c0 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
354d0 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
354e0 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
354f0 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
35500 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
35510 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
35520 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
35530 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
35540 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
35550 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
35560 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
35570 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
35580 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
35590 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
355a0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
355b0 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
355c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
355d0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
355e0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
355f0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
35600 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
35610 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
35620 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  C.  if( pOp->p3 
35630 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
35640 74 65 33 56 64 62 65 4d 65 6d 41 67 67 56 61 6c  te3VdbeMemAggVal
35650 75 65 28 70 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  ue(pMem, &aMem[p
35660 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d 3e 70 34  Op->p3], pOp->p4
35670 2e 70 46 75 6e 63 29 3b 0a 20 20 20 20 70 4d 65  .pFunc);.    pMe
35680 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
35690 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  3];.  }else.#end
356a0 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  if.  rc = sqlite
356b0 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
356c0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
356d0 46 75 6e 63 29 3b 0a 20 20 0a 20 20 69 66 28 20  Func);.  .  if( 
356e0 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
356f0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
35700 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
35710 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
35720 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
35730 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
35740 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
35750 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
35760 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
35770 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
35780 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
35790 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
357a0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
357b0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
357c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
357d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
357e0 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
357f0 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
35800 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
35810 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
35820 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
35830 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
35840 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
35850 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
35860 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
35870 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
35880 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
35890 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
358a0 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
358b0 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
358c0 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
358d0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
358e0 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
358f0 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
35900 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
35910 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
35920 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
35930 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
35940 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
35950 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
35960 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
35970 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
35980 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
35990 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
359a0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
359b0 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
359c0 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
359d0 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
359e0 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
359f0 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
35a00 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
35a10 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
35a20 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
35a30 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
35a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35a50 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
35a60 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a80 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
35a90 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ab0 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
35ac0 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
35ad0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
35ae0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
35af0 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
35b00 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
35b10 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
35b20 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
35b30 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
35b40 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
35b50 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
35b60 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
35b70 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
35b80 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
35b90 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
35ba0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
35bb0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
35bc0 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
35bd0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
35be0 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
35bf0 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
35c00 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
35c10 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
35c20 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc!=SQLITE_BUS
35c30 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  Y ) goto abort_d
35c40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
35c50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
35c60 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
35c70 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
35c80 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
35c90 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
35ca0 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
35cb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
35cc0 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
35cd0 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
35ce0 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
35cf0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
35d00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
35d10 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
35d20 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
35d30 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
35d40 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
35d50 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
35d60 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
35d70 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
35d80 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
35d90 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
35da0 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
35db0 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
35dc0 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
35dd0 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
35de0 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
35df0 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
35e00 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
35e10 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
35e20 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
35e30 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
35e40 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
35e50 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
35e60 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
35e70 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
35e80 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
35e90 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
35ea0 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
35eb0 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
35ec0 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
35ed0 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
35ee0 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
35ef0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f10 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
35f20 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
35f30 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
35f40 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
35f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
35f60 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
35f70 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
35f80 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
35f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
35fa0 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
35fb0 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
35fe0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
35ff0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36000 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
36010 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
36020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
36030 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
36040 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
36050 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
36060 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
36070 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
36080 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
36090 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
360a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
360b0 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
360c0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
360d0 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
360e0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
360f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
36100 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
36110 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
36120 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
36130 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
36140 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
36150 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
36160 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
36170 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
36180 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
36190 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
361a0 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
361b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
361c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
361d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
361e0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
361f0 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
36200 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
36210 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
36220 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
36230 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
36240 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
36250 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
36260 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
36270 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
36280 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
36290 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
362a0 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
362b0 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
362c0 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
362d0 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
362e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
362f0 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
36300 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
36310 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
36320 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
36330 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
36340 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
36350 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
36360 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
36370 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
36380 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
36390 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
363a0 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
363b0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
363c0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
363d0 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
363e0 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
363f0 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
36400 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
36410 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
36420 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
36430 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
36440 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
36450 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
36460 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
36470 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
36480 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
36490 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
364a0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
364b0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
364c0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
364d0 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
364e0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
364f0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
36500 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
36510 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
36520 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
36530 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20  or(p,.          
36540 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
36550 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
36560 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
36570 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
36580 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
36590 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
365a0 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
365b0 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
365c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
365d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
365e0 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
365f0 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
36600 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
36610 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
36620 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
36630 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
36640 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
36650 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
36660 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
36670 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
36680 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
36690 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
366a0 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
366b0 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
366c0 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
366d0 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
366e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
366f0 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
36700 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
36710 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
36720 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
36730 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
36740 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64  oseWal(pPager, d
36750 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  b);.        if( 
36760 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
36770 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
36780 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
36790 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
367a0 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
367b0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
367c0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
367d0 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
367e0 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
367f0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
36800 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
36810 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
36820 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
36830 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
36840 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
36850 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
36860 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
36870 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
36880 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
36890 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
368a0 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
368b0 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
368c0 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
368d0 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
368e0 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
368f0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
36900 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
36910 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
36920 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
36930 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
36940 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
36950 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
36960 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
36970 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
36980 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
36990 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
369a0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
369b0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
369c0 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
369d0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
369e0 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
369f0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
36a00 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d   if( rc ) eNew =
36a10 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20   eOld;.  eNew = 
36a20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
36a30 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
36a40 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
36a50 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
36a60 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
36a70 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
36a80 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  z = (char *)sqli
36a90 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
36aa0 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74  me(eNew);.  pOut
36ab0 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ->n = sqlite3Str
36ac0 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a  len30(pOut->z);.
36ad0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
36ae0 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c  LITE_UTF8;.  sql
36af0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
36b00 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
36b10 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63  oding);.  if( rc
36b20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36b30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
36b40 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
36b50 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
36b60 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
36b70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
36b80 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
36b90 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
36ba0 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
36bb0 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a  ode: Vacuum P1 *
36bc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
36bd0 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
36be0 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20  atabase P1.  P1 
36bf0 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c  is 0 for "main",
36c00 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a   and 2 or more.*
36c10 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65  * for an attache
36c20 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  d database.  The
36c30 20 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65   "temp" database
36c40 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75   may not be vacu
36c50 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  umed..*/.case OP
36c60 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73  _Vacuum: {.  ass
36c70 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
36c80 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
36c90 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
36ca0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
36cb0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
36cc0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36cd0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36ce0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
36cf0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
36d00 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
36d10 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
36d20 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
36d30 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
36d40 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
36d50 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
36d60 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
36d70 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
36d80 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
36d90 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
36da0 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
36db0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
36dc0 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
36dd0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
36de0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
36df0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
36e00 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
36e10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
36e20 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
36e30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36e40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
36e50 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
36e60 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
36e70 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
36e80 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
36e90 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
36ea0 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
36eb0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
36ec0 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
36ed0 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
36ee0 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
36ef0 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
36f00 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
36f10 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
36f20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
36f30 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
36f40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36f50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
36f60 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
36f70 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
36f80 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
36f90 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
36fa0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
36fb0 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
36fc0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
36fd0 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
36fe0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
36ff0 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
37000 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
37010 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
37020 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
37030 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
37040 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
37050 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
37060 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
37070 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
37080 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
37090 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
370a0 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
370b0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
370c0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
370d0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
370e0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
370f0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
37100 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
37110 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
37120 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
37130 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
37140 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
37150 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
37160 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
37170 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
37180 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
37190 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
371a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
371b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
371c0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
371d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
371e0 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
371f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
37200 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
37210 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
37220 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
37230 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
37240 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
37250 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
37260 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
37270 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
37280 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
37290 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
372a0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
372b0 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
372c0 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
372d0 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
372e0 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
372f0 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
37300 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
37310 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
37320 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
37330 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
37340 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
37350 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
37360 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
37370 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
37380 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
37390 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
373a0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
373b0 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
373c0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
373d0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
373e0 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
373f0 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
37400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
37410 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
37420 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
37430 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
37440 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
37450 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
37460 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
37470 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
37480 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
37490 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
374a0 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
374b0 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
374c0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
374d0 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
374e0 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
374f0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
37500 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
37510 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
37520 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
37530 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
37540 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
37550 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
37560 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78        if( (rc&0x
37570 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
37580 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  ED ){.        co
37590 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
375a0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20  p->p4.z;.       
375b0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
375c0 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74  r(p, "database t
375d0 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
375e0 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d  %s", z);.      }
375f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
37600 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37610 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
37620 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
37630 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
37640 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
37650 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37660 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
37670 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
37680 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
37690 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
376a0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
376b0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
376c0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
376d0 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
376e0 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
376f0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
37700 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
37710 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
37720 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
37730 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
37740 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
37750 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
37760 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
37770 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
37780 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
37790 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
377a0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
377b0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
377c0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
377d0 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
377e0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
377f0 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
37800 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
37810 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
37820 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
37830 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
37840 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
37850 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37860 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37870 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
37880 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37890 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
378a0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
378b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
378c0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
378d0 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20  : VCreate P1 P2 
378e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69  * * *.**.** P2 i
378f0 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
37900 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
37910 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
37920 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
37930 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  .** P1. Call the
37940 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
37950 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
37960 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
37970 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d  te: {.  Mem sMem
37980 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
37990 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
379a0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
379b0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
379c0 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61  ar *zTab;  /* Na
379d0 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
379e0 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65  l table */..  me
379f0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
37a00 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
37a10 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20  sMem.db = db;.  
37a20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73  /* Because P2 is
37a30 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63   always a static
37a40 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69   string, it is i
37a50 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68  mpossible for th
37a60 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
37a70 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66  beMemCopy() to f
37a80 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
37a90 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
37aa0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
37ab0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
37ac0 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
37ad0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74  flags & MEM_Stat
37ae0 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ic)!=0 );.  rc =
37af0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
37b00 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d  opy(&sMem, &aMem
37b10 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73  [pOp->p2]);.  as
37b20 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
37b30 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20  _OK );.  zTab = 
37b40 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
37b50 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
37b60 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74  &sMem);.  assert
37b70 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61  ( zTab || db->ma
37b80 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
37b90 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20  if( zTab ){.    
37ba0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
37bb0 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
37bc0 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70  Op->p1, zTab, &p
37bd0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
37be0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
37bf0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
37c00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37c10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37c20 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
37c30 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37c40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37c50 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37c60 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37c70 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37c80 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
37c90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
37ca0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
37cb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
37cc0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
37cd0 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
37ce0 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
37cf0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
37d00 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
37d10 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
37d20 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
37d30 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
37d40 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
37d50 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
37d60 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
37d70 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
37d80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
37d90 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
37da0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
37db0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37dc0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
37dd0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37de0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37df0 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
37e00 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
37e10 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
37e20 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
37e30 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
37e40 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
37e50 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
37e60 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
37e70 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
37e80 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
37e90 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
37ea0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
37eb0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
37ec0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
37ed0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
37ee0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
37ef0 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
37f00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37f10 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
37f20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
37f30 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
37f40 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
37f50 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
37f60 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
37f70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
37f80 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
37f90 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
37fa0 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
37fb0 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
37fc0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
37fd0 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  D;.    goto abor
37fe0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37ff0 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
38000 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
38010 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
38020 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
38030 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
38040 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
38050 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
38060 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
38070 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
38080 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
38090 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
380a0 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
380b0 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62  /.  pVCur->pVtab
380c0 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20   = pVtab;..  /* 
380d0 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
380e0 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
380f0 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
38100 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
38110 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54  >p1, 0, -1, CURT
38120 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28  YPE_VTAB);.  if(
38130 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75   pCur ){.    pCu
38140 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56  r->uc.pVCur = pV
38150 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Cur;.    pVtab->
38160 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  nRef++;.  }else{
38170 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
38180 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
38190 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  .    pModule->xC
381a0 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20  lose(pVCur);.   
381b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
381c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
381d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
381e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
381f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
38200 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
38210 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
38220 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
38230 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
38240 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
38250 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
38260 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
38270 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
38280 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
38290 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
382a0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
382b0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
382c0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
382d0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 2