/ Hex Artifact Content
Login

Artifact 7509cbdad75624ed397e581210db27cb2c99882a40cd1c3c2948641220a14a48:


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 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2a680 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
2a690 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
2a6a0 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
2a6b0 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
2a6c0 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
2a6d0 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69  he first entry i
2a6e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
2a6f0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
2a700 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
2a710 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
2a720 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
2a730 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
2a740 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2a750 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
2a760 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2a770 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   the following .
2a780 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2a790 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a7a0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
2a7b0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
2a7c0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
2a7d0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
2a7e0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
2a7f0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
2a800 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2a810 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
2a820 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
2a830 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
2a840 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  v..*/.case OP_Re
2a850 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
2a860 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2a870 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2a880 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2a890 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
2a8a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a8b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2a8c0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2a8d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a8e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2a8f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2a900 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2a910 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2a920 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20  orterSort) );.  
2a930 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20  res = 1;.#ifdef 
2a940 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2a950 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52  C->seekOp = OP_R
2a960 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20  ewind;.#endif.  
2a970 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
2a980 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2a990 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2a9a0 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a  wind(pC, &res);.
2a9b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2a9c0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2a9d0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2a9e0 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   );.    pCrsr = 
2a9f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2aa00 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
2aa10 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
2aa20 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
2aa30 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
2aa40 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2aa50 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
2aa60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2aa70 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2aa80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2aa90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2aaa0 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ror;.  pC->nullR
2aab0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
2aac0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2aad0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
2aae0 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
2aaf0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2ab00 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
2ab10 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2ab20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ab30 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
2ab40 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2ab50 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
2ab60 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2ab70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
2ab80 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
2ab90 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2aba0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2abb0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2abc0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
2abd0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2abe0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2abf0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2ac00 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
2ac10 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
2ac20 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2ac30 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2ac40 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
2ac50 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2ac60 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2ac70 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
2ac80 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
2ac90 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
2aca0 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
2acb0 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
2acc0 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
2acd0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
2ace0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2acf0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
2ad00 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2ad10 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2ad20 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2ad30 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
2ad40 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
2ad50 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
2ad60 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
2ad70 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
2ad80 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
2ad90 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2ada0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2adb0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2adc0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2add0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2ade0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2adf0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2ae00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2ae10 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2ae20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2ae30 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2ae40 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2ae50 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2ae60 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2ae70 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2ae80 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2ae90 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2aea0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2aeb0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2aec0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
2aed0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
2aee0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2aef0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2af00 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2af10 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2af20 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2af30 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2af40 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2af50 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2af60 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
2af70 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
2af80 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
2af90 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
2afa0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
2afb0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
2afc0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
2afd0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2afe0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2aff0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
2b000 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
2b010 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2b020 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2b030 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2b040 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2b050 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
2b060 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2b070 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2b080 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2b090 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
2b0a0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2b0b0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2b0c0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2b0d0 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
2b0e0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2b0f0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2b100 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2b110 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2b120 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2b130 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2b140 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2b150 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2b160 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2b170 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2b180 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2b190 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2b1a0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2b1b0 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2b1c0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2b1d0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2b1e0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2b1f0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2b200 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2b210 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2b220 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2b230 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2b240 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2b250 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2b260 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2b270 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2b280 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2b290 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2b2a0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2b2b0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2b2c0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2b2d0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2b2e0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2b2f0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2b300 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2b310 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2b320 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2b330 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2b340 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2b350 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2b360 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2b370 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2b380 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2b390 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a  rterNext P1 P2 *
2b3a0 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73   * P5.**.** This
2b3b0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
2b3c0 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
2b3d0 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d  except that P1 m
2b3e0 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74  ust be a.** sort
2b3f0 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68  er object for wh
2b400 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65  ich the OP_Sorte
2b410 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73  rSort opcode has
2b420 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64   been.** invoked
2b430 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61  .  This opcode a
2b440 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73  dvances the curs
2b450 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  or to the next s
2b460 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c  orted.** record,
2b470 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20   or jumps to P2 
2b480 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
2b490 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f  more sorted reco
2b4a0 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rds..*/.case OP_
2b4b0 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
2b4c0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2b4d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
2b4e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2b4f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b500 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2b510 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2b520 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
2b530 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  , pC);.  goto ne
2b540 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
2b550 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2b560 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2b570 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2b580 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2b590 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b5a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b5b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2b5c0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2b5d0 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2b5e0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2b5f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b600 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b610 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b620 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2b630 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2b640 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b650 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b660 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2b670 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
2b680 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2b690 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2b6a0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
2b6b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2b6c0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
2b6d0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2b6e0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2b6f0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65   );..  /* The Ne
2b700 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2b710 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2b720 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77  kGT, SeekGE, Rew
2b730 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a  ind, and Found..
2b740 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
2b750 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2b760 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
2b770 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
2b780 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
2b790 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2b7a0 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  ext.       || pC
2b7b0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2b7c0 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2b7d0 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2b7e0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2b7f0 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2b800 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2b810 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20  ound .       || 
2b820 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e  pC->seekOp==OP_N
2b830 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73 65 72  ullRow);.  asser
2b840 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2b850 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20 7c  OP_Prev.       |
2b860 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2b870 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
2b880 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
2b890 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2b8a0 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 0a  eekOp==OP_Last .
2b8b0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2b8c0 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77  ekOp==OP_NullRow
2b8d0 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
2b8e0 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
2b8f0 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d  uc.pCursor, pOp-
2b900 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a  >p3);.next_tail:
2b910 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
2b920 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2b930 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2b940 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  ken(rc==SQLITE_O
2b950 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  K,2);.  if( rc==
2b960 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2b970 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
2b980 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
2b990 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
2b9a0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2b9b0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
2b9c0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
2b9d0 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
2b9e0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2b9f0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2ba00 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
2ba10 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74  QLITE_DONE ) got
2ba20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ba30 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c  rror;.  rc = SQL
2ba40 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75  ITE_OK;.  pC->nu
2ba50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74  llRow = 1;.  got
2ba60 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2ba70 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2ba80 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
2ba90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2baa0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2bab0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
2bac0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
2bad0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
2bae0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
2baf0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
2bb00 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
2bb10 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
2bb20 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
2bb30 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
2bb40 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
2bb50 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66  is nil..**.** If
2bb60 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P4 is not zero,
2bb70 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
2bb80 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
2bb90 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65 64   in the unpacked
2bba0 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28 50  .** key of reg(P
2bbb0 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  2).  In that cas
2bbc0 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e 64  e, P3 is the ind
2bbd0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
2bbe0 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20  register.** for 
2bbf0 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79  the unpacked key
2bc00 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69 6c  .  The availabil
2bc10 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61 63  ity of the unpac
2bc20 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65  ked key can some
2bc30 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f  times.** be an o
2bc40 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a  ptimization..**.
2bc50 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
2bc60 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 62   OPFLAG_APPEND b
2bc70 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73 20  it set, that is 
2bc80 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
2bc90 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68  tree layer.** th
2bca0 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20 69  at this insert i
2bcb0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
2bcc0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
2bcd0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2bce0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2bcf0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
2bd00 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2bd10 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
2bd20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
2bd30 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
2bd40 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
2bd50 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
2bd60 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
2bd70 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
2bd80 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2bd90 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2bda0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
2bdb0 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
2bdc0 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
2bdd0 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
2bde0 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
2bdf0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
2be00 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
2be10 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
2be20 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2be30 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
2be40 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
2be50 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
2be60 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
2be70 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
2be80 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
2be90 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
2bea0 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20  y equivalent.** 
2beb0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  to P2. .**.** Th
2bec0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2bed0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
2bee0 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
2bef0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
2bf00 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
2bf10 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
2bf20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2bf30 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32 20  terInsert P1 P2 
2bf40 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2bf50 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
2bf60 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
2bf70 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
2bf80 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
2bf90 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
2bfa0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
2bfb0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
2bfc0 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
2bfd0 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65 72   into the sorter
2bfe0 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
2bff0 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
2c000 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
2c010 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
2c020 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f  /* in2 */.case O
2c030 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
2c040 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2c050 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c060 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64  ;.  BtreePayload
2c070 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   x;..  assert( p
2c080 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c090 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c0a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c0b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73  sr[pOp->p1];.  s
2c0c0 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
2c0d0 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
2c0e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
2c0f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c100 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2c110 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2c120 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
2c130 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2c140 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2c150 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
2c160 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
2c170 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
2c180 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
2c190 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
2c1a0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2c1b0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2c1c0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2c1d0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2c1e0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2c1f0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2c200 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
2c210 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
2c220 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2c230 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c240 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2c250 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2c260 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2c270 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
2c280 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
2c290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b   }else{.    x.nK
2c2a0 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
2c2b0 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d    x.pKey = pIn2-
2c2c0 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d  >z;.    x.aMem =
2c2d0 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b   aMem + pOp->p3;
2c2e0 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75  .    x.nMem = (u
2c2f0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2c300 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c310 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63  reeInsert(pC->uc
2c320 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20  .pCursor, &x,.  
2c330 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
2c340 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
2c350 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
2c360 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20  TION)), .       
2c370 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
2c380 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2c390 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
2c3a0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
2c3b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2c3c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2c3d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
2c3e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2c3f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
2c400 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61    if( rc) goto a
2c410 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2c420 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
2c430 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
2c440 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
2c450 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c460 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
2c470 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
2c480 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
2c490 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
2c4a0 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
2c4b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
2c4c0 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
2c4d0 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
2c4e0 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
2c4f0 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
2c500 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
2c510 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
2c520 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2c530 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
2c540 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
2c550 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2c560 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2c570 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
2c580 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2c590 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
2c5a0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2c5b0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
2c5c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2c5d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c5e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c5f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c600 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c610 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2c620 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2c630 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2c640 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69 74  BTREE );.  sqlit
2c650 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
2c660 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20  ounter(p, pC);. 
2c670 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
2c680 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
2c690 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
2c6a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2c6b0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
2c6c0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2c6d0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2c6e0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
2c6f0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2c700 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
2c710 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2c720 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c730 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
2c740 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
2c750 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
2c760 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2c770 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2c780 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
2c790 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c7a0 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42  eDelete(pCrsr, B
2c7b0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b  TREE_AUXDELETE);
2c7c0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2c7d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c7e0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
2c7f0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2c800 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2c810 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2c820 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2c830 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2c840 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2c850 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65  ./* Opcode: Defe
2c860 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33  rredSeek P1 * P3
2c870 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2c880 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31  s: Move P3 to P1
2c890 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64  .rowid if needed
2c8a0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
2c8b0 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  open index curso
2c8c0 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75  r and P3 is a cu
2c8d0 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72  rsor on the corr
2c8e0 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62  esponding.** tab
2c8f0 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  le.  This opcode
2c900 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64   does a deferred
2c910 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20   seek of the P3 
2c920 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20  table cursor.** 
2c930 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
2c940 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2c950 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  he current row o
2c960 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  f P1..**.** This
2c970 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73   is a deferred s
2c980 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
2c990 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
2c9a0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
2c9b0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
2c9c0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
2c9d0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
2c9e0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
2c9f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
2ca00 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20   happens..**.** 
2ca10 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72  P4 may be an arr
2ca20 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28  ay of integers (
2ca30 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59  type P4_INTARRAY
2ca40 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20  ) containing.** 
2ca50 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  one entry for ea
2ca60 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
2ca70 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61   P3 table.  If a
2ca80 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a  rray entry a(i).
2ca90 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ** is non-zero, 
2caa0 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2cab0 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20  umn a(i)-1 from 
2cac0 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a  cursor P3 is .**
2cad0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70   equivalent to p
2cae0 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65  erforming the de
2caf0 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20  ferred seek and 
2cb00 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2cb10 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50  umn i .** from P
2cb20 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  1.  This informa
2cb30 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
2cb40 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f  n P3 and used to
2cb50 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61   redirect.** rea
2cb60 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76  ds against P3 ov
2cb70 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70  er to P1, thus p
2cb80 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67  ossibly avoiding
2cb90 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20   the need to.** 
2cba0 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75  seek and read cu
2cbb0 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f  rsor P3..*/./* O
2cbc0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
2cbd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2cbe0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2cbf0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
2cc00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2cc10 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2cc20 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
2cc30 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
2cc40 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
2cc50 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
2cc60 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
2cc70 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
2cc80 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
2cc90 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
2cca0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
2ccb0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
2ccc0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
2ccd0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
2cce0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
2ccf0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
2cd00 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a  OP_DeferredSeek:
2cd10 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
2cd20 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
2cd30 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
2cd40 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
2cd50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2cd60 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  1 index cursor *
2cd70 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2cd80 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  pTabCur;        
2cd90 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20  /* The P2 table 
2cda0 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72  cursor (OP_Defer
2cdb0 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  redSeek only) */
2cdc0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cde0 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20  * Rowid that P1 
2cdf0 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74  current points t
2ce00 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
2ce10 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ce20 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2ce30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2ce40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ce50 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2ce60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2ce70 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2ce80 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2ce90 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2cea0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
2ceb0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2cec0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2ced0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2cee0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2cef0 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  ( !pC->nullRow |
2cf00 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2cf10 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20  P_IdxRowid );.. 
2cf20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64   /* The IdxRowid
2cf30 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65   and Seek opcode
2cf40 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62  s are combined b
2cf50 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f  ecause of the co
2cf60 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f  mmonality.  ** o
2cf70 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  f sqlite3VdbeCur
2cf80 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64  sorRestore() and
2cf90 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2cfa0 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20  owid(). */.  rc 
2cfb0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
2cfc0 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
2cfd0 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65  .  /* sqlite3Vbe
2cfe0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2cff0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66  can only fail if
2d000 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
2d010 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a  been deleted.  *
2d020 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72  * out from under
2d030 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
2d040 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61  at will never ha
2d050 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78  ppens for an Idx
2d060 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65  Rowid.  ** or Se
2d070 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  ek opcode */.  i
2d080 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
2d090 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
2d0a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2d0b0 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e  r;..  if( !pC->n
2d0c0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
2d0d0 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
2d0e0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2d0f0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2d100 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
2d110 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2d120 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
2d130 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
2d140 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
2d150 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
2d160 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
2d170 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2d180 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
2d190 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66  ->opcode==OP_Def
2d1a0 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20  erredSeek ){.   
2d1b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2d1c0 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
2d1d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2d1e0 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70       pTabCur = p
2d1f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d  ->apCsr[pOp->p3]
2d200 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2d210 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20  pTabCur!=0 );.  
2d220 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2d230 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
2d240 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2d250 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2d260 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  abCur->uc.pCurso
2d270 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2d280 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69  sert( pTabCur->i
2d290 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20  sTable );.      
2d2a0 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  pTabCur->nullRow
2d2b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62   = 0;.      pTab
2d2c0 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65  Cur->movetoTarge
2d2d0 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  t = rowid;.     
2d2e0 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72   pTabCur->deferr
2d2f0 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
2d300 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2d310 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
2d320 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  RRAY || pOp->p4.
2d330 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70  ai==0 );.      p
2d340 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20  TabCur->aAltMap 
2d350 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
2d360 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c      pTabCur->pAl
2d370 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20  tCursor = pC;.  
2d380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
2d390 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2d3a0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2d3b0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2d3c0 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  rowid;.    }.  }
2d3d0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2d3e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2d3f0 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20  P_IdxRowid );.  
2d400 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d410 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f  SetNull(&aMem[pO
2d420 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62  p->p2]);.  }.  b
2d430 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d440 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
2d450 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2d460 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2d470 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2d480 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2d490 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2d4a0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2d4b0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2d4c0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2d4d0 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
2d4e0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
2d4f0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
2d500 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
2d510 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2d520 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2d530 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2d540 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
2d550 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
2d560 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
2d570 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2d580 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
2d590 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
2d5a0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2d5b0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2d5c0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2d5d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d5e0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2d5f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2d600 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34  dxGT P1 P2 P3 P4
2d610 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2d620 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2d630 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2d640 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2d650 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2d660 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2d670 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2d680 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2d690 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2d6a0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2d6b0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2d6c0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2d6d0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2d6e0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2d6f0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2d700 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2d710 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2d720 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2d730 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2d740 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
2d750 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2d760 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2d770 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2d780 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d790 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2d7a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2d7b0 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
2d7c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2d7d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2d7e0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2d7f0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2d800 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2d810 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2d820 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2d830 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2d840 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2d850 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2d860 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2d870 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2d880 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2d890 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2d8a0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2d8b0 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2d8c0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2d8d0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2d8e0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2d8f0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
2d900 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
2d910 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
2d920 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2d930 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d940 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2d950 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2d960 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xLE P1 P2 P3 P4 
2d970 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2d980 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2d990 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2d9a0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2d9b0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2d9c0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2d9d0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2d9e0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2d9f0 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2da00 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2da10 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2da20 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2da30 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2da40 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2da50 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2da60 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2da70 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2da80 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2da90 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2daa0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
2dab0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
2dac0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
2dad0 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65  p.** to P2. Othe
2dae0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2daf0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2db00 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2db10 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20  ase OP_IdxLE:   
2db20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2db30 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a  /.case OP_IdxGT:
2db40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2db50 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2db60 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
2db70 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2db80 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20  IdxGE:  {       
2db90 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2dba0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
2dbb0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2dbc0 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2dbd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2dbe0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2dbf0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2dc00 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2dc10 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2dc20 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2dc30 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
2dc40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2dc50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2dc60 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2dc70 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2dc80 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65  rsor!=0);.  asse
2dc90 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2dca0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
2dcb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2dcc0 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
2dcd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2dce0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2dcf0 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  32 );.  r.pKeyIn
2dd00 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2dd10 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2dd20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2dd30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2dd40 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  e<OP_IdxLT ){.  
2dd50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2dd60 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2dd70 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2dd80 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
2dd90 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
2dda0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2ddb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2ddc0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
2ddd0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2dde0 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxLT );.    r.
2ddf0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
2de00 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26    }.  r.aMem = &
2de10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
2de20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2de30 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  UG.  { int i; fo
2de40 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
2de50 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
2de60 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2de70 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
2de80 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f  if.  res = 0;  /
2de90 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
2dea0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
2deb0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2dec0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2ded0 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
2dee0 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72  e(db, pC, &r, &r
2def0 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  es);.  assert( (
2df00 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50  OP_IdxLE&1)==(OP
2df10 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50  _IdxLT&1) && (OP
2df20 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxGE&1)==(OP_I
2df30 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28  dxGT&1) );.  if(
2df40 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29   (pOp->opcode&1)
2df50 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29  ==(OP_IdxLT&1) )
2df60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2df70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2df80 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2df90 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2dfa0 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
2dfb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2dfc0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2dfd0 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
2dfe0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2dff0 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b  xGT );.    res++
2e000 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2e010 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29  chTaken(res>0,2)
2e020 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2e030 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2e040 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e  rror;.  if( res>
2e050 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2e060 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2e070 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
2e080 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
2e090 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
2e0a0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2e0b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2e0c0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
2e0d0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
2e0e0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
2e0f0 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
2e100 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
2e110 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
2e120 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2e130 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
2e140 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
2e150 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2e160 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2e170 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2e180 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2e190 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2e1a0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2e1b0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2e1c0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2e1d0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2e1e0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
2e1f0 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
2e200 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
2e210 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
2e220 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
2e230 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
2e240 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
2e250 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
2e260 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
2e270 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
2e280 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
2e290 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
2e2a0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
2e2b0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
2e2c0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
2e2d0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
2e2e0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
2e2f0 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
2e300 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
2e310 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d  If no page movem
2e320 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
2e330 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a   (because the.**
2e340 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2e350 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2e360 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2e370 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2e380 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69  hen a .** zero i
2e390 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2e3a0 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54  ster P2.  If AUT
2e3b0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
2e3c0 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
2e3d0 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2e3e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2e3f0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2e400 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2e410 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
2e420 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56   active reader V
2e430 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73  Ms when.** it is
2e440 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69   invoked. This i
2e450 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  s done to avoid 
2e460 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61  the difficulty a
2e470 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a  ssociated with .
2e480 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73  ** updating exis
2e490 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65  ting cursors whe
2e4a0 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73  n a root page is
2e4b0 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54   moved in an AUT
2e4c0 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61  OVACUUM .** data
2e4d0 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72  base. This error
2e4e0 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20   is thrown even 
2e4f0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2e500 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41  is not an AUTOVA
2e510 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f  CUUM .** db in o
2e520 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e  rder to avoid in
2e530 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63  troducing an inc
2e540 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74  ompatibility bet
2e550 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20  ween autovacuum 
2e560 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f  .** and non-auto
2e570 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a  vacuum modes..**
2e580 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
2e590 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
2e5a0 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
2e5b0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
2e5c0 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
2e5d0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
2e5e0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2e5f0 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  (p, 0);.  assert
2e600 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2e610 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e620 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75  p->p1>1 );.  pOu
2e630 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2e640 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
2e650 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2e660 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e  Null;.  if( db->
2e670 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e  nVdbeRead > db->
2e680 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20  nVDestroy+1 ){. 
2e690 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
2e6a0 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
2e6b0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
2e6c0 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61  bort;.    goto a
2e6d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2e6e0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
2e6f0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
2e700 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
2e710 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2e720 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20  sk, iDb) );.    
2e730 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20  iMoved = 0;  /* 
2e740 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2e750 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  y to silence a w
2e760 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2e770 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2e780 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
2e790 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
2e7a0 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
2e7b0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
2e7c0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
2e7d0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
2e7e0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2e7f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e800 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20  _error;.#ifndef 
2e810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2e820 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69  VACUUM.    if( i
2e830 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
2e840 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
2e850 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
2e860 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
2e870 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
2e880 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
2e890 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
2e8a0 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
2e8b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
2e8c0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2e8d0 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
2e8e0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
2e8f0 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
2e900 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
2e910 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
2e920 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
2e930 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
2e940 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
2e950 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
2e960 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
2e970 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2e980 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2e990 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
2e9a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2e9b0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
2e9c0 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
2e9d0 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
2e9e0 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
2e9f0 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
2ea00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2ea10 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2ea20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
2ea30 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2ea40 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
2ea50 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
2ea60 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
2ea70 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
2ea80 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2ea90 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
2eaa0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2eab0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
2eac0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
2ead0 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
2eae0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2eaf0 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
2eb00 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
2eb10 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
2eb20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
2eb30 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
2eb40 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
2eb50 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
2eb60 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
2eb70 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
2eb80 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
2eb90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2eba0 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
2ebb0 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
2ebc0 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
2ebd0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
2ebe0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
2ebf0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2ec00 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
2ec10 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2ec20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2ec30 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2ec40 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
2ec50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
2ec60 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
2ec70 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
2ec80 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c  nChange;. .  sql
2ec90 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2eca0 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
2ecb0 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2ecc0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2ecd0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2ece0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2ecf0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2ed00 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2ed10 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2ed20 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2ed30 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2ed40 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2ed50 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2ed60 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2ed70 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2ed80 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2ed90 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2eda0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2edb0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2edc0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2edd0 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2ede0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2edf0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2ee00 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2ee10 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2ee20 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2ee30 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2ee40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ee50 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2ee60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2ee70 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2ee80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2ee90 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2eea0 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2eeb0 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2eec0 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2eed0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2eee0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2eef0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2ef00 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2ef10 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2ef20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2ef30 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2ef40 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2ef50 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2ef60 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2ef70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2ef80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2ef90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2efa0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2efb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2efc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2efd0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2efe0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2eff0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2f000 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2f010 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2f020 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2f030 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2f040 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2f050 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2f060 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2f070 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2f080 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2f090 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2f0a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2f0b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2f0c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2f0d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2f0e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2f0f0 65 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20  eBtree P1 P2 P3 
2f100 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f110 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2f120 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a  P1 flags=P3.**.*
2f130 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2f140 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d   b-tree in the m
2f150 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2f160 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2f170 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74   the.** TEMP dat
2f180 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2f190 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
2f1a0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
2f1b0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20  f.** P1>1.  The 
2f1c0 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  P3 argument must
2f1d0 20 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54   be 1 (BTREE_INT
2f1e0 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64  KEY) for a rowid
2f1f0 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73   table.** it mus
2f200 74 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c  t be 2 (BTREE_BL
2f210 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e  OBKEY) for an in
2f220 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52  dex or WITHOUT R
2f230 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  OWID table..** T
2f240 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2f250 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62  ber of the new b
2f260 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20  -tree is stored 
2f270 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2f280 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2f290 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20  eBtree: {       
2f2a0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2f2b0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a  int pgno;.  Db *
2f2c0 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
2f2d0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2f2e0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75  ter(p, 0);.  pOu
2f2f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2f300 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2f310 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2f320 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45  ( pOp->p3==BTREE
2f330 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e  _INTKEY || pOp->
2f340 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45  p3==BTREE_BLOBKE
2f350 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
2f360 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2f370 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2f380 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2f390 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2f3a0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
2f3b0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2f3c0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
2f3d0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
2f3e0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f3f0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
2f400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f410 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
2f420 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70  b->pBt, &pgno, p
2f430 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72  Op->p3);.  if( r
2f440 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2f450 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2f460 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
2f470 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f480 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20  Opcode: SqlExec 
2f490 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2f4a0 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
2f4b0 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d  tement or statem
2f4c0 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
2f4d0 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  n the P4 string.
2f4e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45  .*/.case OP_SqlE
2f4f0 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  xec: {.  sqlite3
2f500 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2f510 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62  nter(p, 0);.  db
2f520 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20  ->nSqlExec++;.  
2f530 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2f540 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  c(db, pOp->p4.z,
2f550 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d   0, 0, 0);.  db-
2f560 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69  >nSqlExec--;.  i
2f570 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2f580 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2f590 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f5a0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
2f5b0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
2f5c0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
2f5d0 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
2f5e0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
2f5f0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
2f600 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
2f610 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
2f620 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
2f630 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2f640 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
2f650 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
2f660 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
2f670 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
2f680 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
2f690 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
2f6a0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
2f6b0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
2f6c0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
2f6d0 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
2f6e0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
2f6f0 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
2f700 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
2f710 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
2f720 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
2f730 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
2f740 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
2f750 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
2f760 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
2f770 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
2f780 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
2f790 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
2f7a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
2f7b0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
2f7c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2f7d0 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
2f7e0 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
2f7f0 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
2f800 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
2f810 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
2f820 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
2f830 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
2f840 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
2f850 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
2f860 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
2f870 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f880 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
2f890 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
2f8a0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
2f8b0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
2f8c0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
2f8d0 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d  .    zMaster = M
2f8e0 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20  ASTER_NAME;.    
2f8f0 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
2f900 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
2f910 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
2f920 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
2f930 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
2f940 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
2f950 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2f960 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
2f970 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
2f980 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
2f990 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
2f9a0 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
2f9b0 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
2f9c0 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  DbSName, zMaster
2f9d0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2f9e0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
2f9f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2fa00 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
2fa10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2fa20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2fa30 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
2fa40 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2fa50 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
2fa60 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
2fa70 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
2fa80 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
2fa90 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
2faa0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2fab0 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
2fac0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
2fad0 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2fae0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2faf0 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
2fb00 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
2fb10 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64  qlite3DbFreeNN(d
2fb20 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
2fb30 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2fb40 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
2fb50 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2fb60 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2fb70 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2fb80 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  db);.    if( rc=
2fb90 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
2fba0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2fbb0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  em;.    }.    go
2fbc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2fbd0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2fbe0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
2fbf0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2fc00 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
2fc10 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
2fc20 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
2fc30 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
2fc40 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
2fc50 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
2fc60 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
2fc70 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
2fc80 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
2fc90 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
2fca0 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
2fcb0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
2fcc0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
2fcd0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
2fce0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
2fcf0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
2fd00 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
2fd10 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
2fd20 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2fd30 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2fd40 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fd50 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
2fd60 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
2fd70 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2fd80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2fd90 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
2fda0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
2fdb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2fdc0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
2fdd0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
2fde0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2fdf0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2fe00 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2fe10 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2fe20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2fe30 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
2fe40 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2fe50 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2fe60 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
2fe70 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
2fe80 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2fe90 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2fea0 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2feb0 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2fec0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2fed0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2fee0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2fef0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2ff00 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2ff10 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
2ff20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
2ff30 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
2ff40 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e   0);.  sqlite3Un
2ff50 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2ff60 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2ff70 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2ff80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ff90 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2ffa0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2ffb0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2ffc0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2ffd0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2ffe0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2fff0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
30000 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
30010 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
30020 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
30030 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
30040 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
30050 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
30060 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
30070 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
30080 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
30090 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
300a0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
300b0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
300c0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
300d0 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
300e0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
300f0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
30100 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
30110 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
30120 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
30130 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
30140 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30150 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
30160 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30170 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
30180 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
30190 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
301a0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
301b0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
301c0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
301d0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
301e0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
301f0 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
30200 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
30210 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
30220 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
30230 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
30240 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
30250 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
30260 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
30270 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
30280 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
30290 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
302a0 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  er: {.  sqlite3V
302b0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
302c0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
302d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
302e0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
302f0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
30300 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
30310 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30320 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
30330 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
30340 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
30350 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
30360 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
30370 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
30380 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
30390 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
303a0 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
303b0 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
303c0 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
303d0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
303e0 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
303f0 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
30400 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
30410 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
30420 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
30430 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73  ontains one less
30440 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75   than the maximu
30450 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
30460 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
30470 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
30480 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
30490 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
304a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
304b0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
304c0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
304d0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
304e0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
304f0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
30500 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
30510 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
30520 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
30530 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
30540 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
30550 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
30560 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20  egers.** stored 
30570 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61  in P4_INTARRAY a
30580 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  rgument..**.** I
30590 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
305a0 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
305b0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
305c0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
305d0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
305e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
305f0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
30600 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
30610 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
30620 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
30630 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
30640 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
30650 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
30660 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
30670 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
30680 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
30690 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
306a0 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
306b0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
306c0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
306d0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
306e0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ked */.  int nEr
306f0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
30700 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
30710 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
30720 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
30730 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
30740 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
30750 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
30760 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
30770 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
30780 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
30790 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
307a0 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
307b0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f  = pOp->p2;.  aRo
307c0 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ot = pOp->p4.ai;
307d0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
307e0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
307f0 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20  aRoot[0]==nRoot 
30800 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
30810 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
30820 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
30830 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
30840 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
30850 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
30860 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
30870 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
30880 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
30890 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
308a0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
308b0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
308c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
308d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
308e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
308f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
30900 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
30910 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
30920 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
30930 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
30940 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
30950 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f  , &aRoot[1], nRo
30960 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30980 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
30990 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a  >u.i+1, &nErr);.
309a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
309b0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
309c0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
309d0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
309e0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
309f0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
30a00 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
30a10 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69  {.    pnErr->u.i
30a20 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20   -= nErr-1;.    
30a30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
30a40 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
30a50 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
30a60 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
30a70 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
30a80 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
30a90 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
30aa0 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
30ab0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
30ac0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30ad0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
30ae0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
30af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
30b00 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
30b10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
30b20 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
30b30 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
30b40 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
30b50 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
30b60 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74  P2 into a RowSet
30b70 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20   object.** held 
30b80 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
30b90 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
30ba0 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
30bb0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
30bc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
30bd0 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
30be0 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
30bf0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
30c00 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
30c10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
30c20 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
30c30 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30c40 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
30c50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
30c60 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
30c70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30c80 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
30c90 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
30ca0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
30cb0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
30cc0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
30cd0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
30ce0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
30cf0 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
30d00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
30d10 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
30d20 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30d30 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
30d40 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
30d50 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
30d60 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
30d70 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  m the RowSet obj
30d80 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  ect in P1.** and
30d90 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
30da0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
30db0 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53  ..** Or, if RowS
30dc0 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20  et object P1 is 
30dd0 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
30de0 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
30df0 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
30e00 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
30e10 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
30e20 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
30e30 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
30e40 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
30e50 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
30e60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
30e70 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
30e80 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
30e90 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
30ea0 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
30eb0 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
30ec0 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
30ed0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
30ee0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
30ef0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
30f00 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
30f10 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
30f20 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74  en(1,2);.    got
30f30 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
30f40 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
30f50 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
30f60 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
30f70 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
30f80 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56  e index */.    V
30f90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
30fa0 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ,2);.    sqlite3
30fb0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
30fc0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
30fd0 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  val);.  }.  goto
30fe0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
30ff0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
31000 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
31010 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
31020 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
31030 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
31040 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
31050 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
31060 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
31070 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
31080 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
31090 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
310a0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
310b0 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
310c0 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
310d0 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
310e0 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
310f0 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
31100 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
31110 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
31120 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
31130 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
31140 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
31150 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
31160 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
31170 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
31180 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
31190 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67  re sets of integ
311a0 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72  ers.** are inser
311b0 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20  ted in distinct 
311c0 70 68 61 73 65 73 2c 20 77 68 69 63 68 20 65 61  phases, which ea
311d0 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
311e0 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a  no duplicates..*
311f0 2a 20 45 61 63 68 20 73 65 74 20 69 73 20 69 64  * Each set is id
31200 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
31210 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
31220 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
31230 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
31240 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d   the final set m
31250 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c  ust have P4==-1,
31260 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68   and for all oth
31270 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20  er sets.** must 
31280 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a  have P4>0..**.**
31290 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
312a0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
312b0 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
312c0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
312d0 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65  est.** the RowSe
312e0 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
312f0 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
31300 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
31310 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
31320 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
31330 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
31340 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
31350 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
31360 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
31370 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
31380 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
31390 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
313a0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
313b0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
313c0 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
313d0 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
313e0 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
313f0 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
31400 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
31410 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
31420 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
31430 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
31440 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
31450 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
31460 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31480 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
31490 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
314a0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
314b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
314c0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
314d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
314e0 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
314f0 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
31500 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
31510 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
31520 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
31530 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
31540 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
31550 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
31560 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
31570 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
31580 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
31590 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
315a0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
315b0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
315c0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
315d0 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
315e0 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
315f0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
31600 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
31610 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
31620 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
31630 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
31640 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
31650 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
31660 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
31670 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
31680 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
31690 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
316a0 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e  et, iSet, pIn3->
316b0 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72  u.i);.    VdbeBr
316c0 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73  anchTaken(exists
316d0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
316e0 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  exists ) goto ju
316f0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
31700 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
31710 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
31720 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
31730 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
31740 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
31750 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
31760 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
31770 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
31780 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
31790 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
317a0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
317b0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
317c0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
317d0 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
317e0 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
317f0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
31800 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
31810 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
31820 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
31830 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
31840 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
31850 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
31860 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
31870 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
31880 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
31890 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
318a0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
318b0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
318c0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
318d0 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
318e0 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
318f0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
31900 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
31910 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
31920 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
31930 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
31940 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
31950 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
31960 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
31970 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
31980 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
31990 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
319a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
319b0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
319c0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
319d0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
319e0 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
319f0 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
31a00 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
31a10 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
31a20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
31a30 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
31a40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
31a50 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
31a60 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
31a70 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
31a80 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
31a90 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
31aa0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
31ab0 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
31ac0 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
31ad0 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
31ae0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
31af0 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
31b00 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
31b10 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
31b20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
31b30 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
31b40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
31b50 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
31b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
31b70 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
31b80 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
31b90 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
31ba0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
31bb0 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
31bc0 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
31bd0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
31be0 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
31bf0 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
31c00 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31c20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
31c30 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
31c40 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
31c50 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
31c60 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
31c70 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
31c80 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
31c90 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
31ca0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
31cb0 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
31cc0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
31cd0 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
31ce0 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
31cf0 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
31d00 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
31d10 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
31d20 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
31d30 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
31d40 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
31d50 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
31d60 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
31d70 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
31d80 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
31d90 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
31da0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
31db0 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
31dc0 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
31dd0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
31de0 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
31df0 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
31e00 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
31e10 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
31e20 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
31e30 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
31e40 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
31e50 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
31e60 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
31e70 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
31e80 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
31e90 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
31ea0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
31eb0 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
31ec0 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
31ed0 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
31ee0 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
31ef0 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
31f00 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
31f10 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
31f20 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
31f30 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
31f40 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
31f50 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
31f60 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
31f70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
31f80 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
31f90 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
31fa0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
31fb0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
31fc0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
31fd0 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
31fe0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
31ff0 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
32000 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
32010 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
32020 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
32030 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  or(p, "too many 
32040 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
32050 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
32060 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
32070 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
32080 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
32090 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
320a0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
320b0 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
320c0 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
320d0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
320e0 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
320f0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
32100 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
32110 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
32120 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
32130 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
32140 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
32150 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
32160 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
32170 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
32180 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
32190 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
321a0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
321b0 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
321c0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
321d0 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
321e0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
321f0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
32200 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
32210 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
32220 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
32230 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
32240 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
32250 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
32260 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
32270 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
32280 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
32290 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
322a0 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
322b0 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
322c0 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
322d0 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
322e0 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
322f0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
32300 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
32310 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  r;.    assert( n
32320 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  Mem>0 );.    if(
32330 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
32340 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20  =0 ) nMem++;.   
32350 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
32360 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
32370 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
32380 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
32390 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
323a0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
323b0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
323c0 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20  beCursor*).     
323d0 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f           + (pPro
323e0 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38  gram->nOp + 7)/8
323f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
32400 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
32410 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
32420 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
32430 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
32440 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
32450 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
32460 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
32470 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
32480 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
32490 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
324a0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
324b0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
324c0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
324d0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
324e0 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
324f0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
32500 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
32510 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
32520 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
32530 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
32540 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
32550 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
32560 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
32570 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
32580 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
32590 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
325a0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
325b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
325c0 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
325d0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
325e0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
325f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
32600 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
32610 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
32620 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
32630 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  Exec;.#endif..  
32640 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
32650 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
32660 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
32670 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
32680 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
32690 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
326a0 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
326b0 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
326c0 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
326d0 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
326e0 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
326f0 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
32700 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
32710 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
32720 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
32730 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
32740 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20  >nChildMem .    
32750 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d      || (pProgram
32760 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72  ->nCsr==0 && pPr
32770 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70  ogram->nMem+1==p
32780 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
32790 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
327a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
327b0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
327c0 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
327d0 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  ( (int)(pOp - aO
327e0 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  p)==pFrame->pc )
327f0 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
32800 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
32810 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
32820 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
32830 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
32840 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
32850 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
32860 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61  >nChange;.  pFra
32870 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20  me->nDbChange = 
32880 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a  p->db->nChange;.
32890 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65    assert( pFrame
328a0 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b  ->pAuxData==0 );
328b0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  .  pFrame->pAuxD
328c0 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74  ata = p->pAuxDat
328d0 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61  a;.  p->pAuxData
328e0 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e   = 0;.  p->nChan
328f0 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
32900 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
32910 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
32920 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46   VdbeFrameMem(pF
32930 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  rame);.  p->nMem
32940 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
32950 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
32960 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
32970 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
32980 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
32990 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
329a0 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d  ->nMem];.  pFram
329b0 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29  e->aOnce = (u8*)
329c0 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72  &p->apCsr[pProgr
329d0 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d  am->nCsr];.  mem
329e0 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63  set(pFrame->aOnc
329f0 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d  e, 0, (pProgram-
32a00 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20  >nOp + 7)/8);.  
32a10 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
32a20 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
32a30 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
32a40 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53  m->nOp;.#ifdef S
32a50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
32a60 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
32a70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
32a80 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
32a90 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b  p[-1];..  break;
32aa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
32ab0 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
32ac0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
32ad0 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
32ae0 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
32af0 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
32b00 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
32b10 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
32b20 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
32b30 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
32b40 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
32b50 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
32b60 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
32b70 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
32b80 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
32b90 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
32ba0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
32bb0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
32bc0 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
32bd0 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
32be0 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
32bf0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
32c00 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
32c10 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
32c20 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
32c30 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
32c40 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
32c50 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
32c60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
32c70 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
32c80 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
32c90 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
32ca0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32cb0 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
32cc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
32cd0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
32ce0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
32cf0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
32d00 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32d10 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
32d20 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
32d30 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
32d40 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
32d50 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
32d60 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
32d70 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
32d80 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
32d90 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
32da0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
32db0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
32dc0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
32dd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32de0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
32df0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
32e00 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
32e10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
32e20 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
32e30 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
32e40 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
32e50 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
32e60 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
32e70 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
32e80 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
32e90 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
32ea0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
32eb0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
32ec0 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
32ed0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
32ee0 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
32ef0 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
32f00 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
32f10 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
32f20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
32f30 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
32f40 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
32f50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
32f60 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
32f70 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
32f80 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
32f90 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
32fa0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
32fb0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
32fc0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
32fd0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
32fe0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
32ff0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
33000 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
33010 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
33020 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
33030 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
33040 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
33050 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
33060 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
33070 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
33080 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
33090 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
330a0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
330b0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
330c0 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
330d0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
330e0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
330f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
33100 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
33110 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
33120 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
33130 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
33140 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
33150 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
33160 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
33170 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
33180 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
33190 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
331a0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
331b0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
331c0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
331d0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
331e0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
331f0 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
33200 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
33210 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
33220 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
33230 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
33240 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
33250 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
33260 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
33270 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
33280 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
33290 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
332a0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
332b0 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
332c0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
332d0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
332e0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
332f0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
33300 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
33310 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
33320 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
33330 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
33340 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
33350 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
33360 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
33370 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
33380 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
33390 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
333a0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
333b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
333c0 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
333d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
333e0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
333f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
33400 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
33410 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
33420 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
33430 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
33440 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
33450 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
33460 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
33470 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
33480 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
33490 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
334a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
334b0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
334c0 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
334d0 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
334e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
334f0 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
33500 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
33510 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
33520 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
33530 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
33540 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
33550 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
33560 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
33570 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
33580 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
33590 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
335a0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
335b0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
335c0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
335d0 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
335e0 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
335f0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
33600 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
33610 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
33620 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
33630 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
33640 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
33650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
33660 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
33670 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
33680 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
33690 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
336a0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
336b0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
336c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
336d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
336e0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
336f0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
33700 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
33710 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
33720 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
33730 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
33740 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
33750 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
33760 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
33770 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
33780 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
33790 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
337a0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
337b0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
337c0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
337d0 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
337e0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
337f0 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
33800 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
33810 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
33820 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
33830 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
33840 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
33850 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
33860 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
33870 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
33880 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
33890 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
338a0 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
338b0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
338c0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
338d0 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
338e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
338f0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
33900 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33910 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
33920 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
33930 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33940 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
33950 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
33960 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
33970 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
33980 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
33990 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
339a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
339b0 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
339c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
339d0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
339e0 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
339f0 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
33a00 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
33a10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
33a20 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
33a30 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
33a40 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
33a50 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
33a60 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
33a70 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
33a80 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
33a90 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
33aa0 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
33ab0 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
33ac0 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
33ad0 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
33ae0 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
33af0 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
33b00 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
33b10 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
33b20 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
33b30 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
33b40 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
33b50 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
33b60 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
33b70 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
33b80 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
33b90 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
33ba0 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
33bb0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
33bc0 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
33bd0 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
33be0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
33bf0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33c00 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
33c10 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
33c20 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
33c30 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
33c40 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
33c50 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
33c60 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
33c70 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
33c80 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
33c90 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
33ca0 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
33cb0 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
33cc0 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
33cd0 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
33ce0 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
33cf0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33d00 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
33d10 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
33d20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
33d30 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
33d40 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
33d50 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
33d60 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
33d70 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
33d80 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
33d90 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
33da0 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
33db0 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
33dc0 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
33dd0 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
33de0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
33df0 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
33e00 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
33e10 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
33e20 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
33e30 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
33e40 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
33e50 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
33e60 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
33e70 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
33e80 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
33e90 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
33ea0 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
33eb0 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
33ec0 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
33ed0 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
33ee0 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
33ef0 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
33f00 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
33f10 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
33f20 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
33f30 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
33f40 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
33f50 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
33f60 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
33f70 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
33f80 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
33f90 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
33fa0 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
33fb0 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
33fc0 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
33fd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
33fe0 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
33ff0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
34000 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
34010 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
34020 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
34030 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
34040 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
34050 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
34060 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
34070 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
34080 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
34090 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
340a0 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
340b0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
340c0 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
340d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
340e0 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
340f0 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
34100 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
34110 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
34120 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
34130 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
34140 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
34150 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
34160 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
34170 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
34180 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
34190 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
341a0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
341b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
341c0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
341d0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
341e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
341f0 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
34200 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
34210 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
34220 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
34230 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
34240 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
34250 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
34260 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
34270 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
34280 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
34290 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
342a0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
342b0 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
342c0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
342d0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
342e0 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
342f0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
34300 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
34310 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
34320 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
34330 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
34340 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
34350 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
34360 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
34370 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
34380 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
34390 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
343a0 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
343b0 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
343c0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
343d0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
343e0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
343f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
34400 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
34410 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a  code: AggStep0 *
34420 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
34430 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
34440 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
34450 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
34460 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
34470 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
34480 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
34490 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
344a0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
344b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
344c0 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
344d0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
344e0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
344f0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
34500 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
34510 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
34520 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
34530 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
34540 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
34550 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
34560 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
34570 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
34580 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
34590 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
345a0 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
345b0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
345c0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
345d0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
345e0 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
345f0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
34600 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
34610 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
34620 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62  e3_context.** ob
34630 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65  ject that is use
34640 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e  d to run the fun
34650 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
34660 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65   P3 is.** as the
34670 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
34680 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
34690 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
346a0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
346b0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
346c0 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
346d0 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
346e0 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
346f0 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
34700 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
34710 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
34720 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
34730 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
34740 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
34750 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
34760 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
34770 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
34780 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
34790 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
347a0 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
347b0 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
347c0 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
347d0 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
347e0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
347f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
34800 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  ep0: {.  int n;.
34810 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
34820 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
34830 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
34840 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
34850 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
34860 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
34870 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
34880 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
34890 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
348a0 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
348b0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
348c0 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
348d0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
348e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
348f0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
34900 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
34910 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
34920 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
34930 61 77 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f  awNN(db, n*sizeo
34940 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
34950 29 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) +.            
34960 20 20 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b     (sizeof(pCtx[
34970 30 5d 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  0]) + sizeof(Mem
34980 29 20 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74  ) - sizeof(sqlit
34990 65 33 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20  e3_value*)));.  
349a0 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
349b0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
349c0 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
349d0 43 74 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d  Ctx->pOut = (Mem
349e0 2a 29 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e  *)&(pCtx->argv[n
349f0 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ]);.  sqlite3Vdb
34a00 65 4d 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70  eMemInit(pCtx->p
34a10 4f 75 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c  Out, db, MEM_Nul
34a20 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e  l);.  pCtx->pFun
34a30 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
34a40 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
34a50 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
34a60 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
34a70 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b   = p;.  pCtx->sk
34a80 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43  ipFlag = 0;.  pC
34a90 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b  tx->isError = 0;
34aa0 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
34ab0 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
34ac0 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
34ad0 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
34ae0 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
34af0 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
34b00 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
34b10 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
34b20 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
34b30 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
34b40 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
34b50 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
34b60 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73  Mem *pMem;..  as
34b70 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
34b80 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
34b90 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
34ba0 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d  4.pCtx;.  pMem =
34bb0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
34bc0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
34bd0 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
34be0 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
34bf0 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
34c00 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
34c10 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
34c20 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
34c30 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
34c40 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
34c50 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
34c60 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
34c70 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
34c80 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
34c90 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
34ca0 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
34cb0 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
34cc0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
34cd0 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
34ce0 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
34cf0 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
34d00 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
34d10 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
34d20 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
34d30 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
34d40 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
34d50 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
34d60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
34d70 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
34d80 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
34d90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
34da0 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
34db0 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
34dc0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
34dd0 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
34de0 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
34df0 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
34e00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  ;.  assert( pCtx
34e10 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d  ->pOut->flags==M
34e20 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73  EM_Null );.  ass
34e30 65 72 74 28 20 70 43 74 78 2d 3e 69 73 45 72 72  ert( pCtx->isErr
34e40 6f 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or==0 );.  asser
34e50 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  t( pCtx->skipFla
34e60 67 3d 3d 30 20 29 3b 0a 20 20 28 70 43 74 78 2d  g==0 );.  (pCtx-
34e70 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28  >pFunc->xSFunc)(
34e80 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
34e90 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
34ea0 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
34eb0 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  30 */.  if( pCtx
34ec0 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
34ed0 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
34ee0 6f 72 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  or>0 ){.      sq
34ef0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
34f00 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
34f10 76 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d  value_text(pCtx-
34f20 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72  >pOut));.      r
34f30 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  c = pCtx->isErro
34f40 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
34f50 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
34f60 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
34f70 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
34f80 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
34f90 20 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d       i = pOp[-1]
34fa0 2e 70 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69  .p1;.      if( i
34fb0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
34fc0 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
34fd0 69 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43  i], 1);.      pC
34fe0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
34ff0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
35000 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
35010 65 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  e(pCtx->pOut);. 
35020 20 20 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66     pCtx->pOut->f
35030 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
35040 0a 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72  .    pCtx->isErr
35050 6f 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  or = 0;.    if( 
35060 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
35070 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35080 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  }.  assert( pCtx
35090 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d  ->pOut->flags==M
350a0 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73  EM_Null );.  ass
350b0 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46  ert( pCtx->skipF
350c0 6c 61 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61  lag==0 );.  brea
350d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
350e0 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
350f0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
35100 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
35110 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  N=P2.**.** Execu
35120 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
35130 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
35140 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
35150 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
35160 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
35170 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
35180 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
35190 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
351a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
351b0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
351c0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
351d0 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
351e0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
351f0 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
35200 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
35210 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
35220 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
35230 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
35240 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
35250 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
35260 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
35270 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
35280 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
35290 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
352a0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
352b0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
352c0 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
352d0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
352e0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
352f0 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
35300 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
35310 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
35320 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
35330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
35340 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
35350 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
35360 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
35370 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
35380 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
35390 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
353a0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
353b0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
353c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
353d0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
353e0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
353f0 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
35400 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35410 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
35420 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
35430 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
35440 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35450 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
35460 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
35470 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
35480 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
35490 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
354a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
354b0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
354c0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
354d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
354e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
354f0 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63  _OMIT_WAL./* Opc
35500 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20  ode: Checkpoint 
35510 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
35520 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61  ** Checkpoint da
35530 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20  tabase P1. This 
35540 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31  is a no-op if P1
35550 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
35560 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65  y in.** WAL mode
35570 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69  . Parameter P2 i
35580 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  s one of SQLITE_
35590 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
355a0 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53  VE, FULL,.** RES
355b0 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54  TART, or TRUNCAT
355c0 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30  E.  Write 1 or 0
355d0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66   into mem[P3] if
355e0 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20   the checkpoint 
355f0 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54  returns.** SQLIT
35600 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72  E_BUSY or not, r
35610 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72  espectively.  Wr
35620 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ite the number o
35630 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a  f pages in the.*
35640 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20  * WAL after the 
35650 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20  checkpoint into 
35660 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68  mem[P3+1] and th
35670 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
35680 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20  s.** in the WAL 
35690 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63  that have been c
356a0 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65  heckpointed afte
356b0 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
356c0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e  .** completes in
356d0 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48  to mem[P3+2].  H
356e0 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72  owever on an err
356f0 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  or, mem[P3+1] an
35700 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61  d.** mem[P3+2] a
35710 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  re initialized t
35720 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o -1..*/.case OP
35730 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20  _Checkpoint: {. 
35740 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35760 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
35770 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33   */.  int aRes[3
35780 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
35790 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73        /* Results
357a0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72        /* Write r
357d0 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a  esults here */..
357e0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
357f0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52  dOnly==0 );.  aR
35800 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65  es[0] = 0;.  aRe
35810 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d  s[1] = aRes[2] =
35820 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70   -1;.  assert( p
35830 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
35840 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
35850 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  E.       || pOp-
35860 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
35870 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20  KPOINT_FULL.    
35880 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
35890 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
358a0 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20  _RESTART.       
358b0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
358c0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52  TE_CHECKPOINT_TR
358d0 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63  UNCATE.  );.  rc
358e0 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70   = sqlite3Checkp
358f0 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31  oint(db, pOp->p1
35900 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73  , pOp->p2, &aRes
35910 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a  [1], &aRes[2]);.
35920 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
35930 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42  if( rc!=SQLITE_B
35940 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  USY ) goto abort
35950 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
35960 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
35970 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
35980 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
35990 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
359a0 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
359b0 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
359c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
359d0 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
359e0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
359f0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
35a00 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
35a10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
35a20 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
35a30 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
35a40 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
35a50 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
35a60 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
35a70 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
35a80 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
35a90 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
35aa0 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
35ab0 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
35ac0 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
35ad0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
35ae0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
35af0 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
35b00 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
35b10 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
35b20 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
35b30 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
35b40 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
35b50 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
35b60 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
35b70 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
35b80 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
35b90 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
35ba0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
35bb0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
35bc0 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
35bd0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
35be0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
35bf0 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a  : {    /* out2 *
35c00 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
35c30 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
35c40 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
35c50 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
35c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
35c70 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
35c80 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
35c90 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
35cb0 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
35cc0 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
35cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ce0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
35cf0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
35d00 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
35d10 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
35d20 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
35d30 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
35d40 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
35d50 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
35d60 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75  */.#endif..  pOu
35d70 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
35d80 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e  se(p, pOp);.  eN
35d90 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
35da0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
35db0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
35dc0 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
35dd0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
35de0 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
35df0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
35e00 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
35e10 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
35e20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
35e30 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
35e40 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
35e50 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
35e60 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
35e70 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
35e80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
35e90 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
35ea0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
35eb0 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
35ec0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35ed0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
35ee0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
35ef0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
35f00 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
35f10 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
35f20 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
35f30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
35f40 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
35f50 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
35f60 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
35f70 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
35f80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
35f90 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
35fa0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
35fb0 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
35fc0 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
35fd0 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
35fe0 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
35ff0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
36000 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
36010 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
36020 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
36030 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
36040 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
36050 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
36060 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
36070 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
36080 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
36090 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
360a0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
360b0 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
360c0 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
360d0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
360e0 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
360f0 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
36100 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
36110 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
36120 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
36130 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
36140 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
36150 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
36160 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
36170 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
36180 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
36190 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
361a0 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
361b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
361c0 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
361d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
361e0 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
361f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
36200 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
36210 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
36220 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
36230 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
36240 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
36250 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
36260 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
36270 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
36280 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
36290 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
362a0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
362b0 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
362c0 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
362d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
362e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
362f0 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20   }else{. .      
36300 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
36310 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
36320 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
36330 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64   leaving WAL mod
36340 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67  e, close the log
36350 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73   file. If succes
36360 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20  sful, the call. 
36370 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67         ** to Pag
36380 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65  erCloseWal() che
36390 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c  ckpoints and del
363a0 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61  etes the write-a
363b0 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20  head-log .      
363c0 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58    ** file. An EX
363d0 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79  CLUSIVE lock may
363e0 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f   still be held o
363f0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
36400 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ile .        ** 
36410 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66  after a successf
36420 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20  ul return. .    
36430 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
36440 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
36450 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c  CloseWal(pPager,
36460 20 64 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66   db);.        if
36470 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
36480 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
36490 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
364a0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
364b0 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
364c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
364d0 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
364e0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
364f0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
36500 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
36510 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
36520 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
36530 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
36540 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
36550 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
36560 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
36570 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
36580 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
36590 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
365a0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
365b0 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
365c0 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
365d0 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
365e0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
365f0 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
36600 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
36610 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
36620 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
36630 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
36640 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
36650 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
36660 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
36670 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
36680 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
36690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
366a0 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
366b0 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
366c0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
366d0 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
366e0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
366f0 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
36700 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
36710 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77  .  if( rc ) eNew
36720 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20   = eOld;.  eNew 
36730 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
36740 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
36750 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
36760 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
36770 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
36780 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
36790 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
367a0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
367b0 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
367c0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
367d0 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
367e0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
367f0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
36800 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
36810 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
36820 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
36830 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36840 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36850 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
36860 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
36870 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
36880 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
36890 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
368a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
368b0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
368c0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31  pcode: Vacuum P1
368d0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
368e0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
368f0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50   database P1.  P
36900 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e  1 is 0 for "main
36910 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65  ", and 2 or more
36920 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63  .** for an attac
36930 68 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 54  hed database.  T
36940 68 65 20 22 74 65 6d 70 22 20 64 61 74 61 62 61  he "temp" databa
36950 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61  se may not be va
36960 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  cuumed..*/.case 
36970 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
36980 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
36990 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
369a0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
369b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
369c0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
369d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
369e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
369f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36a00 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
36a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
36a20 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
36a30 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
36a40 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
36a50 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
36a60 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
36a70 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
36a80 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
36a90 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
36aa0 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
36ab0 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
36ac0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
36ad0 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
36ae0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
36af0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
36b00 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
36b10 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
36b20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
36b30 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
36b40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
36b50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
36b60 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
36b70 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
36b80 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
36b90 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
36ba0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
36bb0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
36bc0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
36bd0 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
36be0 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
36bf0 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62  cuum(pBt);.  Vdb
36c00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
36c10 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b  =SQLITE_DONE,2);
36c20 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
36c30 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
36c40 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
36c50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36c60 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
36c70 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  OK;.    goto jum
36c80 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
36c90 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
36ca0 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
36cb0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
36cc0 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
36cd0 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
36ce0 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e  to expire.  When
36cf0 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   an expired stat
36d00 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63  ement.** is exec
36d10 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  uted using sqlit
36d20 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c  e3_step() it wil
36d30 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74  l either automat
36d40 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70  ically.** reprep
36d50 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69  are itself (if i
36d60 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  t was originally
36d70 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73   created using s
36d80 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
36d90 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69  2()).** or it wi
36da0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c  ll fail with SQL
36db0 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a  ITE_SCHEMA..** .
36dc0 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
36dd0 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
36de0 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
36df0 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
36e00 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
36e10 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
36e20 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
36e30 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69  tatement is expi
36e40 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  red..*/.case OP_
36e50 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
36e60 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
36e70 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
36e80 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
36e90 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
36ea0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
36eb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36ec0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36ed0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
36ee0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
36ef0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
36f00 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
36f10 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50  s: iDb=P1 root=P
36f20 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a  2 write=P3.**.**
36f30 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
36f40 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
36f50 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
36f60 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
36f70 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
36f80 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
36f90 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
36fa0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
36fb0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
36fc0 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
36fd0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
36fe0 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
36ff0 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
37000 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
37010 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
37020 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
37030 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
37040 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
37050 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
37060 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
37070 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
37080 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
37090 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
370a0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
370b0 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
370c0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
370d0 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
370e0 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
370f0 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
37100 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
37110 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
37120 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
37130 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
37140 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
37150 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
37160 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
37170 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
37180 69 74 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70  it) ){.    int p
37190 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
371a0 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
371b0 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
371c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
371d0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
371e0 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20  Mask, p1) );.   
371f0 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
37200 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
37210 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
37220 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
37230 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
37240 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
37250 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
37260 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  k);.    if( rc )
37270 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26  {.      if( (rc&
37280 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
37290 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20  CKED ){.        
372a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
372b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
372c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
372d0 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65  ror(p, "database
372e0 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
372f0 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20  : %s", z);.     
37300 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
37310 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37320 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
37330 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
37340 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
37350 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
37360 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37370 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
37380 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
37390 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
373a0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
373b0 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
373c0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
373d0 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
373e0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
373f0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
37400 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
37410 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
37420 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
37430 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
37440 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
37450 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
37460 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
37470 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
37480 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
37490 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
374a0 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
374b0 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
374c0 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
374d0 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
374e0 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
374f0 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
37500 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
37510 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
37520 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
37530 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56  pVTab ) sqlite3V
37540 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
37550 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29  p, pVTab->pVtab)
37560 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37570 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37580 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
37590 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
375a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
375b0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
375c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
375d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
375e0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50  de: VCreate P1 P
375f0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32  2 * * *.**.** P2
37600 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
37610 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
37620 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
37630 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
37640 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74  e .** P1. Call t
37650 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
37660 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
37670 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
37680 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d  eate: {.  Mem sM
37690 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
376a0 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
376b0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
376c0 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
376d0 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20  char *zTab;  /* 
376e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  Name of the virt
376f0 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20  ual table */..  
37700 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
37710 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
37720 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a    sMem.db = db;.
37730 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20    /* Because P2 
37740 69 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74  is always a stat
37750 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73  ic string, it is
37760 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
37770 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
37780 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f  VdbeMemCopy() to
37790 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72   fail */.  asser
377a0 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
377b0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
377c0 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  r)!=0 );.  asser
377d0 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
377e0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
377f0 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63  atic)!=0 );.  rc
37800 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
37810 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d  mCopy(&sMem, &aM
37820 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
37830 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
37840 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20  TE_OK );.  zTab 
37850 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
37860 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
37870 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65  t(&sMem);.  asse
37880 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e  rt( zTab || db->
37890 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
378a0 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20    if( zTab ){.  
378b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
378c0 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
378d0 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20   pOp->p1, zTab, 
378e0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
378f0 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
37900 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
37910 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37920 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37930 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
37940 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
37950 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37960 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
37970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
37980 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
37990 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
379a0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
379b0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
379c0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
379d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
379e0 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
379f0 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
37a00 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
37a10 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
37a20 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  : {.  db->nVDest
37a30 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  roy++;.  rc = sq
37a40 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
37a50 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
37a60 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
37a70 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b  db->nVDestroy--;
37a80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
37a90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37aa0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
37ab0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
37ac0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37ad0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
37ae0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
37af0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
37b00 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
37b10 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
37b20 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
37b30 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
37b40 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
37b50 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
37b60 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
37b70 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
37b80 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
37b90 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
37ba0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
37bb0 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
37bc0 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
37bd0 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
37be0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
37bf0 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
37c00 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
37c10 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
37c20 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
37c30 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
37c40 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
37c50 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
37c60 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
37c70 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20  ;.  pVCur = 0;. 
37c80 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
37c90 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
37ca0 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
37cb0 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
37cc0 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
37cd0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
37ce0 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KED;.    goto ab
37cf0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37d00 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
37d10 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37d20 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
37d30 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
37d40 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
37d50 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
37d60 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
37d70 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
37d80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37d90 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  ..  /* Initializ
37da0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
37db0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
37dc0 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74   */.  pVCur->pVt
37dd0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f  ab = pVtab;..  /
37de0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
37df0 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
37e00 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
37e10 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
37e20 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55  p->p1, 0, -1, CU
37e30 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69  RTYPE_VTAB);.  i
37e40 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70  f( pCur ){.    p
37e50 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20  Cur->uc.pVCur = 
37e60 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62  pVCur;.    pVtab
37e70 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73  ->nRef++;.  }els
37e80 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  e{.    assert( d
37e90 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
37ea0 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  );.    pModule->
37eb0 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20  xClose(pVCur);. 
37ec0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
37ed0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
37ee0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37ef0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37f00 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37f10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37f20 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37f30 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
37f40 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
37f50 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d  sis: iplan=r[P3]
37f60 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a   zplan='P4'.**.*
37f70 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
37f80 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
37f90 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
37fa0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
37fb0 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
37fc0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
37fd0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
37fe0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
37ff0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
38000 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
38010 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
38020 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
38030 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
38040 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
38050 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
38060 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
38070 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
38080 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
38090 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
380a0 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
380b0 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
380c0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
380d0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
380e0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
380f0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
38100 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
38110 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
38120 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
38130 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
38140 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
38150 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
38160 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
38170 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
38180 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
38190 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
381a0 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
381b0 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
381c0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
381d0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
381e0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
381f0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
38200 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
38210 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
38220 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
38230 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
38240 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
38250 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
38260 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
38270 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
38280 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
38290 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
382a0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
382b0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
382c0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
382d0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
382e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
382f0 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
38300 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
38310 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
38320 20 2a 70 43 75 72 3b