/ Hex Artifact Content
Login

Artifact 9816247ea2066c427c199d5525d0bfa6916abb68:


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 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1ed0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1ee0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1ef0: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1f00: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1f10: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1f20: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1f30: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1f40: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1f50: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f60: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f70: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1f80: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1f90: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1fa0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1fb0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1fc0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1fd0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1fe0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1ff0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
2000: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
2010: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2020: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
2030: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2040: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2050: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
2060: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
2070: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
2080: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2090: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
20a0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
20b0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
20c0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
20d0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
20e0: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
20f0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2100: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2110: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2120: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2130: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2140: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2150: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2160: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2170: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2180: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2190: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21b0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21d0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
21e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
21f0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2200: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2210: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2220: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2230: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2240: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2250: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2260: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2270: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
2280: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
2290: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22c0: 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 56  ){.    double rV
22d0: 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69 56  alue;.    i64 iV
22e0: 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e 63  alue;.    u8 enc
22f0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2300: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2310: 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29  gs&MEM_Str)==0 )
2320: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 28   return;.    if(
2330: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
2340: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2350: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2360: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2370: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2380: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2390: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65 63  c) ){.      pRec
23b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
23c0: 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
23d0: 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  s |= MEM_Int;.  
23e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
23f0: 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b  Rec->r = rValue;
2400: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2410: 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  gs |= MEM_Real;.
2420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2430: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2440: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
2450: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
2460: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
2470: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
2480: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
2490: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24a0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
24b0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
24c0: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
24d0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
24e0: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
24f0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2510: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2520: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2530: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2540: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
2550: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2560: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
2570: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
2580: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
2590: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25a0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
25b0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
25c0: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
25d0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
25e0: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2600: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2610: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2620: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2630: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2640: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
2650: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
2660: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
2670: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
2680: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
2690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26a0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
26b0: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
26c0: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
26d0: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
26e0: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
26f0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2710: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2720: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2730: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2740: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
2750: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
2760: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2770: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
2780: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
2790: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
27b0: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
27c0: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
27d0: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
27e0: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
27f0: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2800: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2810: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2820: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2830: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2840: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
2860: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
2870: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2880: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2890: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28a0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
28b0: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
28c0: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
28d0: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
28e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
28f0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2900: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2910: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2940: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2950: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2960: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
2970: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
2980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2990: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29a0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
29b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
29c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
29d0: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
29e0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
29f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a00: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a20: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a30: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a40: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2a50: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2a60: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2a70: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2a80: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2a90: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2aa0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2ab0: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2ac0: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2ad0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2ae0: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2af0: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2b00: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2b10: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2b20: 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 74  l;.  if( pMem->t
2b30: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2b40: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   ){.    applyNum
2b50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2b60: 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  m);.    sqlite3V
2b70: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b80: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
2b90: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
2ba0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2bb0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2bc0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2bd0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2be0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2bf0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c00: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c20: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c30: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c40: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2c50: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2c60: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2c70: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2c80: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2c90: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2ca0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2cb0: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2cc0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2cd0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
2ce0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
2cf0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
2d00: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
2d10: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
2d20: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
2d30: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2d40: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2d50: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2d60: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2d70: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2d80: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2d90: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2da0: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2db0: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2dc0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2dd0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
2de0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
2df0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2e00: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
2e10: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2e20: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2e40: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2e50: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2e60: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2e70: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2e80: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e90: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2ea0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2eb0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2ec0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2ed0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
2ee0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2ef0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
2f00: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2f10: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
2f20: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2f30: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2f40: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2f50: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f60: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f80: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f90: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2fa0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2fb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2fc0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2fd0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2fe0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2ff0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3000: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3010: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3020: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3030: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3040: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3050: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3090: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
30a0: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
30b0: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
30c0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
30d0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
30e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
3110: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3120: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3130: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3140: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3150: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3160: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3170: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3180: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3190: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
31a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31b0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31c0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
31d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
31e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
31f0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3200: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
3210: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3220: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3230: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3240: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3250: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3260: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3270: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3280: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3290: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
32a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32b0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
32c0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
32d0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
32e0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
32f0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3300: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3310: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3320: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3340: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3350: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3370: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3380: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3390: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
33a0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
33b0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
33c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
33d0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
33e0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
33f0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3400: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3410: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3420: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3430: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3440: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3450: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3460: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3470: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3480: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3490: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34a0: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
34b0: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
34c0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
34d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
34e0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
34f0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3500: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3520: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3530: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3540: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3550: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3560: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3570: 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20  rint(FILE *out, 
3580: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
3590: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
35a0: 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66 70 72  valid ){.    fpr
35b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e 64 65  intf(out, " unde
35c0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
35d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
35f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3600: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3610: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3620: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3630: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3640: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3650: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3660: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3670: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3680: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3700: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3710: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3720: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3730: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3740: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3760: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3770: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3780: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3790: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
37c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
37e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
37f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3800: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3810: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3820: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3830: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3840: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3850: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3860: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3870: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3880: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3890: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
38b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
38c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
38d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
38e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3900: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3910: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3920: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3930: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3940: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3950: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3960: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3970: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3980: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3990: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39a0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
39b0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
39c0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
39d0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
39e0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
39f0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3a50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3a60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3a70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3a80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3a90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3aa0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3ab0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3ac0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3ad0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3ae0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3af0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b10: 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  an we needed.  B
3b20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3b50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3b60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3b70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3b80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3b90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ba0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3bb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3bc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3bd0: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3be0: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3bf0: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c00: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c10: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c20: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3c30: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3c40: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3c50: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3c60: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3c70: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3c80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3c90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3ca0: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3cb0: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3cc0: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3cd0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3ce0: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3cf0: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d10: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d20: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3d30: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3d40: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3d50: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3d60: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3d70: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3d80: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3da0: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3db0: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3dc0: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3dd0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  ndif../*.** Tran
3df0: 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  sfer error messa
3e00: 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61 6e 20  ge text from an 
3e10: 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a 45 72  sqlite3_vtab.zEr
3e20: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3e30: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3e40: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3e50: 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74  ite3_malloc) int
3e60: 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d 73 67  o a Vdbe.zErrMsg
3e70: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e80: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e90: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3ea0: 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74  DbMalloc)..*/.st
3eb0: 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74  atic void import
3ec0: 56 74 61 62 45 72 72 4d 73 67 28 56 64 62 65 20  VtabErrMsg(Vdbe 
3ed0: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  *p, sqlite3_vtab
3ee0: 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71 6c 69   *pVtab){.  sqli
3ef0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3f00: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3f10: 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
3f20: 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
3f30: 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
3f40: 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72  (db, pVtab->zErr
3f50: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
3f60: 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45 72 72  free(pVtab->zErr
3f70: 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  Msg);.  pVtab->z
3f80: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a  ErrMsg = 0;.}...
3f90: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
3fa0: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
3fb0: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
3fc0: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
3fd0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
3fe0: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
3ff0: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
4000: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
4010: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
4020: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
4030: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
4040: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
4050: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
4060: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
4070: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
4080: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4090: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
40a0: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
40b0: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
40c0: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
40d0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
40e0: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
40f0: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
4100: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
4110: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
4120: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
4130: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
4140: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
4150: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
4160: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
4170: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
4180: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4190: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
41a0: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
41b0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
41c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
41d0: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
41e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
41f0: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
4200: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
4210: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
4220: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
4230: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
4240: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
4250: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
4260: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
4270: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
4280: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4290: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
42a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
42b0: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
42c0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
42d0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
42e0: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
42f0: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
4300: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
4310: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
4320: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
4330: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
4340: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
4350: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
4360: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4370: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
4380: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4390: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
43a0: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
43b0: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
43c0: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
43d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
43e0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
43f0: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
4400: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4410: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
4420: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
4430: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
4440: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
4450: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
4460: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
4470: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
4480: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4490: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
44a0: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
44c0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
44d0: 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20  int pc=0;       
44e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
44f0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
4500: 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  r */.  Op *aOp =
4510: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4520: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4530: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
4540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4550: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4560: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4570: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4580: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4590: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
45a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
45b0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
45c0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
45d0: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
45e0: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
45f0: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4600: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4610: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
4620: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4630: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4640: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4670: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63  CALLBACK.  int c
4680: 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20 20 20  heckProgress;   
4690: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
46a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
46b0: 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  cks are enabled 
46c0: 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65  */.  int nProgre
46d0: 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20  ssOps = 0;      
46e0: 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75  /* Opcodes execu
46f0: 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65  ted since progre
4700: 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a  ss callback. */.
4710: 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 43 6f  #endif.  int iCo
4720: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4730: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4740: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4750: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4760: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4770: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4780: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4790: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
47a0: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70  .  Mem *aMem = p
47b0: 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a  ->aMem;       /*
47c0: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d   Copy of p->aMem
47d0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20   */.  Mem *pIn1 
47e0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
47f0: 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70   /* 1st input op
4800: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4810: 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn2 = 0;       
4820: 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70        /* 2nd inp
4830: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4840: 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20  Mem *pIn3 = 0;  
4850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72             /* 3r
4860: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
4870: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d  */.  Mem *pOut =
4880: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4890: 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e  /* Output operan
48a0: 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72  d */.  int *aPer
48b0: 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  mute = 0;       
48c0: 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e    /* Permutation
48d0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20   of columns for 
48e0: 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20  OP_Compare */.  
48f0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  i64 lastRowid = 
4900: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
4910: 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f  /* Saved value o
4920: 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  f the last inser
4930: 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65  t ROWID */.#ifde
4940: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4950: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4970: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4980: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4990: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
49a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
49b0: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
49c0: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
49d0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
49e0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
49f0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
4a00: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4a10: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
4a20: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
4a30: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4a40: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4a50: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4a60: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4a70: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4a80: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4a90: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4aa0: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4ab0: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4ac0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4ad0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4ae0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4af0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4b00: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4b10: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4b20: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
4b30: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4b40: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4b50: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4b60: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4b70: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4b80: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
4b90: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4ba0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4bb0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4bc0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4bd0: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
4be0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4bf0: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4c00: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4c10: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4c20: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4c30: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4c40: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4c50: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4c60: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4c70: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4c80: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4c90: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4ca0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4cb0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4cc0: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4cd0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4ce0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4cf0: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4d00: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4d10: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4d20: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4d30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4d40: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4d50: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4d60: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4d70: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4d80: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4d90: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4da0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4db0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4dc0: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4dd0: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4de0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4df0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4e00: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4e10: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4e20: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4e30: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4e40: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
4e50: 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  ++;.    pOp = &a
4e60: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
4e70: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
4e80: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
4e90: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
4ea0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4eb0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
4ec0: 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
4ed0: 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b      if( pc==0 ){
4ee0: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
4ef0: 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20  "VDBE Execution 
4f00: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20  Trace:\n");.    
4f10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4f20: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4f30: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4f40: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e  3VdbePrintOp(p->
4f50: 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b  trace, pc, pOp);
4f60: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
4f70: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
4f80: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
4f90: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
4fa0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
4fb0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
4fc0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
4fd0: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
4fe0: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
4ff0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
5000: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
5010: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5020: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
5030: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5040: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
5050: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5060: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
5070: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5080: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
5090: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
50a0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
50b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
50c0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20  ESS_CALLBACK.   
50d0: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
50e0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
50f0: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
5100: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
5110: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a  red number.    *
5120: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
5130: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
5140: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
5150: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
5160: 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  f.    ** sqlite3
5170: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
5180: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
5190: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
51a0: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
51b0: 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70  .    ** If the p
51c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
51d0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
51e0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
51f0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
5200: 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  .    ** a return
5210: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
5220: 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  RT..    */.    i
5230: 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73  f( checkProgress
5240: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62   ){.      if( db
5250: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d  ->nProgressOps==
5260: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a  nProgressOps ){.
5270: 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b          int prc;
5280: 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20 64  .        prc = d
5290: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
52a0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a  >pProgressArg);.
52b0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21          if( prc!
52c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
52d0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
52e0: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20  RRUPT;.         
52f0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
5300: 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d  _halt;.        }
5310: 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65  .        nProgre
5320: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
5330: 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65   }.      nProgre
5340: 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ssOps++;.    }.#
5350: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5360: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
5370: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
5380: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
5390: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
53a0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
53b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
53c0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
53d0: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
53e0: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
53f0: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5400: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5410: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5420: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5430: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5440: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5450: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5460: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
5470: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
5480: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5490: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
54a0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
54b0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
54c0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
54d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
54e0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
54f0: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5500: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5520: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5530: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5540: 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d  );.      VdbeMem
5550: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
5560: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
5570: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
5580: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
5590: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
55a0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
55b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
55c0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
55d0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
55e0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
55f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5600: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5610: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5620: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
5630: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5640: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5650: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5660: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5670: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5680: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5690: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
56a0: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
56b0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
56c0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
56f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5700: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5710: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5720: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5730: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5740: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5750: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5760: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5770: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5780: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5790: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
57a0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
57b0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
57c0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
57d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
57e0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
57f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5800: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5810: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5820: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5830: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5840: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5850: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5860: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5870: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5880: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5890: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
58a0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
58b0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
58c0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
58d0: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
58e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
58f0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5900: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5910: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  Mem );.      mem
5920: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5930: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5940: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5950: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
5960: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
59c0: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
59d0: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
59e0: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
59f0: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5a00: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5a10: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5a20: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5a30: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5a40: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
5a50: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
5a60: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
5a70: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5a80: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5a90: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5aa0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5ab0: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5ac0: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5ad0: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5ae0: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5af0: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5b00: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5b10: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5b20: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5b30: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5b40: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
5b50: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
5b60: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
5b70: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5b80: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5b90: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5ba0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5bb0: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5bc0: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5bd0: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5be0: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5bf0: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5c00: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5c10: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5c20: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5c30: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5c40: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
5c50: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
5c60: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
5c70: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5c80: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5c90: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5ca0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5cb0: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5cc0: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5cd0: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5ce0: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5cf0: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5d00: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5d10: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5d20: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5d30: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5d40: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5d50: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5d60: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5d70: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5d80: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5d90: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5da0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5db0: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5dc0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5dd0: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5de0: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5df0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5e00: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5e10: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5e20: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5e30: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5e40: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5e50: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5e60: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5e70: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5e80: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5e90: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5ea0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5eb0: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5ec0: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5ed0: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5ee0: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5ef0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5f00: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5f10: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5f20: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5f30: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5f40: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5f50: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5f60: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5f70: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5f80: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5f90: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5fa0: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5fb0: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5fc0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5fd0: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5fe0: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5ff0: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
6000: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
6010: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
6020: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
6030: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
6040: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
6050: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6060: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6070: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6080: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
60d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
60e0: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
60f0: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
6100: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
6110: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
6120: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
6130: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6140: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6150: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6160: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6170: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6180: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
6190: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
61a0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b   jump */.  CHECK
61b0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
61c0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
61d0: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
61e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
61f0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
6200: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6210: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6220: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6230: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6240: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6250: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6260: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6270: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6280: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6290: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
62a0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
62b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
62c0: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
62d0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
62e0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
62f0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
6300: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6310: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6320: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6330: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6340: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6350: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6360: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6370: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6380: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6390: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
63a0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
63b0: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
63c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
63d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
63e0: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
63f0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
6400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6410: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6420: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
6430: 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e  nt );.  pc = (in
6440: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62  t)pIn1->u.i;.  b
6450: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6460: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20  de:  Yield P1 * 
6470: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6480: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
6490: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
64a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
64b0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  P1..*/.case OP_Y
64c0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
64d0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
64e0: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e  nt pcDest;.  pIn
64f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6500: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
6510: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
6520: 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49  _Dyn)==0 );.  pI
6530: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6540: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
6550: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6560: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6570: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6580: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6590: 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74  );.  pc = pcDest
65a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
65b0: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
65c0: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
65d0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  4 *.**.** Check 
65e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
65f0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
6600: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
6610: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
6620: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
6630: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
6640: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6650: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6660: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6670: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6680: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6690: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
66a0: 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  op..*/.case OP_H
66b0: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
66c0: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
66d0: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
66e0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
66f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
6700: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
6710: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
6720: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
6730: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
6740: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
6750: 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d   *.**.** Exit im
6760: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
6770: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
6780: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
6790: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
67a0: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
67b0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
67c0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
67d0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
67e0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
67f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6800: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
6810: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
6820: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
6830: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
6840: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
6850: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
6860: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
6870: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
6880: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
6890: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
68a0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
68b0: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
68c0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
68d0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
68e0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
68f0: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
6900: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
6910: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
6920: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
6930: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
6940: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
6950: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
6960: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
6970: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
6980: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
6990: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
69a0: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
69b0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
69c0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54   string..**.** T
69d0: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
69e0: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
69f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
6a00: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
6a10: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
6a20: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
6a30: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
6a40: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
6a50: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
6a60: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
6a70: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
6a80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
6a90: 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
6aa0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
6ab0: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
6ac0: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
6ad0: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
6ae0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
6af0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
6b00: 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70      VdbeFrame *p
6b10: 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
6b20: 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65  e;.    p->pFrame
6b30: 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65   = pFrame->pPare
6b40: 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d  nt;.    p->nFram
6b50: 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e--;.    sqlite3
6b60: 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
6b70: 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
6b80: 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33      pc = sqlite3
6b90: 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65  VdbeFrameRestore
6ba0: 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61  (pFrame);.    la
6bb0: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
6bc0: 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28  stRowid;.    if(
6bd0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
6be0: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
6bf0: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69  Instruction pc i
6c00: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
6c10: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6c20: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
6c30: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
6c40: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
6c50: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
6c60: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
6c70: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
6c80: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
6c90: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
6ca0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
6cb0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
6cc0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
6cd0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
6ce0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
6cf0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
6d00: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
6d10: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
6d20: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
6d30: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
6d40: 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63    pc = p->aOp[pc
6d50: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
6d60: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
6d70: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
6d80: 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  em;.    break;. 
6d90: 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f   }..  p->rc = pO
6da0: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
6db0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6dc0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
6dd0: 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   pc;.  if( pOp->
6de0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
6df0: 72 74 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54  rt( p->rc!=SQLIT
6e00: 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69  E_OK );.    sqli
6e10: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
6e20: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
6e30: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6e40: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71      testcase( sq
6e50: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6e60: 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20  g.xLog!=0 );.   
6e70: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
6e80: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
6e90: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
6ea0: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f   pc, p->zSql, pO
6eb0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73  p->p4.z);.  }els
6ec0: 65 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20  e if( p->rc ){. 
6ed0: 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c     testcase( sql
6ee0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6ef0: 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20  .xLog!=0 );.    
6f00: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
6f10: 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74  >p1, "constraint
6f20: 20 66 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e   failed at %d in
6f30: 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a   [%s]", pc, p->z
6f40: 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Sql);.  }.  rc =
6f50: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
6f60: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
6f70: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
6f80: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
6f90: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
6fa0: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
6fb0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
6fc0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
6fd0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6fe0: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
6ff0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7000: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
7010: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7020: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7030: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7040: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7050: 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  dCons>0 );.    r
7060: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
7070: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
7080: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
7090: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
70a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
70b0: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
70c0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  *.**.** The 32-b
70d0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
70e0: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
70f0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7100: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7110: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7120: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7130: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7140: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7150: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7160: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7170: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
7180: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
7190: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
71a0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
71b0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
71c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
71d0: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
71e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
71f0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7200: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7210: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
7220: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
7230: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
7240: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
7250: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
7260: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
7270: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
7280: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
7290: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
72a0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
72b0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
72c0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
72d0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
72e0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
72f0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
7300: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
7310: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
7320: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7330: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7340: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
7350: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
7360: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
7370: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
7380: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
7390: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
73a0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
73b0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
73c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
73d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
73e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
73f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7400: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7410: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7420: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7430: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7440: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
7450: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
7460: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7470: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
7480: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7490: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
74a0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
74b0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
74c0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
74d0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
74e0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
74f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7500: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7510: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7520: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7540: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7550: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7560: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7570: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
7580: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
7590: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
75a0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
75b0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
75c0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
75d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
75e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
75f0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7600: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7610: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7620: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7630: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7640: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7650: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
7660: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
7670: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
7680: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
7690: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
76a0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
76b0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
76c0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
76d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
76e0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
76f0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7700: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7710: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7720: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7730: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7740: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7750: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7760: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7770: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
7780: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
7790: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
77a0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
77b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
77c0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
77d0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
77e0: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
77f0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7800: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7810: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7820: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7830: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7840: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7850: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7860: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
7880: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
7890: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
78a0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
78b0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
78c0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
78d0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
78e0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
78f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7900: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
7910: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7920: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
7930: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
7940: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
7950: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
7960: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
7970: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7980: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
7990: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
79a0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
79b0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
79c0: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
79d0: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
79e0: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
79f0: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
7a00: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
7a10: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
7a20: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
7a30: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
7a40: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
7a50: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
7a60: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
7a70: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
7a80: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
7a90: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
7aa0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
7ab0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7ac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7ad0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7ae0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
7af0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
7b00: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
7b10: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
7b20: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
7b30: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7b40: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
7b50: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
7b60: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
7b70: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
7b80: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
7b90: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
7ba0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
7bb0: 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65  Out);.    VdbeMe
7bc0: 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a  mRelease(pOut);.
7bd0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7be0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
7bf0: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
7c00: 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
7c10: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
7c20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  P4.**.** P4 poin
7c30: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
7c40: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
7c50: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
7c60: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
7c70: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7c80: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7c90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7ca0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7cb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7cc0: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7cd0: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7ce0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7cf0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7d00: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
7d10: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7d20: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7d30: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7d40: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7d50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
7d60: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
7d70: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  4 *.**.** Transf
7d80: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
7d90: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
7da0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
7db0: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
7dc0: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
7dd0: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
7de0: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
7df0: 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20  4 and P3==1..** 
7e00: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
7e10: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
7e20: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
7e30: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
7e40: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
7e50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7e60: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7e70: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
7e80: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
7e90: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
7ea0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7eb0: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
7ec0: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
7ed0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
7ee0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
7ef0: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
7f00: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
7f10: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
7f20: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
7f30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
7f40: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
7f50: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7f60: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
7f70: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7f80: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
7f90: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
7fa0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7fb0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7fc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
7fd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
7fe0: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
7ff0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8000: 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e  1..P1+P3 over in
8010: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
8020: 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69  P2..P2+P3.  Regi
8030: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
8040: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
8050: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
8060: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
8070: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
8080: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64  ** P1..P1+P3 and
8090: 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76   P2..P2+P3 to ov
80a0: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
80b0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
80c0: 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20   *zMalloc;   /* 
80d0: 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65  Holding variable
80e0: 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d   for allocated m
80f0: 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  emory */.  int n
8100: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
8110: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
8120: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
8130: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
8140: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
8150: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
8160: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
8170: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
8180: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
8190: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20    n = pOp->p3 + 
81a0: 31 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  1;.  p1 = pOp->p
81b0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
81c0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
81d0: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
81e0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
81f0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
8200: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
8210: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
8220: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
8230: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20   while( n-- ){. 
8240: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
8250: 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20  =&aMem[p->nMem] 
8260: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
8270: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  In1<=&aMem[p->nM
8280: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8290: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
82a0: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
82b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
82c0: 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  Out);.    zMallo
82d0: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
82e0: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
82f0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
8300: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
8310: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69  (pOut, pIn1);.#i
8320: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8330: 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e  G.    if( pOut->
8340: 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65  pScopyFrom>=&aMe
8350: 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70  m[p1] && pOut->p
8360: 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b  ScopyFrom<&aMem[
8370: 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20  p1+pOp->p3] ){. 
8380: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
8390: 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f  yFrom += p1 - pO
83a0: 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e  p->p2;.    }.#en
83b0: 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  dif.    pIn1->zM
83c0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
83d0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
83e0: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
83f0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8400: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8410: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8420: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
8430: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  3 * *.**.** Make
8440: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8450: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
8460: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
8470: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
8480: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8490: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
84a0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
84b0: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
84c0: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
84d0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
84e0: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
84f0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
8500: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
8510: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
8520: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
8530: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8540: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8550: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8560: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8570: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
8580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8590: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
85a0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
85b0: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
85c0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
85d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
85e0: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
85f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
8600: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
8610: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
8620: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
8630: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
8640: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
8650: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
8660: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
8670: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8680: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
8690: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
86a0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
86b0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
86c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
86d0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
86e0: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
86f0: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8700: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8710: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8720: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8730: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8740: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8750: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8760: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8770: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
8780: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
8790: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
87a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
87b0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
87c0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
87d0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
87e0: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
87f0: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8800: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8810: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8820: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8830: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8840: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8850: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8860: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8870: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
8880: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
8890: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
88a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
88b0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
88c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
88d0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
88e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
88f0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8900: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8910: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8920: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8930: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8940: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8950: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8960: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8970: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8980: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
89a0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
89b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
89c0: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
89d0: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
89e0: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
89f0: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8a00: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8a10: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8a20: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8a30: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8a40: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8a50: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8a60: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8a70: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
8a80: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
8a90: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
8aa0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
8ab0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
8ac0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
8ad0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8ae0: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8af0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8b00: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8b10: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8b20: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8b30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8b40: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8b50: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8b60: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8b70: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
8b80: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
8b90: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
8ba0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
8bb0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8bc0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
8bd0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8be0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8bf0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8c00: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8c10: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8c20: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8c30: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8c40: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8c50: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8c60: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8c70: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
8c80: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
8c90: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
8ca0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
8cb0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
8cc0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
8cd0: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8ce0: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8cf0: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8d00: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8d10: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8d20: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8d30: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8d40: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8d50: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8d60: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
8d70: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
8d80: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
8d90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
8da0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
8db0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
8dc0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
8dd0: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8de0: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8df0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8e00: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8e10: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8e20: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8e30: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8e40: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8e50: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8e60: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
8e70: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
8e80: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
8e90: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
8ea0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
8eb0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
8ec0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
8ed0: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8ee0: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8ef0: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8f00: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8f10: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8f20: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8f30: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8f40: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8f50: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
8f60: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
8f70: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
8f80: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
8f90: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
8fa0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
8fb0: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
8fc0: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
8fd0: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
8fe0: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8ff0: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
9000: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9010: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
9020: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
9030: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
9040: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
9050: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
9060: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
9070: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
9080: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
9090: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
90a0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
90b0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
90c0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
90d0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
90e0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
90f0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
9100: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
9110: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
9120: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
9130: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
9140: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
9150: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
9160: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
9170: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
9180: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
9190: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
91a0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
91b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
91c0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
91d0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
91e0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
91f0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9200: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9210: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9220: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9230: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9240: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
9250: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
9260: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9270: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
9280: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
9290: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
92a0: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
92b0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
92c0: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
92d0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
92e0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
92f0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9300: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9310: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9320: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9330: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9340: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
9350: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
9360: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
9370: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9380: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
9390: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
93a0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
93b0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
93c0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
93d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
93e0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
93f0: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
9400: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
9410: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
9420: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
9430: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
9440: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
9450: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
9460: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
9470: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
9480: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
9490: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
94a0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
94b0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
94c0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
94d0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
94e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
94f0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
9500: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
9510: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
9520: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
9530: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
9540: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9550: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
9560: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
9570: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
9580: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
9590: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
95a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
95b0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
95c0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
95d0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
95e0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
95f0: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
9600: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
9610: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
9620: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
9630: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9640: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
9650: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
9660: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
9670: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
9680: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
9690: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
96a0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
96b0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
96c0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
96d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
96e0: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
96f0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9700: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9710: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9720: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
9730: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
9740: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
9750: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
9760: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
9770: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
9780: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
9790: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
97a0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
97b0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d  pOut->z[nByte] =
97c0: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42   0;.  pOut->z[nB
97d0: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
97e0: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
97f0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
9800: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
9810: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9820: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9830: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9840: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9850: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
9860: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9870: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
9880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
9890: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
98a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
98b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
98c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
98d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
98e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
98f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9900: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9910: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
9920: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  P3 * *.**.**.** 
9930: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
9940: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9950: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9960: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9970: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9980: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9990: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
99a0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
99b0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
99c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
99d0: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
99e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
99f0: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
9a00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9a10: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
9a20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9a30: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9a40: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9a50: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9a60: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9a70: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9a80: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9a90: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
9aa0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9ab0: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
9ac0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9ad0: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9ae0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9af0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9b00: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9b10: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
9b20: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
9b30: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
9b40: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
9b50: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9b60: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9b70: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
9b80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9b90: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9ba0: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
9bb0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
9bc0: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
9bd0: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
9be0: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
9bf0: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
9c00: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9c10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9c20: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9c30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
9c40: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
9c50: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9c60: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9c70: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
9c80: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
9c90: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
9ca0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9cb0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
9ce0: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
9cf0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
9d00: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
9d10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9d20: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
9d30: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9d40: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9d60: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
9d70: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9d80: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
9d90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9da0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9db0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
9dc0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9dd0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
9de0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9df0: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
9e00: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
9e10: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
9e20: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
9e30: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
9e40: 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  ands */.  int fl
9e50: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
9e60: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
9e70: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
9e80: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
9ea0: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
9eb0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
9ec0: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
9ed0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9ee0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
9ef0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
9f00: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9f10: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
9f20: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9f30: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
9f40: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9f50: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
9f60: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
9f70: 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  1];.  applyNumer
9f80: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29  icAffinity(pIn1)
9f90: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
9fa0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70  [pOp->p2];.  app
9fb0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9fc0: 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  y(pIn2);.  pOut 
9fd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9fe0: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
9ff0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
a000: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
a010: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
a020: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a030: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a040: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ull;.  if( (pIn1
a050: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e  ->flags & pIn2->
a060: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a070: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  ==MEM_Int ){.   
a080: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
a090: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
a0a0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
a0b0: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
a0c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a0d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a0e0: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
a0f0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
a100: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
a110: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
a120: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
a130: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
a140: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
a150: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
a160: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
a170: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
a180: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
a190: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
a1a0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
a1b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a1c0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a1d0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a1e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a1f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a200: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
a210: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
a220: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
a230: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
a240: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
a250: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a260: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a270: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a280: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a290: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a2a0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a2b0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a2c0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a2d0: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
a2e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a2f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a300: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
a310: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a320: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
a330: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
a340: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
a350: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
a360: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a370: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
a380: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
a390: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
a3a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
a3b0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
a3c0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
a3d0: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
a3e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a3f0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a400: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
a410: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a420: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
a430: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
a440: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a450: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a460: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
a470: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
a480: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
a490: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
a4a0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
a4b0: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
a4c0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a4d0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a4e0: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
a4f0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a500: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a510: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a520: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
a530: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
a540: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
a550: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a560: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a570: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a580: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a590: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a5a0: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
a5b0: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
a5c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a5d0: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
a5e0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
a5f0: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
a600: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
a610: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a620: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
a630: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
a640: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a650: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a660: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a670: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a680: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a690: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a6a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
a6b0: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
a6c0: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
a6d0: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
a6e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a6f0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a700: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
a710: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
a720: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
a730: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
a740: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a750: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
a760: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a770: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
a780: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
a790: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a7a0: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
a7b0: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
a7c0: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
a7d0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
a7e0: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
a7f0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a800: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
a810: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
a820: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
a830: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
a840: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
a850: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
a860: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
a870: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
a880: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
a890: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
a8a0: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
a8b0: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
a8c0: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
a8d0: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
a8e0: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
a8f0: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
a900: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
a910: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
a920: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
a930: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
a940: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
a950: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
a960: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
a970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
a980: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
a990: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
a9a0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
a9b0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a9c0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
a9d0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
a9e0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
a9f0: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
aa00: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
aa10: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
aa20: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
aa30: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
aa40: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
aa50: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
aa60: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
aa70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
aa80: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
aa90: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
aaa0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
aab0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
aac0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
aad0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
aae0: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
aaf0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
ab00: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
ab10: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
ab20: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
ab30: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
ab40: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
ab50: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
ab60: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
ab70: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
ab80: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
ab90: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
aba0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
abb0: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
abc0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
abd0: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
abe0: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
abf0: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
ac00: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ac10: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
ac20: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
ac30: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
ac40: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
ac50: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
ac60: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
ac70: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
ac80: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
ac90: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
aca0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
acb0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
acc0: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
acd0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ace0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
acf0: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
ad00: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
ad10: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
ad20: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
ad30: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
ad40: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
ad50: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
ad60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
ad70: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
ad80: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
ad90: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
ada0: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
adb0: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
adc0: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
add0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
ade0: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
adf0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
ae00: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
ae10: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
ae20: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
ae30: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
ae40: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
ae50: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
ae60: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ae70: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ae80: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
ae90: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
aea0: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
aeb0: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
aec0: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
aed0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
aee0: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
aef0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
af00: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
af10: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
af20: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
af30: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
af40: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
af50: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
af60: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
af70: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
af80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
af90: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
afa0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
afb0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
afc0: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
afd0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
afe0: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
aff0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
b000: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
b010: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
b020: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
b030: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
b040: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
b050: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
b060: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
b070: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
b080: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
b090: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
b0a0: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
b0b0: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
b0c0: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63  >pFunc;.  }..  c
b0d0: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
b0e0: 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64  _Null;.  ctx.s.d
b0f0: 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e  b = db;.  ctx.s.
b100: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
b110: 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a  s.zMalloc = 0;..
b120: 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
b130: 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
b140: 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
b150: 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
b160: 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20   ** the pointer 
b170: 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63  to ctx.s so in c
b180: 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
b190: 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20  ction can use.  
b1a0: 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  ** the already a
b1b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
b1c0: 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
b1d0: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e  ating a new one.
b1e0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
b1f0: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e  dbeMemMove(&ctx.
b200: 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53  s, pOut);.  MemS
b210: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
b220: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
b230: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
b240: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
b250: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
b260: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
b270: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
b280: 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
b290: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
b2a0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
b2b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b2c0: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
b2d0: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
b2e0: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
b2f0: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
b300: 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f    }.  db->lastRo
b310: 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
b320: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
b330: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
b340: 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
b350: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
b360: 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  .  lastRowid = d
b370: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20  b->lastRowid;.. 
b380: 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c   /* If any auxil
b390: 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69  iary data functi
b3a0: 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61  ons have been ca
b3b0: 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65  lled by this use
b3c0: 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a  r function,.  **
b3d0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c   immediately cal
b3e0: 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  l the destructor
b3f0: 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61   for any non-sta
b400: 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f  tic values..  */
b410: 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65  .  if( ctx.pVdbe
b420: 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  Func ){.    sqli
b430: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
b440: 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75  Data(ctx.pVdbeFu
b450: 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  nc, pOp->p1);.  
b460: 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46    pOp->p4.pVdbeF
b470: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
b480: 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  unc;.    pOp->p4
b490: 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55  type = P4_VDBEFU
b4a0: 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64  NC;.  }..  if( d
b4b0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
b4c0: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
b4d0: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
b4e0: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
b4f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b500: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
b510: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
b520: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
b530: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
b540: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
b550: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
b560: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
b570: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
b580: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
b590: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
b5a0: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
b5b0: 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
b5c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
b5d0: 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
b5e0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b5f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
b600: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
b610: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
b620: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
b630: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
b640: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
b650: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
b660: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
b670: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
b680: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
b690: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
b6a0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
b6b0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
b6c0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
b6d0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
b6e0: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
b6f0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
b700: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
b710: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
b720: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
b730: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
b740: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
b750: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
b760: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
b770: 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54   }..#if 0.  /* T
b780: 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66  he app-defined f
b790: 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65  unction has done
b7a0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b7b0: 61 73 20 63 61 75 73 65 64 20 74 68 69 73 0a 20  as caused this. 
b7c0: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f   ** statement to
b7d0: 20 65 78 70 69 72 65 2e 20 20 28 50 65 72 68 61   expire.  (Perha
b7e0: 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ps the function 
b7f0: 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65  called sqlite3_e
b800: 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20  xec().  ** with 
b810: 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  a CREATE TABLE s
b820: 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a  tatement.).  */.
b830: 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
b840: 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41   ) rc = SQLITE_A
b850: 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  BORT;.#endif..  
b860: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b870: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
b880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b890: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b8a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b8b0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
b8c0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b8d0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
b8e0: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
b8f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b900: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b910: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b920: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b930: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b940: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b950: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b960: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
b970: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
b980: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b990: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
b9a0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b9b0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b9c0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b9d0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b9e0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b9f0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ba00: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ba10: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ba20: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
ba30: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ba40: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
ba50: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
ba60: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
ba70: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
ba80: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
ba90: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
baa0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
bab0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
bac0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
bad0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
bae0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
baf0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
bb00: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
bb10: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
bb20: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
bb30: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
bb40: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
bb50: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
bb60: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
bb70: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
bb80: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
bb90: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
bba0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
bbb0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
bbc0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bbd0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bbe0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bbf0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bc00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
bc10: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
bc20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bc30: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
bc40: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
bc50: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
bc70: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
bc80: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bc90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
bca0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
bcb0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bcc0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
bcd0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bce0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
bcf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bd00: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
bd10: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bd20: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
bd30: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
bd40: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
bd50: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bd60: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
bd70: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
bd80: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bd90: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
bda0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
bdb0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
bdc0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
bdd0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
bde0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
bdf0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
be00: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
be10: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
be20: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
be30: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
be40: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
be50: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
be60: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
be70: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
be80: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
be90: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
bea0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
beb0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
bec0: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
bed0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
bee0: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
bef0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
bf00: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
bf10: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
bf20: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
bf30: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
bf40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
bf50: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
bf60: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
bf70: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
bf80: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
bf90: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
bfa0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
bfb0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
bfc0: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
bfd0: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
bfe0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
bff0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
c000: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
c010: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
c020: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
c030: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
c040: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
c050: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
c060: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c070: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
c080: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
c090: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
c0a0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
c0b0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
c0c0: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
c0d0: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
c0e0: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
c0f0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
c100: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
c110: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
c120: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
c130: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
c140: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
c150: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c160: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
c170: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c180: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
c190: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
c1a0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
c1b0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
c1c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c1d0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
c1e0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
c1f0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
c200: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
c210: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
c220: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
c230: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
c240: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
c250: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
c260: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c270: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
c280: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
c290: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
c2a0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
c2b0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
c2c0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
c2d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c2e0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
c2f0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
c300: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c310: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c320: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
c330: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
c340: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
c350: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
c360: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
c370: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
c380: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
c390: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
c3a0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
c3b0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
c3c0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
c3d0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
c3e0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
c3f0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
c400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
c410: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
c420: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c430: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
c440: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c450: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
c460: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
c470: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c480: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
c490: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
c4a0: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
c4b0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
c4c0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
c4d0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
c4e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
c4f0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
c500: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
c510: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c520: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
c530: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c540: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
c550: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c560: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
c570: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
c580: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
c590: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
c5a0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
c5b0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
c5c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
c5d0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
c5e0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
c5f0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
c600: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
c610: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
c620: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
c630: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
c640: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
c650: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
c660: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
c670: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
c680: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
c690: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
c6a0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
c6b0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
c6c0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
c6d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c6e0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c6f0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c700: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c710: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c720: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
c730: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
c740: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c750: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
c760: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c770: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
c780: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c790: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c7a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c7b0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c7c0: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c7d0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c7e0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c7f0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c800: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c810: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c820: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c830: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c840: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c850: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c860: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c870: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c880: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c890: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c8a0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c8b0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c8c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c8d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c8e0: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c8f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c900: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c910: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c920: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c930: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c940: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c950: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c960: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c970: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c980: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c990: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c9a0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c9b0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c9c0: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c9d0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c9e0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c9f0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
ca00: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
ca10: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
ca20: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
ca30: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
ca40: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
ca50: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
ca60: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
ca70: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
ca80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
ca90: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
caa0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
cab0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cac0: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
cad0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
cae0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
caf0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
cb00: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
cb10: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
cb20: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
cb30: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
cb40: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
cb50: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
cb60: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
cb70: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cb80: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
cb90: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cba0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cbb0: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cbd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
cbe0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
cbf0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cc00: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
cc10: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
cc20: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
cc30: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
cc40: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
cc50: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
cc60: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
cc70: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
cc80: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
cc90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cca0: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
ccb0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
ccc0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ccd0: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
cce0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
ccf0: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
cd00: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
cd10: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
cd20: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
cd30: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
cd40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cd50: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
cd60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cd70: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cd80: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cd90: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
cda0: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
cdb0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
cdc0: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
cdd0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
cde0: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
cdf0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
ce00: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
ce10: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
ce20: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
ce30: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
ce40: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
ce50: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
ce60: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
ce70: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
ce80: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
ce90: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cea0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ceb0: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
cee0: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
cef0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
cf00: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
cf10: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
cf20: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
cf30: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
cf40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cf50: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cf60: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
cf70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cf80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cf90: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
cfa0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
cfb0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
cfc0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
cfd0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
cfe0: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
cff0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
d000: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
d010: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
d020: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
d030: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
d040: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
d050: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
d060: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
d070: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
d080: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
d090: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
d0a0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
d0b0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
d0c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d0d0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
d0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d0f0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
d100: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d110: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d120: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d130: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
d140: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
d150: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
d160: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d170: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
d180: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
d190: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
d1a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
d1b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
d1c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
d1d0: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
d1e0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d1f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d200: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
d210: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
d220: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
d230: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
d240: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
d250: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
d260: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
d270: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
d280: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
d290: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
d2a0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
d2b0: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
d2c0: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
d2d0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
d2e0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
d2f0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d300: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d310: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d320: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d330: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
d340: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
d350: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d360: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
d370: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d380: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
d390: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d3a0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
d3b0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d3c0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
d3d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
d3e0: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
d3f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
d400: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
d410: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
d420: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
d430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d440: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
d450: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
d460: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d470: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
d480: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d490: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
d4a0: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
d4b0: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
d4c0: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
d4d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
d4e0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
d4f0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
d500: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
d510: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
d520: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
d530: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
d540: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d550: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
d560: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
d570: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
d580: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d590: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
d5a0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
d5b0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
d5c0: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
d5d0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
d5e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
d5f0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
d600: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
d610: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
d620: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
d630: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
d640: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
d650: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
d660: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
d670: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
d680: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d690: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
d6a0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
d6b0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
d6c0: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
d6d0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
d6e0: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
d6f0: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
d700: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
d710: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
d720: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
d730: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
d740: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
d750: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
d760: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
d770: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
d780: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
d790: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
d7a0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
d7b0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
d7c0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
d7d0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
d7e0: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
d7f0: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
d800: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
d810: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
d820: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
d830: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
d840: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d850: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d860: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d870: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d880: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d890: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d8a0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d8b0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d8c0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d8d0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d8e0: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d8f0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d900: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d910: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d920: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d930: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d940: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d950: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d960: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d970: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d980: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d990: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d9a0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d9b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d9c0: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d9d0: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d9e0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d9f0: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
da00: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
da10: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
da20: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
da30: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
da40: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
da50: 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20  E_NULLEQ bit is 
da60: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20  set in P5, then 
da70: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
da80: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71  considered.** eq
da90: 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68  ual to one anoth
daa0: 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61  er, provided tha
dab0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61  t they do not ha
dac0: 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65  ve their MEM_Cle
dad0: 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e  ared.** bit set.
dae0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
daf0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
db00: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
db10: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
db20: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
db30: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
db40: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
db50: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
db60: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
db70: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
db80: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
db90: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
dba0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
dbb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
dbc0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
dbd0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
dbe0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
dbf0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
dc00: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
dc10: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
dc20: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
dc30: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
dc40: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
dc50: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
dc60: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
dc70: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
dc80: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
dc90: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
dca0: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
dcb0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
dcc0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
dcd0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
dce0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
dcf0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
dd00: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
dd10: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
dd20: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
dd30: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
dd40: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
dd50: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
dd60: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
dd70: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
dd80: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
dd90: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
dda0: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
ddb0: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
ddc0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ddd0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
dde0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
ddf0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
de00: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
de10: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
de30: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
de40: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
de50: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
de60: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
de70: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
de80: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
de90: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
dea0: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
deb0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dec0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ded0: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
dee0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
def0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
df00: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
df10: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
df20: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
df30: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
df40: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
df50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
df60: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
df70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
df80: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
df90: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
dfa0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
dfb0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
dfc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
dfd0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
dfe0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
dff0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e000: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e010: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e020: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e030: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e040: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
e050: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e060: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e070: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e080: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e090: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e0a0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e0b0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
e0c0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
e0d0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
e0e0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e0f0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e100: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e110: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e120: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e130: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
e140: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
e150: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e160: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e170: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e180: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e190: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
e1a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
e1b0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
e1c0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
e1d0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e1e0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e1f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e200: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e210: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
e220: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
e230: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e240: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
e250: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e260: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
e270: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e280: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
e290: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
e2a0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e2b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
e2c0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e2d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e2f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
e300: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e310: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
e320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e330: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
e340: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e350: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
e360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e370: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
e380: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
e390: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
e3a0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
e3b0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
e3c0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
e3d0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
e3e0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
e3f0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
e400: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
e410: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
e420: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e430: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e440: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
e450: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
e460: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
e470: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
e480: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
e490: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
e4a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e4b0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
e4c0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
e4d0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
e4e0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
e4f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
e500: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
e510: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e520: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
e530: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e540: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
e550: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
e560: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
e570: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e580: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
e590: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
e5a0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
e5b0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
e5c0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
e5d0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
e5e0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
e5f0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
e600: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
e610: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
e620: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
e630: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
e640: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
e650: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e660: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
e670: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
e680: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
e690: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
e6a0: 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s1&MEM_Null)!=0.
e6b0: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
e6c0: 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
e6d0: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
e6e0: 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
e6f0: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
e700: 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52    res = 0;  /* R
e710: 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c  esults are equal
e720: 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
e730: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31  .        res = 1
e740: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
e750: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
e760: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
e770: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
e780: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
e790: 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
e7a0: 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
e7b0: 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
e7c0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e7d0: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
e7e0: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
e7f0: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
e800: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e810: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
e820: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
e830: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
e840: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
e850: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
e860: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
e870: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e880: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
e890: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
e8a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
e8b0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
e8c0: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
e8d0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
e8e0: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
e8f0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
e900: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
e910: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
e920: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
e930: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e940: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
e950: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
e960: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
e970: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
e980: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
e990: 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
e9a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
e9b0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
e9c0: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70  ding);.      app
e9d0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
e9e0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
e9f0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ing);.      if( 
ea00: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
ea10: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ea20: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
ea30: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
ea40: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
ea50: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
ea60: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
ea70: 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61  (pIn1);.    Expa
ea80: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
ea90: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
eaa0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
eab0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
eac0: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
ead0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
eae0: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
eaf0: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
eb00: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
eb10: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
eb20: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
eb30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
eb40: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
eb50: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
eb60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
eb70: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
eb80: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
eb90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
eba0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
ebb0: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
ebc0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
ebd0: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
ebe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
ebf0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
ec00: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
ec10: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
ec20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
ec30: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
ec40: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
ec50: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
ec60: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
ec70: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
ec80: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
ec90: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
eca0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  pOut);.  }else i
ecb0: 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
ecc0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
ecd0: 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
ece0: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
ecf0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
ed00: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
ed10: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49  gisters. */.  pI
ed20: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n1->flags = (pIn
ed30: 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  1->flags&~MEM_Ty
ed40: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
ed50: 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  1&MEM_TypeMask);
ed60: 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
ed70: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn3->flags&~M
ed80: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
ed90: 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d  flags3&MEM_TypeM
eda0: 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ask);.  break;.}
edb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
edc0: 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
edd0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
ede0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
edf0: 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
ee00: 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
ee10: 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
ee20: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
ee30: 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
ee40: 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
ee50: 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
ee60: 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
ee70: 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
ee80: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
ee90: 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
eea0: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
eeb0: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
eec0: 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
eed0: 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
eee0: 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
eef0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  e..*/.case OP_Pe
ef00: 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
ef10: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
ef20: 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
ef30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
ef40: 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65  ->p4.ai );.  aPe
ef50: 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  rmute = pOp->p4.
ef60: 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ai;.  break;.}..
ef70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
ef80: 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
ef90: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
efa0: 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72  two vectors of r
efb0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
efc0: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
efd0: 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  ) (call this.** 
efe0: 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20  vector "A") and 
eff0: 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
f000: 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
f010: 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
f020: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
f030: 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
f040: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
f050: 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
f060: 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
f070: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
f080: 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
f090: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72   order of compar
f0a0: 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72  ison is.** deter
f0b0: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73  mined by the mos
f0c0: 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d  t recent OP_Perm
f0d0: 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  utation operator
f0e0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46  .  If the.** OPF
f0f0: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f100: 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
f110: 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70  egister are comp
f120: 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69  ared in sequenti
f130: 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a  al.** order..**.
f140: 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
f150: 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
f160: 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
f170: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
f180: 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
f190: 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
f1a0: 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
f1b0: 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
f1c0: 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
f1d0: 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
f1e0: 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
f1f0: 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
f200: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
f210: 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
f220: 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
f230: 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
f240: 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
f250: 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
f260: 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
f270: 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
f280: 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
f290: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
f2a0: 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
f2b0: 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
f2c0: 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
f2d0: 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
f2e0: 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
f2f0: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
f300: 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
f310: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
f320: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
f330: 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
f340: 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
f350: 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
f360: 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
f370: 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
f380: 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  r */..  if( (pOp
f390: 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
f3a0: 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72  RMUTE)==0 ) aPer
f3b0: 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20  mute = 0;.  n = 
f3c0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
f3d0: 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
f3e0: 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
f3f0: 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
f400: 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
f410: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
f420: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
f430: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ;.#if SQLITE_DEB
f440: 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
f450: 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
f460: 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
f470: 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
f480: 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
f490: 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
f4a0: 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
f4b0: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
f4c0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
f4d0: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
f4e0: 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d  & p2+mx<=p->nMem
f4f0: 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
f500: 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
f510: 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  && p1+n<=p->nMem
f520: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
f530: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
f540: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d  p->nMem+1 );.  }
f550: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f560: 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72  E_DEBUG */.  for
f570: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
f580: 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d  .    idx = aPerm
f590: 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69  ute ? aPermute[i
f5a0: 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72  ] : i;.    asser
f5b0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
f5c0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a  Mem[p1+idx]) );.
f5d0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
f5e0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b  sValid(&aMem[p2+
f5f0: 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  idx]) );.    REG
f600: 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69  ISTER_TRACE(p1+i
f610: 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78  dx, &aMem[p1+idx
f620: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
f630: 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26  _TRACE(p2+idx, &
f640: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20  aMem[p2+idx]);. 
f650: 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65     assert( i<pKe
f660: 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b  yInfo->nField );
f670: 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
f680: 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
f690: 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
f6a0: 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
f6b0: 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
f6c0: 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
f6d0: 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
f6e0: 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
f6f0: 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
f700: 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
f710: 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
f720: 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
f730: 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
f740: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
f750: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
f760: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f770: 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
f780: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
f790: 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
f7a0: 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
f7b0: 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
f7c0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
f7d0: 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
f7e0: 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
f7f0: 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
f800: 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
f810: 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
f820: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
f830: 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
f840: 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
f850: 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
f860: 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
f870: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
f880: 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
f890: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
f8a0: 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p1 - 1;.  }els
f8b0: 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d  e if( iCompare==
f8c0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
f8d0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
f8e0: 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  se{.    pc = pOp
f8f0: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p3 - 1;.  }.  
f900: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f910: 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
f920: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
f930: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
f940: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
f950: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f960: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
f970: 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
f980: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
f990: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f9a0: 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
f9b0: 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
f9c0: 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
f9d0: 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
f9e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
f9f0: 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
fa00: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
fa10: 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
fa20: 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
fa30: 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
fa40: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
fa50: 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
fa60: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
fa70: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
fa80: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
fa90: 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
faa0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
fab0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
fac0: 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
fad0: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
fae0: 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
faf0: 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
fb00: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
fb10: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
fb20: 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
fb30: 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
fb40: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
fb50: 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
fb60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fb70: 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
fb80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
fb90: 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
fba0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fbb0: 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
fbc0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
fbd0: 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
fbe0: 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
fbf0: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
fc00: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
fc10: 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
fc20: 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
fc30: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
fc40: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
fc50: 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
fc60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
fc70: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
fc80: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
fc90: 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
fca0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
fcb0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
fcc0: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
fcd0: 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
fce0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
fcf0: 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
fd00: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fd10: 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
fd20: 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
fd30: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
fd40: 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
fd50: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
fd60: 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
fd70: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
fd80: 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
fd90: 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
fda0: 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
fdb0: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
fdc0: 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
fdd0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
fde0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fdf0: 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
fe00: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
fe10: 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
fe20: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
fe30: 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
fe40: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
fe50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
fe60: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
fe70: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
fe80: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
fe90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
fea0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
feb0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
fec0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
fed0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fee0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
fef0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
ff00: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
ff10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ff20: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
ff30: 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
ff40: 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
ff50: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
ff60: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
ff70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ff80: 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
ff90: 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
ffa0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
ffb0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
ffc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ffd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ffe0: 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
fff0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
10000 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
10010 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10020 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
10030 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10040 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
10050 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10060 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
10070 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10080 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
10090 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
100a0 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
100b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
100c0 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
100d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
100e0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
100f0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
10100 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
10110 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
10120 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
10130 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
10140 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
10150 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
10160 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
10170 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
10180 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
10190 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
101a0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
101b0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
101c0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
101d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
101e0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
101f0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10200 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10210 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
10220 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10230 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
10240 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
10250 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
10260 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64  pOut, ~sqlite3Vd
10270 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10280 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10290 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e  }../* Opcode: On
102a0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
102b0 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f 50  *.** Check if OP
102c0 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69 73  _Once flag P1 is
102d0 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d   set. If so, jum
102e0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
102f0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a   P2. Otherwise,.
10300 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  ** set the flag 
10310 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
10320 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
10330 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
10340 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
10350 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
10360 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
10370 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c  p->p1<p->nOnceFl
10380 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  ag );.  if( p->a
10390 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
103a0 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  ] ){.    pc = pO
103b0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
103c0 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
103d0 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
103e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
103f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
10400 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
10410 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
10420 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10430 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
10440 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
10450 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
10460 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
10470 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
10480 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
10490 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
104a0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
104b0 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  ump if P3 is non
104c0 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  -zero..*/./* Opc
104d0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
104e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
104f0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
10500 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10510 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
10520 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10530 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
10540 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
10550 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
10560 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
10570 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
10580 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
10590 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a   jump if P3 is z
105a0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
105b0 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
105c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
105d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
105e0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
105f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
10600 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
10610 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10620 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
10630 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10640 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
10650 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
10660 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
10670 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
10680 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
10690 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
106a0 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
106b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
106c0 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
106d0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
106e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
106f0 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
10700 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b  ;.  }.  if( c ){
10710 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10720 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
10730 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10740 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  IsNull P1 P2 * *
10750 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10760 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10770 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10780 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
10790 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
107a0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
107b0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
107c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
107d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
107e0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
107f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10800 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)!=0 ){.    pc
10810 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
10820 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10830 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
10840 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
10850 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
10860 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
10870 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
10880 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
10890 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
108a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
108b0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
108c0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
108d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
108e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
108f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10900 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
10910 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
10920 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
10930 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
10940 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
10950 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  4 P5.**.** Inter
10960 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
10970 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
10980 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
10990 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
109a0 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
109b0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
109c0 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
109d0 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
109e0 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
109f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10a00 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
10a10 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
10a20 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
10a30 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
10a40 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
10a50 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
10a60 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
10a70 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10a80 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
10a90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
10aa0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
10ab0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
10ac0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
10ad0 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
10ae0 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
10af0 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
10b00 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
10b10 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
10b20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
10b30 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
10b40 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
10b50 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
10b60 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
10b70 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
10b80 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
10b90 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
10ba0 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
10bb0 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
10bc0 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
10bd0 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
10be0 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
10bf0 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
10c00 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
10c10 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
10c20 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
10c30 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
10c40 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
10c50 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
10c60 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
10c70 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
10c80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
10c90 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
10ca0 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
10cb0 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
10cc0 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
10cd0 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
10ce0 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
10cf0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
10d00 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
10d10 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
10d20 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
10d30 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
10d40 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
10d50 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
10d60 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
10d70 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
10d80 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
10d90 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
10da0 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
10db0 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
10dc0 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53  {.  u32 payloadS
10dd0 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ize;   /* Number
10de0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
10df0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
10e00 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20   payloadSize64; 
10e10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
10e20 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10e30 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
10e40 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76           /* P1 v
10e50 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
10e60 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  de */.  int p2; 
10e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
10e80 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
10e90 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
10ea0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
10eb0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
10ec0 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  or */.  char *zR
10ed0 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ec;        /* Po
10ee0 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  inter to complet
10ef0 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f  e record-data */
10f00 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
10f10 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
10f20 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
10f30 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20  32 *aType;      
10f40 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f    /* aType[i] ho
10f50 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  lds the numeric 
10f60 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68  type of the i-th
10f70 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
10f80 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
10f90 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
10fa0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
10fb0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
10fc0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
10fd0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
10fe0 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69   /* number of fi
10ff0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
11000 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  rd */.  int len;
11010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11020 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11030 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
11040 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
11050 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
11060 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
11070 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72  ounter */.  char
11080 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *zData;       /
11090 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
110a0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
110b0 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  ed */.  Mem *pDe
110c0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
110d0 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
110e0 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
110f0 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
11100 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
11110 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
11120 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
11130 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20   */.  u8 *zIdx; 
11140 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11150 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f  x into header */
11160 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  .  u8 *zEndHdr; 
11170 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
11180 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
11190 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
111a0 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
111b0 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
111c0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
111d0 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
111e0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
111f0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11200 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
11210 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  ield */.  int sz
11220 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Hdr;         /* 
11230 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  Size of the head
11240 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74  er size field at
11250 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64   start of record
11260 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b   */.  int avail;
11270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11280 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
11290 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
112a0 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
112b0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
112c0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
112d0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
112e0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
112f0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
11300 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
11310 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f  r */...  p1 = pO
11320 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
11330 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b  p->p2;.  pC = 0;
11340 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
11350 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
11360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
11370 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
11380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
11390 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
113a0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
113b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
113c0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
113d0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
113e0 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
113f0 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
11400 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
11410 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
11420 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
11430 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
11440 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
11450 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
11460 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
11470 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
11480 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
11490 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
114a0 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
114b0 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
114c0 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
114d0 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
114e0 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
114f0 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
11500 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
11510 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
11520 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
11530 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
11540 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
11550 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
11560 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
11570 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
11580 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
11590 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
115a0 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
115b0 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
115c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
115d0 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
115e0 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
115f0 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
11600 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
11610 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
11620 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
11630 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
11640 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
11650 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
11660 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
11670 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11680 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
11690 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
116a0 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
116b0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
116c0 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
116d0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
116e0 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
116f0 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
11700 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
11710 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
11720 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
11730 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
11740 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
11750 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
11760 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
11770 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
11780 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
11790 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
117a0 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
117b0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
117c0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
117d0 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
117e0 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
117f0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
11800 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
11810 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
11820 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
11830 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
11840 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
11850 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
11860 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
11870 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
11880 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
11890 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54  ITE_OK );   /* T
118a0 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
118b0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
118c0 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
118d0 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
118e0 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
118f0 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
11900 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
11910 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f  e.      ** paylo
11920 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
11930 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
11940 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
11950 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61  o be.      ** la
11960 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
11970 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  s. */.      asse
11980 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
11990 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
119a0 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
119b0 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
119c0 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
119d0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
119e0 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  64;.    }else{. 
119f0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
11a00 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
11a10 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
11a20 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  .      VVA_ONLY(
11a30 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
11a40 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
11a50 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  , &payloadSize);
11a60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
11a70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
11a80 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
11a90 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
11aa0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
11ab0 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73 65 75   ALWAYS(pC->pseu
11ac0 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20 29 7b  doTableReg>0) ){
11ad0 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65  .    pReg = &aMe
11ae0 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
11af0 65 52 65 67 5d 3b 0a 20 20 20 20 69 66 28 20 70  eReg];.    if( p
11b00 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 29  C->multiPseudo )
11b10 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
11b20 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
11b30 79 28 70 44 65 73 74 2c 20 70 52 65 67 2b 70 32  y(pDest, pReg+p2
11b40 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
11b50 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
11b60 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ze(pDest);.     
11b70 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
11b80 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  out;.    }.    a
11b90 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
11ba0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
11bb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11bc0 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
11bd0 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
11be0 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
11bf0 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a  zRec = pReg->z;.
11c00 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
11c10 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f  tus = (pOp->p5&O
11c20 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
11c30 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20  ) ? CACHE_STALE 
11c40 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  : p->cacheCtr;. 
11c50 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f     assert( paylo
11c60 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65  adSize==0 || zRe
11c70 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  c!=0 );.  }else{
11c80 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72  .    /* Consider
11c90 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e   the row to be N
11ca0 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f  ULL */.    paylo
11cb0 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a  adSize = 0;.  }.
11cc0 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
11cd0 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
11ce0 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
11cf0 4c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61 70  L.  This can hap
11d00 70 65 6e 20 62 65 63 61 75 73 65 20 6f 66 0a 20  pen because of. 
11d10 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62   ** nullRow or b
11d20 65 63 61 75 73 65 20 6f 66 20 61 20 63 6f 72 72  ecause of a corr
11d30 75 70 74 20 64 61 74 61 62 61 73 65 2e 20 2a 2f  upt database. */
11d40 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69  .  if( payloadSi
11d50 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d  ze==0 ){.    Mem
11d60 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
11d70 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
11d80 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11d90 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _out;.  }.  asse
11da0 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  rt( db->aLimit[S
11db0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
11dc0 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  TH]>=0 );.  if( 
11dd0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75  payloadSize > (u
11de0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
11df0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
11e00 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
11e10 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e  oo_big;.  }..  n
11e20 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
11e30 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32  ld;.  assert( p2
11e40 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a  <nField );..  /*
11e50 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
11e60 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72  the table header
11e70 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  .  Store the res
11e80 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73  ults of the pars
11e90 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20  e.  ** into the 
11ea0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61  record header ca
11eb0 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  che fields of th
11ec0 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
11ed0 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79   aType = pC->aTy
11ee0 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  pe;.  if( pC->ca
11ef0 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
11f00 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f  cheCtr ){.    aO
11f10 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66  ffset = pC->aOff
11f20 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  set;.  }else{.  
11f30 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b    assert(aType);
11f40 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a  .    avail = 0;.
11f50 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20      pC->aOffset 
11f60 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79  = aOffset = &aTy
11f70 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  pe[nField];.    
11f80 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
11f90 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  = payloadSize;. 
11fa0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
11fb0 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
11fc0 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65  ;..    /* Figure
11fd0 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79   out how many by
11fe0 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68  tes are in the h
11ff0 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28  eader */.    if(
12000 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a   zRec ){.      z
12010 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20  Data = zRec;.   
12020 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
12030 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
12040 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
12050 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
12060 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
12070 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
12080 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12090 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
120a0 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74  )sqlite3BtreeDat
120b0 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
120c0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
120d0 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65       /* If KeyFe
120e0 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28  tch()/DataFetch(
120f0 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74  ) managed to get
12100 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c   the entire payl
12110 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61  oad,.      ** sa
12120 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  ve the payload i
12130 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63  n the pC->aRow c
12140 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c  ache.  That will
12150 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20   save us from.  
12160 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f      ** having to
12170 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c   make additional
12180 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20   calls to fetch 
12190 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74  the content port
121a0 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20  ion of.      ** 
121b0 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
121c0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
121d0 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20  t( avail>=0 );. 
121e0 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64       if( payload
121f0 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
12200 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52  il ){.        zR
12210 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20  ec = zData;.    
12220 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
12230 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20  u8*)zData;.     
12240 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12250 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
12260 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12270 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
12280 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20   assert is true 
12290 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 65 78 63  in all cases exc
122a0 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20  ept when.    ** 
122b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
122c0 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75  e has been corru
122d0 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e  pted externally.
122e0 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72  .    **    asser
122f0 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76  t( zRec!=0 || av
12300 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65  ail>=payloadSize
12310 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20   || avail>=9 ); 
12320 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67  */.    szHdr = g
12330 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29  etVarint32((u8*)
12340 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a  zData, offset);.
12350 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
12360 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
12370 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
12380 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
12390 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
123a0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
123b0 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
123c0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
123d0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
123e0 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
123f0 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
12400 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
12410 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
12420 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
12430 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
12440 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
12450 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
12460 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
12470 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
12480 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
12490 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
124a0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
124b0 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
124c0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
124d0 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
124e0 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
124f0 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
12500 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
12510 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
12520 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
12530 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
12540 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
12550 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
12560 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  07 ){.      rc =
12570 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
12580 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
12590 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
125a0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f      }..    /* Co
125b0 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65  mpute in len the
125c0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
125d0 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64   of data we need
125e0 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65   to read in orde
125f0 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20  r.    ** to get 
12600 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75  nField type valu
12610 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61  es.  offset is a
12620 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
12630 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20   this.  But.    
12640 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20  ** nField might 
12650 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79  be significantly
12660 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74   less than the t
12670 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  rue number of co
12680 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20  lumns.    ** in 
12690 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69  the table, and i
126a0 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e  n that case, 5*n
126b0 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65  Field+3 might be
126c0 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66   smaller than of
126d0 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20  fset..    ** We 
126e0 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65  want to minimize
126f0 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f   len in order to
12700 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20   limit the size 
12710 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20  of the memory.  
12720 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c    ** allocation,
12730 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61   especially if a
12740 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12750 65 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65  e file has cause
12760 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20  d offset.    ** 
12770 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e  to be oversized.
12780 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74   Offset is limit
12790 65 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76  ed to 98307 abov
127a0 65 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69  e.  But 98307 mi
127b0 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  ght.    ** still
127c0 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d   exceed Robson m
127d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
127e0 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20   limits on some 
127f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a  configurations..
12800 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d      ** On system
12810 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f  s that cannot to
12820 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d  lerate large mem
12830 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
12840 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20   nField*5+3.    
12850 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62  ** will likely b
12860 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73  e much smaller s
12870 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c  ince nField will
12880 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20   likely be less 
12890 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f  than.    ** 20 o
128a0 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75  r so.  This insu
128b0 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20  res that Robson 
128c0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
128d0 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20  n limits are.   
128e0 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64   ** not exceeded
128f0 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70   even for corrup
12900 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  t database files
12910 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e  ..    */.    len
12920 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b   = nField*5 + 3;
12930 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28  .    if( len > (
12940 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e  int)offset ) len
12950 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a   = (int)offset;.
12960 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46  .    /* The KeyF
12970 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65  etch() or DataFe
12980 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20  tch() above are 
12990 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65  fast and will ge
129a0 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20  t the entire.   
129b0 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
129c0 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e  r in most cases.
129d0 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20    But they will 
129e0 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20  fail to get the 
129f0 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20  complete.    ** 
12a00 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66  record header if
12a10 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
12a20 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20  er does not fit 
12a30 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  on a single page
12a40 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42  .    ** in the B
12a50 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61  -Tree.  When tha
12a60 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73  t happens, use s
12a70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
12a80 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20  mBtree() to.    
12a90 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63  ** acquire the c
12aa0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74  omplete header t
12ab0 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ext..    */.    
12ac0 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61  if( !zRec && ava
12ad0 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20  il<len ){.      
12ae0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a  sMem.flags = 0;.
12af0 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20        sMem.db = 
12b00 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
12b10 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
12b20 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
12b30 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
12b40 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
12b50 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
12b60 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
12b70 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
12b80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
12b90 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
12ba0 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72     }.    zEndHdr
12bb0 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
12bc0 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d  len];.    zIdx =
12bd0 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a   (u8 *)&zData[sz
12be0 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63  Hdr];..    /* Sc
12bf0 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e  an the header an
12c00 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c  d use it to fill
12c10 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20   in the aType[] 
12c20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20  and aOffset[].  
12c30 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54    ** arrays.  aT
12c40 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  ype[i] will cont
12c50 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74  ain the type int
12c60 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74  eger for the i-t
12c70 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20  h.    ** column 
12c80 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77  and aOffset[i] w
12c90 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
12ca0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
12cb0 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a  beginning.    **
12cc0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
12cd0 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  o the start of t
12ce0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
12cf0 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  i-th column.    
12d00 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
12d10 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
12d20 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
12d30 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
12d40 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f    aOffset[i] = o
12d50 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 69  ffset;.        i
12d60 66 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20  f( zIdx[0]<0x80 
12d70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d  ){.          t =
12d80 20 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20   zIdx[0];.      
12d90 20 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20      zIdx++;.    
12da0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12db0 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c       zIdx += sql
12dc0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
12dd0 7a 49 64 78 2c 20 26 74 29 3b 0a 20 20 20 20 20  zIdx, &t);.     
12de0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79     }.        aTy
12df0 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
12e00 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
12e10 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12e20 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
12e30 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69    offset += szFi
12e40 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28  eld;.        if(
12e50 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20   offset<szField 
12e60 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f  ){  /* True if o
12e70 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20  ffset overflows 
12e80 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64  */.          zId
12e90 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b  x = &zEndHdr[1];
12ea0 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49    /* Forces SQLI
12eb0 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72  TE_CORRUPT retur
12ec0 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20  n below */.     
12ed0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12ee0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
12ef0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  e{.        /* If
12f00 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20   i is less that 
12f10 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65  nField, then the
12f20 72 65 20 61 72 65 20 66 65 77 65 72 20 66 69 65  re are fewer fie
12f30 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
12f40 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
12f50 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
12f60 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
12f70 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
12f80 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
12f90 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
12fa0 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
12fb0 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
12fc0 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
12fd0 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
12fe0 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
12ff0 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
13000 74 6f 72 65 20 74 68 65 20 64 65 66 61 75 6c 74  tore the default
13010 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 2a   value.        *
13020 2a 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  * for the column
13030 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65   instead of dese
13040 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75  rializing a valu
13050 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
13060 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
13070 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13080 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
13090 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
130a0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
130b0 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66  Mem);.    sMem.f
130c0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
130d0 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68  ..    /* If we h
130e0 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65  ave read more he
130f0 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77  ader data than w
13100 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  as contained in 
13110 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20  the header,.    
13120 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
13130 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13140 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
13150 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
13160 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f   the.    ** reco
13170 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e  rd, or if the en
13180 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
13190 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
131a0 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64  e before the end
131b0 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
131c0 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20  ecord (when all 
131d0 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c  fields present),
131e0 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65   then we must be
131f0 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a   dealing .    **
13200 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
13210 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f  database..    */
13220 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e  .    if( (zIdx >
13230 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66   zEndHdr) || (of
13240 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64 53 69  fset > payloadSi
13250 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  ze).         || 
13260 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
13270 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61  & offset!=payloa
13280 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  dSize) ){.      
13290 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
132a0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
132b0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
132c0 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
132d0 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75   /* Get the colu
132e0 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  mn information. 
132f0 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
13300 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
13310 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69   .  ** deseriali
13320 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f  ze the value fro
13330 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66  m the record. If
13340 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
13350 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20  zero,.  ** then 
13360 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
13370 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74  ough fields in t
13380 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74  he record to sat
13390 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65  isfy the.  ** re
133a0 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20  quest.  In this 
133b0 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61  case, set the va
133c0 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50  lue NULL or to P
133d0 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20  4 if P4 is.  ** 
133e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
133f0 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a  em object..  */.
13400 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32    if( aOffset[p2
13410 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ] ){.    assert(
13420 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13430 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  ;.    if( zRec )
13440 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
13450 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
13460 73 65 20 77 68 65 72 65 20 74 68 65 20 77 68 6f  se where the who
13470 6c 65 20 72 6f 77 20 66 69 74 73 20 6f 6e 20 61  le row fits on a
13480 20 73 69 6e 67 6c 65 20 70 61 67 65 20 2a 2f 0a   single page */.
13490 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
134a0 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  ease(pDest);.   
134b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
134c0 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
134d0 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
134e0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
134f0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
13500 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72        /* This br
13510 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
13520 79 20 77 68 65 6e 20 74 68 65 20 72 6f 77 20 6f  y when the row o
13530 76 65 72 66 6c 6f 77 73 20 6f 6e 74 6f 20 6d 75  verflows onto mu
13540 6c 74 69 70 6c 65 20 70 61 67 65 73 20 2a 2f 0a  ltiple pages */.
13550 20 20 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b        t = aType[
13560 70 32 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  p2];.      if( (
13570 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
13580 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
13590 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
135a0 30 0a 20 20 20 20 20 20 20 26 26 20 28 28 74 3e  0.       && ((t>
135b0 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
135c0 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
135d0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
135e0 21 3d 30 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  !=0).      ){.  
135f0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
13600 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
13610 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  or the typeof() 
13620 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72  function and for
13630 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
13640 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
13650 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
13660 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20  b.  So we might 
13670 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20  as well use.    
13680 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e      ** bogus con
13690 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
136a0 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74   reading content
136b0 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
136c0 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 20 20  L works.        
136d0 2a 2a 20 66 6f 72 20 74 65 78 74 20 61 6e 64 20  ** for text and 
136e0 62 6c 6f 62 20 61 6e 64 20 77 68 61 74 65 76 65  blob and whateve
136f0 72 20 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c  r is in the payl
13700 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69 61 62  oadSize64 variab
13710 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 69  le.        ** wi
13720 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72  ll work for ever
13730 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a  ything else. */.
13740 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13750 74 3c 31 32 20 3f 20 28 63 68 61 72 2a 29 26 70  t<12 ? (char*)&p
13760 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30  ayloadSize64 : 0
13770 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13780 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c         len = sql
13790 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
137a0 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
137b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
137c0 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
137d0 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
137e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
137f0 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
13800 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
13810 2c 20 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 0a  ,  pC->isIndex,.
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20       &sMem);.   
13850 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13860 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13870 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13880 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  mn_out;.        
13890 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
138a0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
138b0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
138c0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
138d0 2a 29 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73  *)zData, t, pDes
138e0 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
138f0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
13900 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
13910 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
13920 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
13930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13940 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
13950 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
13960 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
13970 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13980 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13990 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
139a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
139b0 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
139c0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
139d0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
139e0 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
139f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13a00 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
13a10 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
13a20 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
13a30 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
13a40 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
13a50 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
13a60 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
13a70 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
13a80 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
13a90 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
13aa0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
13ab0 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
13ac0 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
13ad0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
13ae0 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
13af0 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
13b00 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
13b10 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
13b20 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
13b30 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
13b40 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
13b50 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
13b60 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
13b70 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
13b80 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
13b90 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
13ba0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
13bb0 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
13bc0 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
13bd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13be0 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13bf0 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
13c00 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
13c10 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
13c20 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
13c30 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
13c40 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
13c50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13c60 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
13c70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
13c80 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
13c90 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
13ca0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
13cb0 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
13cc0 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
13cd0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
13ce0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
13cf0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
13d00 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
13d10 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
13d20 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
13d30 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
13d40 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
13d50 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
13d60 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
13d70 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
13d80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13d90 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
13da0 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
13db0 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
13dc0 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
13dd0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
13de0 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
13df0 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
13e00 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
13e10 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
13e20 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
13e30 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
13e40 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
13e50 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
13e60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
13e70 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
13e80 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
13e90 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
13ea0 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
13eb0 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
13ec0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
13ed0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
13ee0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
13ef0 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
13f00 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c  nity(pIn1, cAff,
13f10 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
13f20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
13f30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13f40 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
13f50 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
13f60 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
13f70 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
13f80 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
13f90 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
13fa0 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
13fb0 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
13fc0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
13fd0 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
13fe0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
13ff0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
14000 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
14010 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
14020 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
14030 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14040 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14050 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
14060 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14070 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14080 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14090 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
140a0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
140b0 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
140c0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
140d0 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
140e0 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
140f0 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
14100 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
14110 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
14120 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
14130 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
14140 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
14150 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
14160 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
14170 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
14180 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
14190 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
141a0 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
141b0 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
141c0 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
141d0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
141e0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
141f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14200 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14210 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
14220 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14230 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
14240 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
14250 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
14260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14270 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
14280 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
14290 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
142a0 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
142b0 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
142c0 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
142d0 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
142e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
142f0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
14300 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14310 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14320 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
14330 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14340 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
14350 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
14360 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
14370 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
14380 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
14390 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
143a0 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
143b0 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
143c0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
143d0 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
143e0 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
143f0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14400 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
14410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14420 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14430 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
14440 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
14450 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
14460 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
14470 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
14480 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
14490 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
144a0 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
144b0 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
144c0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
144d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
144e0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
144f0 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ecord[] */.  int
14500 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
14510 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
14520 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
14530 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
14540 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
14550 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
14560 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
14570 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
14580 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
14590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145d0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
145e0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
145f0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
14600 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
14610 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
14620 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
14630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14670 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
14680 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
14690 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
146a0 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
146b0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
146c0 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
146d0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
146e0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
146f0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
14700 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
14710 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
14720 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
14730 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
14740 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
14750 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
14760 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
14770 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
14780 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
14790 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
147a0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
147b0 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
147c0 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
147d0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
147e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
147f0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
14800 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
14810 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
14820 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14830 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
14840 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
14850 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14860 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
14870 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14880 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
14890 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
148a0 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
148b0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
148c0 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
148d0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
148e0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e  >p2+nField<=p->n
148f0 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  Mem+1 );.  pData
14900 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
14910 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
14920 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
14930 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
14940 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
14950 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
14960 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
14970 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
14980 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
14990 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
149a0 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
149b0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
149c0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
149d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
149e0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
149f0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
14a00 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
14a10 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
14a20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
14a30 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
14a40 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
14a50 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
14a60 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
14a70 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
14a80 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70   */.  for(pRec=p
14a90 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
14aa0 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
14ab0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
14ac0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
14ad0 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
14ae0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
14af0 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
14b00 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
14b10 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
14b20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65     }.    if( pRe
14b30 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72  c->flags&MEM_Zer
14b40 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29  o && pRec->n>0 )
14b50 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
14b60 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
14b70 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
14b80 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
14b90 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14ba0 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
14bb0 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
14bc0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
14bd0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
14be0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e  ial_type);.    n
14bf0 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
14c00 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   nHdr += sqlite3
14c10 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
14c20 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
14c30 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
14c40 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
14c50 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
14c60 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
14c70 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
14c80 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
14c90 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
14ca0 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
14cb0 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
14cc0 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
14cd0 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
14ce0 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
14cf0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
14d00 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65  len ){.      nZe
14d10 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ro = 0;.    }.  
14d20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  }..  /* Add the 
14d30 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76  initial header v
14d40 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20  arint and total 
14d50 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48  the size */.  nH
14d60 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20  dr += nVarint = 
14d70 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
14d80 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56  (nHdr);.  if( nV
14d90 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
14da0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a  intLen(nHdr) ){.
14db0 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a      nHdr++;.  }.
14dc0 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
14dd0 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66  Data-nZero;.  if
14de0 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
14df0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
14e00 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
14e10 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
14e20 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
14e30 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
14e40 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
14e50 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
14e60 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
14e70 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
14e80 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14e90 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
14ea0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
14eb0 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
14ec0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
14ed0 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
14ee0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
14ef0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
14f00 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20  MemGrow() could 
14f10 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
14f20 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
14f30 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
14f40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
14f50 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
14f60 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
14f70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
14f80 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
14f90 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
14fa0 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
14fb0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
14fc0 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
14fd0 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
14fe0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
14ff0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
15000 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61  ec++){.    seria
15010 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
15020 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
15030 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
15040 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  );.    i += putV
15050 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
15060 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
15070 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65  ype);      /* se
15080 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d  rial type */.  }
15090 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
150a0 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
150b0 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65   pRec++){  /* se
150c0 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20  rial data */.   
150d0 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   i += sqlite3Vdb
150e0 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
150f0 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29  Record[i], (int)
15100 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c  (nByte-i), pRec,
15110 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15120 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  }.  assert( i==n
15130 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
15140 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
15150 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
15160 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
15170 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
15180 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
15190 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a  Blob | MEM_Dyn;.
151a0 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
151b0 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
151c0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
151d0 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
151e0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
151f0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
15200 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
15210 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
15220 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
15230 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
15240 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
15250 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
15260 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
15270 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15280 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
15290 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
152a0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
152b0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
152c0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
152d0 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76  es (an integer v
152e0 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62  alue) in the tab
152f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20  le or index .** 
15300 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
15310 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20   P1 in register 
15320 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  P2.*/.#ifndef SQ
15330 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
15340 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75  OUNT.case OP_Cou
15350 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  nt: {         /*
15360 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
15370 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
15380 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
15390 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20  rsr;..  pCrsr = 
153a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
153b0 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  ]->pCursor;.  if
153c0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 29 20  ( ALWAYS(pCrsr) 
153d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
153e0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
153f0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
15400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74   }else{.    nEnt
15410 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f  ry = 0;.  }.  pO
15420 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
15430 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
15440 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
15450 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
15460 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
15470 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
15480 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
15490 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
154a0 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
154b0 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
154c0 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
154d0 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
154e0 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
154f0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
15500 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
15510 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
15520 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
15530 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
15540 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
15550 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
15560 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
15590 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
155a0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
155d0 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
155e0 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
155f0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
15600 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
15610 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
15620 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
15630 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
15640 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
15650 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
15660 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
15670 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
15680 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
15690 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
156a0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
156b0 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
156c0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
156d0 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
156e0 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
156f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
15700 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
15710 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
15720 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
15730 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
15740 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
15750 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
15760 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
15770 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
15780 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
15790 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
157a0 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
157b0 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
157c0 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
157d0 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  db) );..  if( p1
157e0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
157f0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
15800 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
15810 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
15820 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
15830 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
15840 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
15850 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
15860 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
15870 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
15880 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
15890 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
158a0 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
158b0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
158c0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
158d0 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
158e0 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
158f0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
15900 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
15910 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15920 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
15930 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
15940 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
15950 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
15960 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
15970 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
15980 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
15990 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
159a0 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
159b0 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
159c0 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
159d0 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
159e0 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
159f0 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
15a00 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
15a10 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
15a20 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
15a30 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
15a40 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
15a50 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
15a60 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
15a70 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
15a80 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
15a90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
15aa0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
15ab0 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
15ac0 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
15ad0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
15ae0 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
15af0 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15b20 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
15b30 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
15b40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15b50 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
15b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
15b70 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
15b80 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
15b90 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
15ba0 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
15bb0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
15bc0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
15bd0 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
15be0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
15bf0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
15c00 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
15c10 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
15c20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
15c30 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
15c40 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
15c50 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
15c60 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
15c70 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
15c80 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
15c90 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
15ca0 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
15cb0 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
15cc0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
15cd0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
15ce0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
15cf0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
15d00 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
15d10 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
15d20 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
15d30 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
15d40 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
15d50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
15d60 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
15d70 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
15d80 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
15d90 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
15da0 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
15db0 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
15dc0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
15dd0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
15de0 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
15df0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
15e00 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
15e10 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
15e20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
15e30 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
15e40 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
15e50 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
15e60 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
15e70 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
15e80 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
15e90 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
15ea0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
15eb0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
15ec0 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
15ed0 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
15ee0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
15ef0 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
15f00 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
15f10 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
15f20 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
15f30 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
15f40 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
15f50 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
15f60 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
15f70 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
15f80 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15f90 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15fa0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
15fb0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
15fc0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
15fd0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
15fe0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
15ff0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16000 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
16010 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16020 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
16030 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
16040 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16050 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
16060 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
16070 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
16080 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
16090 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
160a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
160b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
160c0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65        "cannot re
160d0 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
160e0 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
160f0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20   in progress".  
16100 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
16110 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16120 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
16130 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
16140 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
16150 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
16160 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
16170 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
16180 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
16190 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
161a0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
161b0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
161c0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
161d0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
161e0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
161f0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
16200 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
16210 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16220 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
16230 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
16240 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
16250 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
16260 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
16270 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
16280 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
16290 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
162a0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
162b0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
162c0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
162d0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
162e0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
162f0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
16300 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
16310 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
16320 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
16330 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
16340 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
16350 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16360 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16370 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
16380 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
16390 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
163a0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
163b0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
163c0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
163d0 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
163e0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
163f0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
16400 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
16410 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16420 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
16430 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
16440 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
16450 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
16460 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
16470 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
16480 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54  b[ii].pBt, SQLIT
16490 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20  E_ABORT);.      
164a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
164b0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
164c0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
164d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
164e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
164f0 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
16500 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
16510 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16520 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16530 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16540 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
16550 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16560 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16570 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
16580 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16590 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d  ROLLBACK && (db-
165a0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e  >flags&SQLITE_In
165b0 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20  ternChanges)!=0 
165c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
165d0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
165e0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
165f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
16600 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
16610 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
16620 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
16630 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66  ->flags = (db->f
16640 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e  lags | SQLITE_In
16650 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20  ternChanges);.  
16660 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
16670 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
16680 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
16690 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
166a0 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
166b0 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
166c0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
166d0 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
166e0 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
166f0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
16700 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
16710 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
16720 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
16730 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
16740 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16750 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16760 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
16770 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
16780 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
16790 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
167a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
167b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
167c0 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
167d0 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
167e0 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
167f0 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16800 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
16810 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
16820 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
16830 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
16840 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
16850 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
16860 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
16870 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
16880 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
16890 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
168a0 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
168b0 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
168c0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
168d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
168e0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
168f0 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
16900 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
16910 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
16920 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
16930 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16940 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
16950 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
16960 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16970 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
16980 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
16990 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
169a0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
169b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
169c0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
169d0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
169e0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
169f0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
16a00 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
16a10 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  on ){.        rc
16a20 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
16a30 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
16a40 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
16a50 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16a60 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
16a70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16a80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16a90 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
16aa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
16ab0 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
16ac0 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
16ad0 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
16ae0 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
16af0 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
16b00 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
16b10 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
16b20 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
16b30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
16b40 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
16b50 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
16b60 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
16b70 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
16b80 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
16b90 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
16ba0 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
16bb0 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
16bc0 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
16bd0 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
16be0 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
16bf0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
16c00 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
16c10 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
16c20 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
16c30 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
16c40 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
16c50 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
16c60 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
16c70 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
16c80 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
16c90 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
16ca0 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
16cb0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
16cc0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
16cd0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
16ce0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
16cf0 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
16d00 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
16d10 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16d20 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
16d30 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
16d40 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
16d50 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
16d60 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
16d70 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
16d80 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74 75  ..#if 0.  if( tu
16d90 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62  rnOnAC && iRollb
16da0 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
16db0 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20 20  Active>1 ){.    
16dc0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
16dd0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
16de0 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64  s a ROLLBACK and
16df0 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20   other VMs are. 
16e00 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e     ** still runn
16e10 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73  ing, and a trans
16e20 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
16e30 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  , return an erro
16e40 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20  r indicating.   
16e50 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68   ** that the oth
16e60 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
16e70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
16e80 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
16e90 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16ea0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16eb0 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
16ec0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
16ed0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16ee0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16ef0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
16f00 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a  E_BUSY;.  }else.
16f10 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72  #endif.  if( tur
16f20 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
16f30 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
16f40 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f  Write>0 ){.    /
16f50 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16f60 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16f70 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
16f80 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
16f90 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
16fa0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
16fb0 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
16fc0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
16fd0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
16fe0 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
16ff0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17000 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
17010 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
17020 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17030 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17040 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17050 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17060 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
17070 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
17080 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
17090 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
170a0 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
170b0 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
170c0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
170d0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
170e0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
170f0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
17100 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
17110 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17120 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
17130 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
17140 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
17150 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17160 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17170 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
17180 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
17190 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
171a0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
171b0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
171c0 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
171d0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
171e0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
171f0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
17200 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
17210 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
17220 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
17230 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17240 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
17250 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17260 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17270 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
17280 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
17290 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
172a0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
172b0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
172c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
172d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
172e0 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
172f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17300 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
17310 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17320 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
17330 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17340 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17350 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
17360 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
17370 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
17380 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
17390 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
173a0 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
173b0 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
173c0 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
173d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
173e0 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
173f0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
17400 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
17410 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
17420 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
17430 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
17440 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
17450 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17460 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
17470 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
17480 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
17490 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73  tion.  The trans
174a0 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e  action ends when
174b0 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c   a Commit or Rol
174c0 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20  lback.** opcode 
174d0 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20  is encountered. 
174e0 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   Depending on th
174f0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65  e ON CONFLICT se
17500 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72  tting, the.** tr
17510 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
17520 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  also be rolled b
17530 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ack if an error 
17540 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
17550 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
17560 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
17570 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
17580 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
17590 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
175a0 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
175b0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
175c0 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
175d0 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
175e0 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
175f0 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
17600 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
17610 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
17620 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
17630 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ases..**.** If P
17640 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
17650 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
17660 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
17670 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20  ed.  A RESERVED 
17680 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69  lock is.** obtai
17690 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
176a0 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20  ase file when a 
176b0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
176c0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e  n is started.  N
176d0 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65  o.** other proce
176e0 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f  ss can start ano
176f0 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73  ther write trans
17700 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69  action while thi
17710 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  s transaction is
17720 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53  .** underway.  S
17730 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20  tarting a write 
17740 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f  transaction also
17750 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62   creates a rollb
17760 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a  ack journal. A.*
17770 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  * write transact
17780 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
17790 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63  ted before any c
177a0 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61  hanges can be ma
177b0 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  de to the.** dat
177c0 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73  abase.  If P2 is
177d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
177e0 20 65 71 75 61 6c 20 74 6f 20 32 20 74 68 65 6e   equal to 2 then
177f0 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   an EXCLUSIVE lo
17800 63 6b 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 6f 62  ck is.** also ob
17810 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 66 69  tained on the fi
17820 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  le..**.** If a w
17830 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17840 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
17850 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
17860 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
17870 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
17880 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
17890 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
178a0 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
178b0 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
178c0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
178d0 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
178e0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
178f0 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
17900 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
17910 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
17920 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17930 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
17940 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
17950 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
17960 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
17970 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
17980 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
17990 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
179a0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
179b0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
179c0 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
179d0 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
179e0 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
179f0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
17a00 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
17a10 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
17a20 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
17a30 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
17a40 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
17a50 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
17a60 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
17a70 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
17a80 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
17a90 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
17aa0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
17ab0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
17ac0 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
17ad0 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
17ae0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
17af0 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
17b00 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
17b10 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
17b20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17b30 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
17b40 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
17b50 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
17b60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
17b70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
17b80 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
17b90 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
17ba0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
17bb0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
17bc0 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  !=0 );.  pBt = d
17bd0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17be0 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
17bf0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
17c00 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
17c10 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
17c20 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
17c30 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
17c40 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
17c50 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17c60 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17c70 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17c80 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
17c90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17ca0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
17cb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17cc0 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
17cd0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
17ce0 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
17cf0 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
17d00 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
17d10 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
17d20 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
17d30 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
17d40 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
17d50 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
17d60 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
17d70 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
17d80 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
17d90 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
17da0 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
17db0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
17dc0 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
17dd0 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
17de0 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
17df0 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
17e00 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
17e10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
17e20 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
17e30 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
17e40 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
17e50 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
17e60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
17e70 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17e80 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
17e90 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
17ea0 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
17eb0 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
17ec0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
17ed0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17ee0 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
17ef0 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
17f00 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
17f10 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
17f20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
17f30 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
17f40 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
17f50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
17f60 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
17f70 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
17f80 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
17f90 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
17fa0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
17fb0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
17fc0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17fd0 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20  : ReadCookie P1 
17fe0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
17ff0 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  Read cookie numb
18000 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62  er P3 from datab
18010 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65  ase P1 and write
18020 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65   it into registe
18030 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69  r P2..** P3==1 i
18040 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
18050 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20  sion.  P3==2 is 
18060 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
18070 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73  mat..** P3==3 is
18080 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
18090 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a   pager cache siz
180a0 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
180b0 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68    P1==0 is.** th
180c0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
180d0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
180e0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
180f0 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
18100 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74  e.** temporary t
18110 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ables..**.** The
18120 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61  re must be a rea
18130 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d-lock on the da
18140 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61  tabase (either a
18150 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
18160 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
18170 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65  or there must be
18180 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29   an open cursor)
18190 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75   before.** execu
181a0 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  ting this instru
181b0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
181c0 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20  P_ReadCookie: { 
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
181e0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
181f0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
18200 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
18210 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
18220 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
18230 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
18240 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
18250 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
18260 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
18270 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
18280 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
18290 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
182a0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
182b0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
182c0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
182d0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
182e0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
182f0 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20  <<iDb))!=0 );.. 
18300 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
18310 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
18320 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
18330 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
18340 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
18350 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
18360 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
18370 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
18380 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
18390 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
183a0 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72  gister P3 (inter
183b0 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74  preted as an int
183c0 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f  eger).** into co
183d0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
183e0 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  f database P1.  
183f0 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
18400 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a  ema version.  .*
18410 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64  * P2==2 is the d
18420 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20  atabase format. 
18430 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
18440 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
18450 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
18460 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
18470 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
18480 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
18490 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
184a0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
184b0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
184c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
184d0 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
184e0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
184f0 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
18500 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
18510 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
18520 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  tCookie: {      
18530 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20   /* in3 */.  Db 
18540 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
18550 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
18560 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
18570 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18580 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
18590 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
185a0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
185b0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
185c0 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
185d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
185e0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
185f0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
18600 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
18610 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
18620 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
18630 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
18640 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
18650 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20   0) );.  pIn3 = 
18660 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
18670 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
18680 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
18690 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
186a0 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
186b0 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
186c0 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
186d0 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
186e0 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
186f0 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70   pOp->p2, (int)p
18700 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  In3->u.i);.  if(
18710 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
18720 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
18730 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
18740 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
18750 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
18760 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
18770 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
18780 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
18790 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28  chema_cookie = (
187a0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  int)pIn3->u.i;. 
187b0 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
187c0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
187d0 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
187e0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
187f0 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
18800 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
18810 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
18820 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
18830 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
18840 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29  le_format = (u8)
18850 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn3->u.i;.  }. 
18860 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
18870 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
18880 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
18890 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
188a0 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
188b0 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
188c0 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
188d0 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
188e0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
188f0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
18900 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
18910 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
18920 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18930 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66  /* Opcode: Verif
18940 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  yCookie P1 P2 P3
18950 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
18960 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
18970 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
18980 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
18990 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
189a0 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
189b0 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
189c0 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74 68 61  al to P2 and tha
189d0 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61 74  t the.** generat
189e0 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20 74  ion counter on t
189f0 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61 20  he local schema 
18a00 70 61 72 73 65 20 65 71 75 61 6c 73 20 50 33 2e  parse equals P3.
18a10 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
18a20 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72   database number
18a30 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20   which is 0 for 
18a40 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18a50 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20  e file.** and 1 
18a60 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c  for the file hol
18a70 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74  ding temporary t
18a80 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68  ables and some h
18a90 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20  igher number.** 
18aa0 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61  for auxiliary da
18ab0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  tabases..**.** T
18ac0 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
18ad0 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
18ae0 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
18af0 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
18b00 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
18b10 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
18b20 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
18b30 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
18b40 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
18b50 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
18b60 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
18b70 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
18b80 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20  a..**.** Either 
18b90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  a transaction ne
18ba0 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  eds to have been
18bb0 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f   started or an O
18bc0 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20  P_Open needs.** 
18bd0 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28  to be executed (
18be0 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72  to establish a r
18bf0 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65  ead lock) before
18c00 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a   this opcode is.
18c10 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63  ** invoked..*/.c
18c20 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f  ase OP_VerifyCoo
18c30 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65  kie: {.  int iMe
18c40 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a  ta;.  int iGen;.
18c50 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
18c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18c70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
18c80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18c90 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
18ca0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
18cb0 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
18cc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
18cd0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
18ce0 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
18cf0 20 30 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28   0) );.  assert(
18d00 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18d10 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
18d20 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
18d30 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
18d40 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
18d50 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
18d60 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
18d70 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
18d80 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
18d90 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
18da0 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
18db0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47  .  }else{.    iG
18dc0 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a  en = iMeta = 0;.
18dd0 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21    }.  if( iMeta!
18de0 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20 69 47 65 6e  =pOp->p2 || iGen
18df0 21 3d 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  !=pOp->p3 ){.   
18e00 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18e10 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
18e20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
18e30 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
18e40 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
18e50 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
18e60 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
18e70 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
18e80 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
18e90 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
18ea0 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
18eb0 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
18ec0 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
18ed0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
18ee0 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
18ef0 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
18f00 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
18f10 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
18f20 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
18f30 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
18f40 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
18f50 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
18f60 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
18f70 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
18f80 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
18f90 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
18fa0 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
18fb0 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
18fc0 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
18fd0 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
18fe0 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
18ff0 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
19000 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
19010 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
19020 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
19030 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
19040 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
19050 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
19060 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
19070 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
19080 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
19090 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
190a0 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
190b0 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
190c0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
190d0 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
190e0 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
190f0 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
19100 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
19110 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
19120 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
19130 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
19140 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
19150 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
19160 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
19170 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
19180 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
19190 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
191a0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
191b0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
191c0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
191d0 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
191e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
191f0 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
19200 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
19210 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
19220 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
19230 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
19240 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
19250 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
19260 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
19270 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
19280 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
19290 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
192a0 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
192b0 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
192c0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
192d0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
192e0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
192f0 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
19300 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
19310 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
19320 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
19330 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
19340 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
19350 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
19360 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
19370 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
19380 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
19390 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
193a0 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
193b0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
193c0 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
193d0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
193e0 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
193f0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
19400 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
19410 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
19420 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
19430 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
19440 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
19450 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
19460 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
19470 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
19480 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
19490 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
194a0 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
194b0 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
194c0 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
194d0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
194e0 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
194f0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
19500 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
19510 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
19520 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
19530 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
19540 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
19550 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
19560 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
19570 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
19580 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
19590 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
195a0 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
195b0 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
195c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
195d0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
195e0 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
195f0 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
19600 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
19610 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
19620 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
19630 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
19640 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
19650 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
19660 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
19670 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
19680 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
19690 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
196a0 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
196b0 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
196c0 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
196d0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
196e0 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
196f0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
19700 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
19710 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
19720 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
19730 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
19740 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
19750 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
19760 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
19770 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
19780 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
19790 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e   also OpenWrite.
197a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
197b0 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
197c0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
197d0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
197e0 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
197f0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
19800 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
19810 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
19820 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
19830 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19840 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
19850 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
19860 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
19870 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
19880 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
19890 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
198a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
198b0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
198c0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
198d0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
198e0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
198f0 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
19900 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
19910 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
19920 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
19930 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
19940 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
19950 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
19960 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
19970 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
19980 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
19990 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
199a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
199b0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
199c0 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
199d0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
199e0 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
199f0 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
19a00 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
19a10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
19a20 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
19a30 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
19a40 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
19a50 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
19a60 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
19a70 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
19a80 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
19a90 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
19aa0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
19ab0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
19ac0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
19ad0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
19ae0 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
19af0 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
19b00 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
19b10 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
19b20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
19b30 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
19b40 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
19b50 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
19b60 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
19b70 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
19b80 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
19b90 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70  ..  assert( (pOp
19ba0 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49  ->p5&(OPFLAG_P2I
19bb0 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b  SREG|OPFLAG_BULK
19bc0 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29  CSR))==pOp->p5 )
19bd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19be0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
19bf0 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
19c00 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
19c10 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
19c20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19c30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
19c40 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  ead || p->readOn
19c50 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
19c60 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
19c70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
19c80 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ORT;.    break;.
19c90 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
19ca0 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
19cb0 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
19cc0 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
19cd0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
19ce0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
19cf0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19d00 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
19d10 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
19d20 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  iDb))!=0 );.  pD
19d30 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
19d40 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
19d50 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
19d60 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
19d70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
19d80 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
19d90 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
19da0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
19db0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
19dc0 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
19dd0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
19de0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
19df0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
19e00 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
19e10 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
19e20 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
19e30 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
19e40 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
19e50 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
19e60 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
19e70 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
19e80 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
19e90 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
19ea0 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d  ssert( p2<=p->nM
19eb0 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  em );.    pIn2 =
19ec0 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
19ed0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
19ee0 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
19ef0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
19f00 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
19f10 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
19f20 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
19f30 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
19f40 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
19f50 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
19f60 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
19f70 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
19f80 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
19f90 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
19fa0 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
19fb0 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
19fc0 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
19fd0 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
19fe0 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
19ff0 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
1a000 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
1a010 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
1a020 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
1a030 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
1a040 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
1a050 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
1a060 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
1a070 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
1a080 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1a090 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
1a0a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a0b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1a0c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a0d0 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
1a0e0 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
1a0f0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1a100 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20    pKeyInfo->enc 
1a110 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20  = ENC(p->db);.  
1a120 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1a130 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20  nfo->nField+1;. 
1a140 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1a150 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1a160 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1a170 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1a180 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a190 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d  1>=0 );.  pCur =
1a1a0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1a1b0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1a1c0 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69  ld, iDb, 1);.  i
1a1d0 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
1a1e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
1a1f0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1a200 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
1a210 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1a220 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1a230 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1a240 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1a250 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
1a260 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1a270 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1a280 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1a290 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1a2a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
1a2b0 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75  eCursorHints(pCu
1a2c0 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70  r->pCursor, (pOp
1a2d0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1a2e0 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53  LKCSR));..  /* S
1a2f0 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73  ince it performs
1a300 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   no memory alloc
1a310 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65  ation or IO, the
1a320 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74   only value that
1a330 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  .  ** sqlite3Btr
1a340 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72  eeCursor() may r
1a350 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f  eturn is SQLITE_
1a360 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  OK. */.  assert(
1a370 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1a380 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  ;..  /* Set the 
1a390 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1a3a0 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76  le and isIndex v
1a3b0 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f  ariables. Previo
1a3c0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1a3d0 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1a3e0 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1a3f0 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1a400 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1a410 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1a420 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1a430 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1a440 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1a450 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1a460 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1a470 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1a480 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1a490 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1a4a0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1a4b0 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d  KEYINFO;.  pCur-
1a4c0 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72  >isIndex = !pCur
1a4d0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65  ->isTable;.  bre
1a4e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1a4f0 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1a500 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1a510 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1a520 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
1a530 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
1a540 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
1a550 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
1a560 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
1a570 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
1a580 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
1a590 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65  nly.  The epheme
1a5a0 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ral.** table is 
1a5b0 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
1a5c0 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
1a5d0 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
1a5e0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
1a5f0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1a600 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65  ns in the epheme
1a610 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ral table..** Th
1a620 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20  e cursor points 
1a630 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65  to a BTree table
1a640 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f   if P4==0 and to
1a650 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a   a BTree index.*
1a660 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30  * if P4 is not 0
1a670 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
1a680 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20  NULL, it points 
1a690 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
1a6a0 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64  ucture.** that d
1a6b0 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
1a6c0 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65  t of keys in the
1a6d0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   index..**.** Th
1a6e0 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e  is opcode was on
1a6f0 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65  ce called OpenTe
1a700 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20 63 72  mp.  But that cr
1a710 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69  eated.** confusi
1a720 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 74  on because the t
1a730 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22  erm "temp table"
1a740 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69  , might refer ei
1a750 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d  ther.** to a TEM
1a760 50 20 74 61 62 6c 65 20 61 74 20 74 68 65 20 53  P table at the S
1a770 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20  QL level, or to 
1a780 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62  a table opened b
1a790 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  y.** this opcode
1a7a0 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63  .  Then this opc
1a7b0 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65  ode was call Ope
1a7c0 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a  nVirtual.  But.*
1a7d0 2a 20 74 68 61 74 20 63 72 65 61 74 65 64 20 63  * that created c
1a7e0 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68  onfusion with th
1a7f0 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d  e whole virtual-
1a800 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2a 0a 2a  table idea..**.*
1a810 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
1a820 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b  er can be a mask
1a830 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20   of the BTREE_* 
1a840 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a  flags defined.**
1a850 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68   in btree.h.  Th
1a860 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f  ese flags contro
1a870 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
1a880 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a   operation of.**
1a890 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65   the btree.  The
1a8a0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1a8b0 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49  NAL and BTREE_SI
1a8c0 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a  NGLE flags are.*
1a8d0 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69  * added automati
1a8e0 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  cally..*/./* Opc
1a8f0 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
1a900 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
1a910 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1a920 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
1a930 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
1a940 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
1a950 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
1a960 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
1a970 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
1a980 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
1a990 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
1a9a0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
1a9b0 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
1a9c0 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
1a9d0 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
1a9e0 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
1a9f0 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
1aa00 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
1aa10 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
1aa20 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
1aa30 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1aa40 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1aa50 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1aa60 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1aa70 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1aa80 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1aa90 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1aaa0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1aab0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1aac0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1aad0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1aae0 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74  NT_DB;..  assert
1aaf0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1ab00 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1ab10 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1ab20 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1ab30 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1ab40 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ab50 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1ab60 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1ab70 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e  e3BtreeOpen(db->
1ab80 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43  pVfs, 0, db, &pC
1ab90 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20  x->pBt, .       
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1abc0 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1abd0 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1abe0 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1abf0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1ac00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ac10 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1ac20 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
1ac30 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1ac40 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1ac50 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1ac60 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1ac70 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1ac80 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1ac90 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1aca0 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1acb0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1acc0 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1acd0 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1ace0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1acf0 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1ad00 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1ad10 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1ad20 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1ad30 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1ad40 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1ad50 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1ad60 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1ad70 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20  pKeyInfo ){.    
1ad80 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1ad90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ada0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1adb0 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1adc0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1add0 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1ade0 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1adf0 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1ae00 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1ae10 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1ae20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1ae30 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1ae40 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  +1 );.        rc
1ae50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ae60 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1ae70 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20  pgno, 1, .      
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e            (KeyIn
1aea0 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  fo*)pOp->p4.z, p
1aeb0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1aec0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1aed0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1aee0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
1aef0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
1af00 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
1af10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1af20 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1af30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1af40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1af50 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1af60 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
1af70 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
1af80 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1af90 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1afa0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1afb0 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1afc0 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1afd0 45 52 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73  ERED);.  pCx->is
1afe0 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73  Index = !pCx->is
1aff0 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
1b000 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1b010 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 2a  rterOpen P1 P2 *
1b020 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1b030 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1b040 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1b050 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1b060 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1b070 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1b080 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1b090 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1b0a0 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1b0b0 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1b0c0 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1b0d0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63   algorithm..*/.c
1b0e0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65  ase OP_SorterOpe
1b0f0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
1b100 72 20 2a 70 43 78 3b 0a 0a 20 20 70 43 78 20 3d  r *pCx;..  pCx =
1b110 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1b120 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1b130 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
1b140 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1b150 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1b160 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b170 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70  p4.pKeyInfo;.  p
1b180 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1b190 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
1b1a0 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65 72 20    pCx->isSorter 
1b1b0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
1b1c0 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1b1d0 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20 62 72  t(db, pCx);.  br
1b1e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b1f0 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1b200 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
1b210 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1b220 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1b230 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1b240 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1b250 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1b260 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1b270 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1b280 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  row in the conte
1b290 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1b2a0 72 65 67 69 73 74 65 72 20 50 32 20 77 68 65 6e  register P2 when
1b2b0 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74 68 65   P5==0.  In othe
1b2c0 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1b2d0 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1b2e0 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1b2f0 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1b300 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1b310 67 69 73 74 65 72 20 50 32 2e 20 20 57 68 65 6e  gister P2.  When
1b320 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74 68 65   P5==1, then the
1b330 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70 72 65  .** row is repre
1b340 73 65 6e 74 65 64 20 62 79 20 50 33 20 63 6f 6e  sented by P3 con
1b350 73 65 63 75 74 69 76 65 20 72 65 67 69 73 74 65  secutive registe
1b360 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
1b370 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  h P2..**.** A ps
1b380 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1b390 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1b3a0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1b3b0 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1b3c0 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1b3d0 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1b3e0 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1b3f0 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1b400 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1b410 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1b420 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1b430 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1b440 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1b450 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1b460 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1b470 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1b480 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1b490 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1b4a0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1b4b0 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1b4c0 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1b4d0 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1b4e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1b4f0 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1b500 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1b510 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b520 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1b530 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b540 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1b550 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
1b560 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1b570 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1b580 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1b590 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  >pseudoTableReg 
1b5a0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1b5b0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1b5c0 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
1b5d0 30 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74 69 50  0;.  pCx->multiP
1b5e0 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b  seudo = pOp->p5;
1b5f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b600 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1b610 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1b620 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1b630 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1b640 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1b650 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1b660 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1b670 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1b680 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1b690 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1b6a0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1b6b0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1b6c0 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1b6d0 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1b6e0 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1b6f0 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1b700 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1b710 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b720 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20  code: SeekGe P1 
1b730 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1b740 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1b750 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1b760 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1b770 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1b780 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1b790 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1b7a0 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1b7b0 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1b7c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1b7d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1b7e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1b7f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1b800 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1b810 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1b820 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1b830 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1b840 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1b850 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1b860 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1b870 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1b880 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1b890 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1b8a0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1b8b0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1b8c0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1b8d0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1b8e0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1b8f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1b900 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1b910 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1b920 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1b930 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1b940 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
1b950 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1b960 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50  ode: SeekGt P1 P
1b970 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b980 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b990 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1b9a0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1b9b0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1b9c0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1b9d0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1b9e0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1b9f0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ba00 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1ba10 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1ba20 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1ba30 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ba40 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ba50 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ba60 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1ba70 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1ba80 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1ba90 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1baa0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1bab0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1bac0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1bad0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1bae0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1baf0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1bb00 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1bb10 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1bb20 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1bb30 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1bb40 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1bb50 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1bb60 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
1bb70 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1bb80 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20   Opcode: SeekLt 
1bb90 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1bba0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1bbb0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1bbc0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1bbd0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1bbe0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1bbf0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1bc00 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1bc10 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1bc20 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1bc30 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1bc40 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1bc50 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1bc60 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1bc70 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1bc80 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1bc90 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1bca0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1bcb0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1bcc0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1bcd0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1bce0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1bcf0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1bd00 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1bd10 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
1bd20 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1bd30 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1bd40 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1bd50 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1bd60 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1bd70 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1bd80 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1bd90 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1bda0 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31  pcode: SeekLe P1
1bdb0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1bdc0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1bdd0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1bde0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1bdf0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1be00 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1be10 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1be20 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1be30 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1be40 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1be50 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1be60 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1be70 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1be80 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1be90 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1bea0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1beb0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1bec0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1bed0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1bee0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1bef0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1bf00 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1bf10 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1bf20 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1bf30 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1bf40 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
1bf50 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1bf60 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1bf70 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1bf80 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1bf90 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1bfa0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1bfb0 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
1bfc0 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1bfd0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20  case OP_SeekLt: 
1bfe0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1bff0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1c000 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20  SeekLe:         
1c010 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c020 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20  case OP_SeekGe: 
1c030 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1c040 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1c050 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20  SeekGt: {       
1c060 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c070 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
1c080 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   oc;.  VdbeCurso
1c090 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65  r *pC;.  Unpacke
1c0a0 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74  dRecord r;.  int
1c0b0 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69   nField;.  i64 i
1c0c0 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Key;      /* The
1c0d0 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1c0e0 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61   seek to */..  a
1c0f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c100 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c110 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1c120 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
1c130 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c140 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1c150 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1c160 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1c170 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1c180 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1c190 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65  SeekLe == OP_See
1c1a0 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLt+1 );.  asser
1c1b0 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20  t( OP_SeekGe == 
1c1c0 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20  OP_SeekLt+2 );. 
1c1d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1c1e0 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Gt == OP_SeekLt+
1c1f0 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
1c200 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
1c210 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1c220 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1c230 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70      oc = pOp->op
1c240 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  code;.    pC->nu
1c250 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69  llRow = 0;.    i
1c260 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1c270 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69  {.      /* The i
1c280 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1c290 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1c2a0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1c2b0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1c2c0 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1c2d0 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1c2e0 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1c2f0 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1c300 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74  an do.      ** t
1c310 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65  he seek, so cove
1c320 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20  rt it. */.      
1c330 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1c340 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 70 70  ->p3];.      app
1c350 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1c360 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69  y(pIn3);.      i
1c370 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1c380 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1c390 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1c3a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
1c3b0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1c3c0 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1c3d0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1c3e0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1c3f0 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c  thout.      ** l
1c400 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1c410 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1c420 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1c430 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1c440 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1c450 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
1c460 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
1c470 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1c480 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1c490 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66  .          /* If
1c4a0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
1c4b0 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
1c4c0 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
1c4d0 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
1c4e0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1c4f0 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1c500 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1c510 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1c520 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c530 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
1c540 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
1c550 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77  .        /* If w
1c560 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
1c570 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20  nt, then the P3 
1c580 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20  value must be a 
1c590 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20  floating.       
1c5a0 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72   ** point number
1c5b0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
1c5c0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
1c5d0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30  s & MEM_Real)!=0
1c5e0 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28   );..        if(
1c5f0 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f   iKey==SMALLEST_
1c600 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e  INT64 && (pIn3->
1c610 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c  r<(double)iKey |
1c620 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a  | pIn3->r>0) ){.
1c630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c640 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 6f   P3 value is too
1c650 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74   large in magnit
1c660 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ude to be expres
1c670 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20  sed as an.      
1c680 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20      ** integer. 
1c690 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  */.          res
1c6a0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
1c6b0 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b  if( pIn3->r<0 ){
1c6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1c6d0 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc>=OP_SeekGe )
1c6e0 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1c6f0 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d  P_SeekGe || oc==
1c700 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
1c710 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1c720 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
1c730 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1c740 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1c750 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c760 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c770 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c780 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1c790 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1c7b0 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b  oc<=OP_SeekLe ){
1c7c0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1c7d0 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
1c7e0 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20  P_SeekLe );.    
1c7f0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
1c800 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1c810 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1c820 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
1c830 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c840 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1c850 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c860 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1c870 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c880 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
1c890 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
1c8a0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1c8b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c8c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1c8d0 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f   }else if( oc==O
1c8e0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1c8f0 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20  OP_SeekGe ){.   
1c900 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1c910 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63  e ceiling() func
1c920 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
1c930 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
1c940 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
1c950 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r > (double)iKe
1c960 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20  y ) iKey++;.    
1c970 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c980 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
1c990 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e  floor() function
1c9a0 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
1c9b0 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
1c9c0 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1c9d0 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d  P_SeekLe || oc==
1c9e0 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
1c9f0 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
1ca00 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r < (double)iKe
1ca10 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20  y ) iKey--;.    
1ca20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20      }.      } . 
1ca30 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ca40 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ca50 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1ca60 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
1ca70 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1ca80 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ca90 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
1caa0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1cab0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1cac0 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1cad0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  {.        pC->ro
1cae0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a  widIsValid = 1;.
1caf0 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74          pC->last
1cb00 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
1cb10 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1cb20 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  .      nField = 
1cb30 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20  pOp->p4.i;.     
1cb40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1cb50 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1cb60 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1cb70 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
1cb80 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1cb90 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1cba0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1cbb0 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
1cbc0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
1cbd0 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
1cbe0 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
1cbf0 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
1cc00 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d     **   if( oc==
1cc10 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
1cc20 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
1cc30 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61      **     r.fla
1cc40 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
1cc50 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20  CRKEY;.      ** 
1cc60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a    }else{.      *
1cc70 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20  *     r.flags = 
1cc80 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a  0;.      **   }.
1cc90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
1cca0 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28 55 4e  .flags = (u8)(UN
1ccb0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a  PACKED_INCRKEY *
1ccc0 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53   (1 & (oc - OP_S
1ccd0 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 20 20  eekLt)));.      
1cce0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1ccf0 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73  eekGt || r.flags
1cd00 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  ==UNPACKED_INCRK
1cd10 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EY );.      asse
1cd20 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1cd30 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e  e || r.flags==UN
1cd40 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29  PACKED_INCRKEY )
1cd50 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1cd60 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc!=OP_SeekGe ||
1cd70 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20   r.flags==0 );. 
1cd80 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1cd90 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e  =OP_SeekLt || r.
1cda0 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20  flags==0 );..   
1cdb0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
1cdc0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
1cdd0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1cde0 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66        { int i; f
1cdf0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1ce00 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1ce10 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1ce20 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1ce30 64 69 66 0a 20 20 20 20 20 20 45 78 70 61 6e 64  dif.      Expand
1ce40 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20  Blob(r.aMem);.  
1ce50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ce60 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1ce70 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1ce80 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1ce90 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1cea0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ceb0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1cec0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ced0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e      }.      pC->
1cee0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1cef0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1cf00 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1cf10 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1cf20 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1cf30 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1cf40 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
1cf50 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1cf60 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
1cf70 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1cf80 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Ge ){  assert( o
1cf90 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1cfa0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1cfb0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30  .      if( res<0
1cfc0 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1cfd0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b  c==OP_SeekGt) ){
1cfe0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1cff0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
1d000 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1d010 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1d020 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d030 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d040 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1d050 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d060 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1d070 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
1d080 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1d090 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
1d0a0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1d0b0 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1d0c0 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28  kLe );.      if(
1d0d0 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
1d0e0 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1d0f0 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Lt) ){.        r
1d100 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d110 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1d120 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d130 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1d140 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1d150 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d160 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1d170 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1d180 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1d190 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1d1a0 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1d1b0 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1d1c0 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1d1d0 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   to.        ** s
1d1e0 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1d1f0 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20  e case..        
1d200 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  */.        res =
1d210 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1d220 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1d230 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1d240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1d250 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  >0 );.    if( re
1d260 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
1d270 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1d280 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1d290 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1d2a0 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20  when attempting 
1d2b0 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69  to open the sqli
1d2c0 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  te3_master table
1d2d0 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64  .    ** for read
1d2e0 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20   access returns 
1d2f0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e  SQLITE_EMPTY. In
1d300 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79   this case alway
1d310 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68  s.    ** take th
1d320 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68  e jump (since th
1d330 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1d340 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29  ds in the table)
1d350 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20  ..    */.    pc 
1d360 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1d370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1d380 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
1d390 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1d3a0 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74   P1 is an open t
1d3b0 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20  able cursor and 
1d3c0 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e  P2 is a rowid in
1d3d0 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a  teger.  Arrange.
1d3e0 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76  ** for P1 to mov
1d3f0 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  e so that it poi
1d400 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64  nts to the rowid
1d410 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a   given by P2..**
1d420 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75  .** This is actu
1d430 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20  ally a deferred 
1d440 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
1d450 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
1d460 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
1d470 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
1d480 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
1d490 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
1d4a0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
1d4b0 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
1d4c0 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61  O happens..*/.ca
1d4d0 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20  se OP_Seek: {   
1d4e0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
1d4f0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
1d500 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d510 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1d520 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1d530 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d540 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1d550 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41  pC!=0 );.  if( A
1d560 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
1d570 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
1d580 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d590 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   );.    pC->null
1d5a0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e  Row = 0;.    pIn
1d5b0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
1d5c0 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  2];.    pC->move
1d5d0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1d5e0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1d5f0 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  In2);.    pC->ro
1d600 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1d610 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1d620 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a  Moveto = 1;.  }.
1d630 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1d640 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1d650 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d660 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1d670 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1d680 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1d690 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1d6a0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1d6b0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1d6c0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1d6d0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d6e0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1d6f0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1d700 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1d710 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1d720 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1d730 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1d740 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1d750 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1d760 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1d770 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1d780 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
1d790 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1d7a0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1d7b0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f  hing entry..*/./
1d7c0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1d7d0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1d7e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1d7f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1d800 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1d810 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1d820 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1d830 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1d840 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1d850 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1d860 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1d870 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1d880 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1d890 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1d8a0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1d8b0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1d8c0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1d8d0 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1d8e0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1d8f0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1d900 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1d910 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1d920 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1d930 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1d940 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1d950 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1d960 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1d970 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1d980 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1d990 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1d9a0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1d9b0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1d9c0 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ry..**.** See al
1d9d0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
1d9e0 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ists, IsUnique.*
1d9f0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
1da00 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
1da10 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1da20 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
1da30 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1da40 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
1da50 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75 72  xists;.  VdbeCur
1da60 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
1da70 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65  es;.  char *pFre
1da80 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
1da90 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
1daa0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1dab0 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1dac0 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1dad0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1dae0 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33   + sizeof(Mem)*3
1daf0 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
1db00 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1db10 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1db20 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c  ++;.#endif..  al
1db30 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b  readyExists = 0;
1db40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1db50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1db60 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1db70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1db80 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1db90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1dba0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1dbb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1dbc0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1dbd0 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c  p->p3];.  if( AL
1dbe0 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1dbf0 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73  !=0) ){..    ass
1dc00 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1dc10 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ==0 );.    if( p
1dc20 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
1dc30 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1dc40 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1dc50 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1dc60 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1dc70 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70        r.aMem = p
1dc80 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  In3;.#ifdef SQLI
1dc90 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b  TE_DEBUG.      {
1dca0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1dcb0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1dcc0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1dcd0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1dce0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1dcf0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1dd00 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
1dd10 43 48 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65  CH;.      pIdxKe
1dd20 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73  y = &r;.    }els
1dd30 65 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  e{.      pIdxKey
1dd40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
1dd50 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
1dd60 64 28 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  d(.          pC-
1dd70 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1dd80 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1dd90 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1dda0 20 20 20 20 29 3b 20 0a 20 20 20 20 20 20 69 66      ); .      if
1ddb0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
1ddc0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1ddd0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1dde0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1ddf0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1de00 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1de10 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b   MEM_Zero)==0 );
1de20 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61    /* zeroblobs a
1de30 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20  lready expanded 
1de40 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
1de50 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1de60 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1de70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1de80 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20   pIdxKey);.     
1de90 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20   pIdxKey->flags 
1dea0 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  |= UNPACKED_PREF
1deb0 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
1dec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ded0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1dee0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1def0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1df00 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
1df10 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20  Op->p4.i==0 ){. 
1df20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1df30 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  ee(db, pFree);. 
1df40 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
1df50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1df60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1df70 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
1df80 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
1df90 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1dfa0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1dfb0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1dfc0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1dfd0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
1dfe0 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1dff0 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
1e000 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1e010 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
1e020 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
1e030 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1e040 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1e050 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e060 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
1e070 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
1e080 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1e090 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69   is open on an i
1e0a0 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68  ndex b-tree - th
1e0b0 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20  at is to say, a 
1e0c0 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e  btree which.** n
1e0d0 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65  o data and where
1e0e0 20 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63   the key are rec
1e0f0 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62  ords generated b
1e100 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  y OP_MakeRecord 
1e110 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74  with.** the list
1e120 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65   field being the
1e130 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1e140 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
1e150 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e   the index.** en
1e160 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a  try refers to..*
1e170 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69  *.** The P3 regi
1e180 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ster contains an
1e190 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1e1a0 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69  number. Call thi
1e1b0 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d  s record .** num
1e1c0 62 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20  ber R. Register 
1e1d0 50 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P4 is the first 
1e1e0 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f  in a set of N co
1e1f0 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65  ntiguous registe
1e200 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20  rs.** that make 
1e210 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  up an unpacked i
1e220 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61  ndex key that ca
1e230 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63  n be used with c
1e240 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
1e250 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20   value of N can 
1e260 62 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d  be inferred from
1e270 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69   the cursor. N i
1e280 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69  ncludes the rowi
1e290 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e  d.** value appen
1e2a0 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ded to the end o
1e2b0 66 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f the index reco
1e2c0 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76  rd. This rowid v
1e2d0 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d  alue may.** or m
1e2e0 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61  ay not be the sa
1e2f0 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49  me as R..**.** I
1e300 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72  f any of the N r
1e310 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
1e320 6e 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72  ng with register
1e330 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e   P4 contains a N
1e340 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75  ULL.** value, ju
1e350 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1e360 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  o P2..**.** Othe
1e370 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74  rwise, this inst
1e380 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69  ruction checks i
1e390 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74  f cursor P1 cont
1e3a0 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a  ains an entry.**
1e3b0 20 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74   where the first
1e3c0 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61   (N-1) fields ma
1e3d0 74 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69  tch but the rowi
1e3e0 64 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65  d value at the e
1e3f0 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64  nd.** of the ind
1e400 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20  ex entry is not 
1e410 52 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  R. If there is n
1e420 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f  o such entry, co
1e430 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74  ntrol jumps.** t
1e440 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
1e450 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
1e460 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f   rowid of the co
1e470 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a  nflicting index.
1e480 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69  ** entry is copi
1e490 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  ed to register P
1e4a0 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61  3 and control fa
1e4b0 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1e4c0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
1e4d0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1e4e0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1e4f0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75  , NotExists, Fou
1e500 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  nd.*/.case OP_Is
1e510 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20  Unique: {       
1e520 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1e530 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62  .  u16 ii;.  Vdb
1e540 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1e550 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e560 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20  .  u16 nField;. 
1e570 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70   Mem *aMx;.  Unp
1e580 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20  ackedRecord r;  
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20  /* B-Tree index 
1e5b0 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20  search key */.  
1e5c0 69 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20  i64 R;          
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72     /* Rowid stor
1e5f0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1e600 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26  3 */..  pIn3 = &
1e610 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1e620 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   aMx = &aMem[pOp
1e630 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73  ->p4.i];.  /* As
1e640 73 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61  sert that the va
1e650 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65  lues of paramete
1e660 72 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65  rs P1 and P4 are
1e670 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20   in range. */.  
1e680 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1e690 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1e6a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e6b0 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70  p4.i>0 && pOp->p
1e6c0 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  4.i<=p->nMem );.
1e6d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e6e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e6f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20  p->nCursor );.. 
1e700 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64   /* Find the ind
1e710 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20  ex cursor. */.  
1e720 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  pCx = p->apCsr[p
1e730 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e740 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64  t( pCx->deferred
1e750 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
1e760 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  Cx->seekResult =
1e770 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65   0;.  pCx->cache
1e780 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e790 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20  TALE;.  pCrsr = 
1e7a0 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20  pCx->pCursor;.. 
1e7b0 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68   /* If any of th
1e7c0 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c  e values are NUL
1e7d0 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  L, take the jump
1e7e0 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  . */.  nField = 
1e7f0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e  pCx->pKeyInfo->n
1e800 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d  Field;.  for(ii=
1e810 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69  0; ii<nField; ii
1e820 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78  ++){.    if( aMx
1e830 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1e840 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70  _Null ){.      p
1e850 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e860 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30  .      pCrsr = 0
1e870 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
1e880 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1e890 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e  t( (aMx[nField].
1e8a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1e8b0 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  )==0 );..  if( p
1e8c0 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
1e8d0 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69  * Populate the i
1e8e0 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e  ndex search key.
1e8f0 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   */.    r.pKeyIn
1e900 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  fo = pCx->pKeyIn
1e910 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1e920 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20   = nField + 1;. 
1e930 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1e940 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41  ACKED_PREFIX_SEA
1e950 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  RCH;.    r.aMem 
1e960 3d 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51  = aMx;.#ifdef SQ
1e970 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
1e980 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1e990 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1e9a0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1e9b0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1e9c0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20   ); }.#endif..  
1e9d0 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
1e9e0 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d   value of R from
1e9f0 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f   register P3. */
1ea00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1ea10 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1ea20 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e  n3);.    R = pIn
1ea30 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20  3->u.i;..    /* 
1ea40 53 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65  Search the B-Tre
1ea50 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63  e index. If no c
1ea60 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1ea70 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70  d is found, jump
1ea80 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f  .    ** to P2. O
1ea90 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74  therwise, copy t
1eaa0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1eab0 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f  conflicting reco
1eac0 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67  rd to.    ** reg
1ead0 69 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c  ister P3 and fal
1eae0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1eaf0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1eb00 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  n.  */.    rc = 
1eb10 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1eb20 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1eb30 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78  , &r, 0, 0, &pCx
1eb40 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20  ->seekResult);. 
1eb50 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20     if( (r.flags 
1eb60 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  & UNPACKED_PREFI
1eb70 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72  X_SEARCH) || r.r
1eb80 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20  owid==R ){.     
1eb90 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1eba0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
1ebb0 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20      pIn3->u.i = 
1ebc0 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  r.rowid;.    }. 
1ebd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1ebe0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
1ebf0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
1ec00 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63  .**.** Use the c
1ec10 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1ec20 65 72 20 50 33 20 61 73 20 61 6e 20 69 6e 74 65  er P3 as an inte
1ec30 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72  ger key.  If a r
1ec40 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74  ecord .** with t
1ec50 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  hat key does not
1ec60 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20   exist in table 
1ec70 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70  of P1, then jump
1ec80 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74   to P2. .** If t
1ec90 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65  he record does e
1eca0 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20  xist, then fall 
1ecb0 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75  through.  The cu
1ecc0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a  rsor is left .**
1ecd0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1ece0 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78   record if it ex
1ecf0 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ists..**.** The 
1ed00 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
1ed10 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  en this operatio
1ed20 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69  n and NotFound i
1ed30 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f  s that this.** o
1ed40 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73  peration assumes
1ed50 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69   the key is an i
1ed60 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20  nteger and that 
1ed70 50 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68  P1 is a table wh
1ed80 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e  ereas.** NotFoun
1ed90 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73  d assumes key is
1eda0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1edb0 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63  ted from MakeRec
1edc0 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73  ord and.** P1 is
1edd0 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   an index..**.**
1ede0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1edf0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e  , NotFound, IsUn
1ee00 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ique.*/.case OP_
1ee10 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20  NotExists: {    
1ee20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1ee30 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1ee40 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1ee50 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1ee60 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
1ee70 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1ee80 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1ee90 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1eea0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
1eeb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1eec0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1eed0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1eee0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1eef0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ef00 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1ef10 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1ef20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1ef30 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1ef40 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
1ef50 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
1ef60 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
1ef70 29 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  ) ){.    res = 0
1ef80 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e  ;.    iKey = pIn
1ef90 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d  3->u.i;.    rc =
1efa0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1efb0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1efc0 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1efd0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1efe0 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1eff0 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1f000 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1f010 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1f020 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1f030 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f040 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f050 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1f060 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1f070 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
1f080 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f090 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  2 - 1;.      ass
1f0a0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1f0b0 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1f0c0 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  }.    pC->seekRe
1f0d0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65  sult = res;.  }e
1f0e0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1f0f0 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e   happens when an
1f100 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   attempt to open
1f110 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f   a read cursor o
1f120 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71  n the .    ** sq
1f130 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1f140 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
1f150 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20  _EMPTY..    */. 
1f160 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1f170 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1f180 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1f190 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1f1a0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1f1b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1f1c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1f1d0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1f1e0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1f1f0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1f200 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1f210 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1f220 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1f230 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1f240 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1f250 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1f260 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1f270 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1f280 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1f290 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1f2a0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1f2b0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1f2c0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1f2d0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1f2e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f2f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1f310 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1f320 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1f330 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f340 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1f350 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1f360 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1f370 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1f380 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1f390 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1f3a0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1f3b0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1f3c0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1f3d0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1f3e0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1f3f0 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1f400 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1f410 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1f420 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1f430 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1f440 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1f450 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1f460 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1f470 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1f480 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1f490 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1f4a0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1f4b0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1f4c0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1f4d0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1f4e0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1f4f0 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1f500 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1f510 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1f520 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1f530 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1f540 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1f550 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1f560 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
1f570 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
1f580 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
1f590 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
1f5a0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
1f5b0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1f5c0 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
1f5d0 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
1f5e0 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
1f5f0 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
1f600 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
1f610 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
1f620 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1f630 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1f640 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b  ease */.  i64 v;
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
1f670 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1f680 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
1f690 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
1f6a0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
1f6b0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
1f6c0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
1f6d0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
1f6e0 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
1f6f0 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
1f700 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f710 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
1f720 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
1f730 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
1f740 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
1f750 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1f760 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
1f770 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
1f780 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
1f790 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
1f7a0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
1f7b0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
1f7c0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
1f7d0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1f7e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f7f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f800 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f810 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1f820 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f830 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d  .  if( NEVER(pC-
1f840 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a  >pCursor==0) ){.
1f850 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
1f860 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
1f870 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
1f880 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
1f890 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1f8a0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
1f8b0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
1f8c0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
1f8d0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
1f8e0 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
1f8f0 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
1f900 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
1f910 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
1f920 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
1f930 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
1f940 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
1f950 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
1f960 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
1f970 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
1f980 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1f990 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
1f9a0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
1f9b0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
1f9c0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
1f9d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
1f9e0 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
1f9f0 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
1fa00 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
1fa10 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
1fa20 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
1fa30 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
1fa40 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
1fa50 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
1fa60 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
1fa70 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
1fa80 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
1fa90 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
1faa0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
1fab0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
1fac0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
1fad0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
1fae0 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
1faf0 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
1fb00 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
1fb10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1fb20 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
1fb30 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
1fb40 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
1fb50 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
1fb60 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
1fb70 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
1fb80 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
1fb90 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
1fba0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
1fbb0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
1fbc0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
1fbd0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
1fbe0 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
1fbf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1fc00 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
1fc10 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
1fc20 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
1fc30 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
1fc40 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
1fc50 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1fc60 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
1fc70 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
1fc80 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
1fc90 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
1fca0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
1fcb0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1fcc0 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
1fcd0 42 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f  BtreeGetCachedRo
1fce0 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  wid(pC->pCursor)
1fcf0 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30  ;.      if( v==0
1fd00 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1fd10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1fd20 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1fd30 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1fd40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1fd50 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
1fd60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1fd70 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1fd80 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1fd90 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1fda0 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
1fdb0 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
1fdc0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1fdd0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fde0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1fdf0 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43  orIsValid(pC->pC
1fe00 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
1fe10 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1fe20 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1fe30 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1fe40 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1fe50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1fe60 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61  ;   /* Cannot fa
1fe70 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72  il following Btr
1fe80 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20  eeLast() */.    
1fe90 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
1fea0 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
1feb0 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
1fec0 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
1fed0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1fee0 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20             v++; 
1fef0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
1ff00 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
1ff10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
1ff20 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65  .      }..#ifnde
1ff30 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1ff40 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
1ff50 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
1ff60 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
1ff70 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1ff80 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1ff90 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
1ffa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
1ffb0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
1ffc0 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
1ffd0 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
1ffe0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
1fff0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
20000 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
20010 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ent);.          
20020 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
20030 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20040 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20050 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20060 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
20070 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
20080 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
20090 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
200a0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
200b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
200c0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
200d0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
200e0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
200f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20100 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
20110 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
20120 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
20130 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
20140 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
20150 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
20160 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
20170 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
20180 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ..        REGIST
20190 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
201a0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
201b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
201c0 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
201d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
201e0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
201f0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
20200 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
20210 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
20220 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
20230 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
20240 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
20250 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
20260 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
20270 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
20280 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
20290 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
202a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
202b0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
202c0 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
202d0 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
202e0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
202f0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  i + 1;.        }
20300 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75  .        pMem->u
20310 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a  .i = v;.      }.
20320 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71  #endif..      sq
20330 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
20340 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
20350 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49  rsor, v<MAX_ROWI
20360 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20  D ? v+1 : 0);.  
20370 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e    }.    if( pC->
20380 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
20390 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
203a0 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
203b0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
203c0 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
203d0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
203e0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
203f0 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
20400 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
20410 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
20420 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
20430 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
20440 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
20450 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
20460 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
20470 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
20480 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
20490 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
204a0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
204b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
204c0 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
204d0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
204e0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
204f0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20510 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
20520 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
20530 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68  /.      /* on th
20540 65 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c  e first attempt,
20550 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d   simply do one m
20560 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75  ore than previou
20570 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c  s */.      v = l
20580 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  astRowid;.      
20590 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
205a0 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64  >1); /* ensure d
205b0 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69  oesn't go negati
205c0 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b  ve */.      v++;
205d0 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a   /* ensure non-z
205e0 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  ero */.      cnt
205f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c   = 0;.      whil
20600 65 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69  e(   ((rc = sqli
20610 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20620 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
20630 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
20680 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
20690 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
206a0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
206b0 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20  cnt<100)){.     
206c0 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20     /* collision 
206d0 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61  - try another ra
206e0 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20  ndom rowid */.  
206f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
20700 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
20710 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
20720 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20   if( cnt<5 ){.  
20730 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22          /* try "
20740 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f  small" random ro
20750 77 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69  wids for the ini
20760 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f  tial attempts */
20770 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20  .          v &= 
20780 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20  0xffffff;.      
20790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
207a0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
207b0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
207c0 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
207d0 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20  ative */.       
207e0 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20   }.        v++; 
207f0 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
20800 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  ro */.      }.  
20810 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20820 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
20830 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
20840 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
20850 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
20860 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
20870 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20880 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
20890 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
208a0 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
208b0 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
208c0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77     }.    pC->row
208d0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
208e0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
208f0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
20900 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
20910 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
20920 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
20930 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
20940 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
20950 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
20960 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
20970 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
20980 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
20990 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
209a0 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
209b0 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
209c0 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
209d0 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
209e0 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
209f0 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
20a00 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
20a10 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
20a20 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
20a30 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
20a40 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
20a50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
20a60 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
20a70 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
20a80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20a90 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
20aa0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
20ab0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
20ac0 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
20ad0 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
20ae0 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
20af0 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
20b00 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
20b10 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
20b20 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
20b30 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
20b40 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
20b50 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
20b60 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
20b70 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
20b80 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
20b90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
20ba0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
20bb0 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
20bc0 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65  s set and if the
20bd0 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
20be0 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72  e last seek oper
20bf0 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69  ation (OP_NotExi
20c00 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65  sts) was a succe
20c10 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ss, then this.**
20c20 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
20c30 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66  not attempt to f
20c40 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69  ind the appropri
20c50 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64  ate row before d
20c60 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65  oing.** the inse
20c70 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74  rt but will inst
20c80 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68  ead overwrite th
20c90 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63  e row that the c
20ca0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72  ursor is.** curr
20cb0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
20cc0 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20  o.  Presumably, 
20cd0 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74  the prior OP_Not
20ce0 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a  Exists opcode.**
20cf0 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73   has already pos
20d00 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
20d10 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54  or correctly.  T
20d20 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
20d30 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62  zation.** that b
20d40 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63  oosts performanc
20d50 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65  e by avoiding re
20d60 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a  dundant seeks..*
20d70 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20d80 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
20d90 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
20da0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
20db0 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
20dc0 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
20dd0 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
20de0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
20df0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
20e00 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
20e10 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
20e20 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
20e30 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
20e40 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
20e50 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
20e60 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
20e70 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74  ay point to a st
20e80 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
20e90 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20  the table-name, 
20ea0 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c  or.** may be NUL
20eb0 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  L. If it is not 
20ec0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
20ed0 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28  pdate-hook .** (
20ee0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
20ef0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
20f00 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ked following a 
20f10 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
20f20 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
20f30 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
20f40 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
20f50 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
20f60 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
20f70 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
20f80 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
20f90 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
20fa0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
20fb0 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
20fc0 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
20fd0 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
20fe0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
20ff0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
21000 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
21010 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
21020 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
21030 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
21040 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
21050 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
21060 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
21070 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
21080 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
21090 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
210a0 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
210b0 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
210c0 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
210d0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
210e0 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65  .** This works e
210f0 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49  xactly like OP_I
21100 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61  nsert except tha
21110 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65  t the key is the
21120 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75  .** integer valu
21130 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61  e P3, not the va
21140 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
21150 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  er stored in reg
21160 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
21170 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61  e OP_Insert: .ca
21180 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a  se OP_InsertInt:
21190 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
211a0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
211b0 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
211c0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
211d0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
211e0 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
211f0 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
21200 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
21210 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
21220 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
21230 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67      /* The integ
21240 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20  er ROWID or key 
21250 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
21260 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
21270 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21280 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74  C;   /* Cursor t
21290 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69  o table into whi
212a0 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69  ch insert is wri
212b0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  tten */.  int nZ
212c0 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ero;        /* N
212d0 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79  umber of zero-by
212e0 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f  tes to append */
212f0 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c  .  int seekResul
21300 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f  t;   /* Result o
21310 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20  f prior seek or 
21320 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52  0 if no USESEEKR
21330 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20  ESULT flag */.  
21340 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
21350 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61    /* database na
21360 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
21370 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
21380 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
21390 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d  bl; /* Table nam
213a0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
213b0 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  opdate hook */. 
213c0 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
213d0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72     /* Opcode for
213e0 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51   update hook: SQ
213f0 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53  LITE_UPDATE or S
21400 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a  QLITE_INSERT */.
21410 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
21420 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
21430 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21440 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21450 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
21460 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
21470 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
21480 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
214a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
214b0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
214c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
214d0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
214e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
214f0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52  ->isTable );.  R
21500 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
21510 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a  p->p2, pData);..
21520 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21530 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a  e==OP_Insert ){.
21540 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d      pKey = &aMem
21550 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
21560 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61  ssert( pKey->fla
21570 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
21580 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
21590 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a  sValid(pKey) );.
215a0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
215b0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
215c0 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b  );.    iKey = pK
215d0 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65  ey->u.i;.  }else
215e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
215f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
21600 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69  sertInt );.    i
21610 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  Key = pOp->p3;. 
21620 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
21630 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
21640 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
21650 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
21660 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
21670 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
21680 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
21690 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44  = iKey;.  if( pD
216a0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
216b0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61  _Null ){.    pDa
216c0 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70  ta->z = 0;.    p
216d0 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d  Data->n = 0;.  }
216e0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
216f0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
21700 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
21710 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65  tr) );.  }.  see
21720 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
21730 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
21740 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
21750 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
21760 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
21770 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
21780 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20   ){.    nZero = 
21790 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
217a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65    }else{.    nZe
217b0 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71  ro = 0;.  }.  sq
217c0 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
217d0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
217e0 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
217f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
21800 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
21810 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20   0, iKey,.      
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21830 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
21840 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21860 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35           pOp->p5
21870 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44   & OPFLAG_APPEND
21880 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
21890 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
218a0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
218b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
218c0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
218d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
218e0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
218f0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
21900 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
21910 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
21920 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
21930 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
21940 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
21950 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
21960 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
21970 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70     zTbl = pOp->p
21980 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28  4.z;.    op = ((
21990 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
219a0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
219b0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
219c0 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20  ITE_INSERT);.   
219d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
219e0 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e  able );.    db->
219f0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
21a00 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
21a10 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  op, zDb, zTbl, i
21a20 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
21a30 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
21a40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
21a60 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
21a70 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
21a80 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
21a90 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
21aa0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
21ab0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
21ac0 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
21ad0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
21ae0 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
21af0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
21b00 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
21b10 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
21b20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21b30 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
21b40 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
21b50 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
21b60 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
21b70 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
21b80 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
21b90 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
21ba0 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c  within an Next l
21bb0 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  oop..**.** If th
21bc0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
21bd0 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73   flag of P2 is s
21be0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
21bf0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
21c00 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
21c10 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
21c20 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
21c30 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
21c40 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
21c50 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
21c60 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
21c70 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
21c80 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  4 is not NULL, t
21c90 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61  hen it is the na
21ca0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
21cb0 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f  that P1 is.** po
21cc0 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20  inting to.  The 
21cd0 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c  update hook will
21ce0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20   be invoked, if 
21cf0 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66  it exists..** If
21d00 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
21d10 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73  then the P1 curs
21d20 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
21d30 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20  n positioned.** 
21d40 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
21d50 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
21d60 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
21d70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
21d80 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79  te: {.  i64 iKey
21d90 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
21da0 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b  pC;..  iKey = 0;
21db0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21dc0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21dd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21de0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21df0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21e00 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21e10 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
21e20 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79  r!=0 );  /* Only
21e30 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20   valid for real 
21e40 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64  tables, no pseud
21e50 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a  otables */..  /*
21e60 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68   If the update-h
21e70 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
21e80 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f  ked, set iKey to
21e90 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
21ea0 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67  e.  ** row being
21eb0 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20   deleted..  */. 
21ec0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
21ed0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
21ee0 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73  >p4.z ){.    ass
21ef0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21f00 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
21f10 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21f20 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69   );  /* lastRowi
21f30 64 20 73 65 74 20 62 79 20 70 72 65 76 69 6f 75  d set by previou
21f40 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f  s OP_NotFound */
21f50 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e  .    iKey = pC->
21f60 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a  lastRowid;.  }..
21f70 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65    /* The OP_Dele
21f80 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73  te opcode always
21f90 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e   follows an OP_N
21fa0 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c  otExists or OP_L
21fb0 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43  ast or.  ** OP_C
21fc0 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d  olumn on the sam
21fd0 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20  e table without 
21fe0 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  any intervening 
21ff0 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a  operations that.
22000 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20    ** might move 
22010 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  or invalidate th
22020 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65  e cursor.  Hence
22030 20 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c   cursor pC is al
22040 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20  ways pointing.  
22050 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f  ** to the row to
22060 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20   be deleted and 
22070 74 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43  the sqlite3VdbeC
22080 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70  ursorMoveto() op
22090 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c  eration.  ** bel
220a0 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e  ow is always a n
220b0 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20  o-op and cannot 
220c0 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72  fail.  We will r
220d0 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68  un it anyhow, th
220e0 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75  ough,.  ** to gu
220f0 61 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75  ard against futu
22100 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  re changes to th
22110 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
22120 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74  ..  **/.  assert
22130 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
22140 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
22150 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
22160 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
22170 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
22180 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
22190 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
221a0 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ror;..  sqlite3B
221b0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
221c0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
221d0 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
221e0 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
221f0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
22200 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22210 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
22220 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
22230 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
22240 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
22250 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
22260 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22270 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
22280 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  z ){.    const c
22290 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61  har *zDb = db->a
222a0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
222b0 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e;.    const cha
222c0 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70  r *zTbl = pOp->p
222d0 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  4.z;.    db->xUp
222e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
222f0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
22300 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c  ITE_DELETE, zDb,
22310 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
22320 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
22330 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
22340 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
22350 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
22360 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
22370 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
22380 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
22390 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
223a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
223b0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
223c0 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
223d0 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
223e0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
223f0 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
22400 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
22410 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
22420 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
22430 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
22440 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
22450 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
22460 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
22470 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
22480 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
22490 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
224a0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
224b0 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
224c0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
224d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
224e0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
224f0 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 0a  ompare P1 P2 P3.
22500 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
22510 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
22520 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
22530 6d 70 61 72 65 73 20 74 68 65 20 72 65 63 6f 72  mpares the recor
22540 64 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20 72 65  d blob in .** re
22550 67 69 73 74 65 72 20 50 33 20 77 69 74 68 20 74  gister P3 with t
22560 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68  he entry that th
22570 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
22580 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
22590 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78 63 6c   to..** If, excl
225a0 75 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  uding the rowid 
225b0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
225c0 64 2c 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  d, the two recor
225d0 64 73 20 61 72 65 20 61 20 6d 61 74 63 68 2c 0a  ds are a match,.
225e0 2a 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** fall through 
225f0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
22600 72 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69  ruction. Otherwi
22610 73 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  se, jump to inst
22620 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63  ruction P2..*/.c
22630 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
22640 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
22650 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
22660 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  res;..  pC = p->
22670 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22680 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
22690 65 72 28 70 43 29 20 29 3b 0a 20 20 70 49 6e 33  er(pC) );.  pIn3
226a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
226b0 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ];.  rc = sqlite
226c0 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
226d0 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 26 72 65  re(pC, pIn3, &re
226e0 73 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  s);.  if( res ){
226f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
22700 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
22710 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.};../* Opcode:
22720 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50   SorterData P1 P
22730 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
22740 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
22750 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74  r P2 the current
22760 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72   sorter data for
22770 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50   sorter cursor P
22780 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  1..*/.case OP_So
22790 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64  rterData: {.  Vd
227a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
227b0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
227c0 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
227d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
227e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
227f0 69 73 53 6f 72 74 65 72 20 29 3b 0a 20 20 72 63  isSorter );.  rc
22800 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
22810 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
22820 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
22830 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
22840 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
22850 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
22860 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
22870 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
22880 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
22890 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
228a0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
228b0 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
228c0 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
228d0 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
228e0 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
228f0 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
22900 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
22910 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
22920 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
22930 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
22940 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
22950 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
22960 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
22970 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
22980 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
22990 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
229a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
229b0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
229c0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
229d0 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f  plete row key fo
229e0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
229f0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
22a00 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
22a10 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65  e data.  .** The
22a20 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f   key is copied o
22a30 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73  nto the P3 regis
22a40 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
22a50 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
22a60 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
22a70 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
22a80 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
22a90 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
22aa0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
22ab0 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
22ac0 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
22ad0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22ae0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
22af0 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f  RowKey:.case OP_
22b00 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
22b10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
22b20 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
22b30 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e    u32 n;.  i64 n
22b40 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  64;..  pOut = &a
22b50 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
22b60 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
22b70 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
22b80 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65   Note that RowKe
22b90 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72  y and RowData ar
22ba0 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79  e really exactly
22bb0 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
22bc0 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
22bd0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22be0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22bf0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22c00 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22c10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
22c20 73 53 6f 72 74 65 72 3d 3d 30 20 29 3b 0a 20 20  sSorter==0 );.  
22c30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22c40 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
22c50 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
22c60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22c70 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e  isIndex || pOp->
22c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
22c90 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
22ca0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22cb0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
22cc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22cd0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
22ce0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
22cf0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22d00 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22d10 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
22d20 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
22d30 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
22d40 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
22d50 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
22d60 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
22d70 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
22d80 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
22d90 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
22da0 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
22db0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
22dc0 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
22dd0 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
22de0 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
22df0 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
22e00 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
22e10 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
22e20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
22e30 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
22e40 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
22e50 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
22e60 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
22e70 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
22e80 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22e90 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
22ea0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22eb0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
22ec0 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
22ed0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
22ee0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22ef0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
22f00 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
22f10 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
22f20 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
22f30 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
22f40 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
22f50 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
22f60 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
22f70 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
22f80 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
22f90 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
22fa0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
22fb0 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
22fc0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
22fd0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
22fe0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
22ff0 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
23000 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
23010 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
23020 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
23030 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
23040 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
23050 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23060 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
23070 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
23080 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
23090 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
230a0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
230b0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
230c0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
230d0 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
230e0 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
230f0 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20  ut, n, 0) ){.   
23100 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
23110 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
23120 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
23130 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
23140 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49  );.  if( pC->isI
23150 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d  ndex ){.    rc =
23160 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
23170 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
23180 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
23190 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
231a0 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
231b0 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
231c0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
231d0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
231e0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
231f0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
23200 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
23210 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
23220 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
23230 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23240 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  : Rowid P1 P2 * 
23250 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
23260 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
23270 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
23280 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
23290 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
232a0 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
232b0 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
232c0 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
232d0 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
232e0 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
232f0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
23300 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
23310 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
23320 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
23330 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
23340 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
23350 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
23360 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
23370 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
23380 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
23390 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
233a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
233b0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
233c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
233d0 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
233e0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
233f0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
23400 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
23410 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23420 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23430 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23440 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23450 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23460 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23470 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
23480 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43  ableReg==0 || pC
23490 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
234a0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
234b0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
234c0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
234d0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
234e0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
234f0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
23500 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
23510 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
23520 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23530 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
23540 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
23550 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
23560 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
23570 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
23580 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
23590 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
235a0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
235b0 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
235c0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
235d0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
235e0 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  &v);.    importV
235f0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
23600 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
23610 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
23620 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
23630 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
23640 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
23650 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
23660 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23670 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
23680 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
23690 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
236a0 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
236b0 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20  sValid ){.      
236c0 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  v = pC->lastRowi
236d0 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  d;.    }else{.  
236e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
236f0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
23700 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
23710 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
23720 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
23730 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
23740 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
23750 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  eto() above */. 
23760 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
23770 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
23780 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23790 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
237a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
237b0 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
237c0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
237d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
237e0 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
237f0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
23800 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
23810 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
23820 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
23830 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
23840 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
23850 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
23860 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23870 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23880 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23890 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
238a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
238b0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
238c0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
238d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
238e0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
238f0 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70 43 2d  ->pCursor || pC-
23900 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
23910 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
23920 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
23930 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
23940 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
23950 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
23960 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
23970 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
23980 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
23990 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
239a0 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
239b0 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
239c0 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
239d0 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
239e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
239f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23a00 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
23a10 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
23a20 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
23a30 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
23a40 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
23a50 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
23a60 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23a70 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
23a80 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
23a90 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
23aa0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
23ab0 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
23ac0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23ad0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
23ae0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
23af0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
23b00 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23b10 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23b20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23b30 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23b40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23b50 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23b60 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23b70 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
23b80 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
23b90 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  sr!=0) ){.    rc
23ba0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
23bb0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
23bc0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
23bd0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
23be0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23bf0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72  eto = 0;.  pC->r
23c00 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
23c10 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
23c20 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23c30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
23c40 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20  0 && res ){.    
23c50 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
23c60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23c70 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
23c80 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
23c90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23ca0 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
23cb0 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
23cc0 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
23cd0 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
23ce0 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
23cf0 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
23d00 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
23d10 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
23d20 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
23d30 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
23d40 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
23d50 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
23d60 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
23d70 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
23d80 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
23d90 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
23da0 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
23db0 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
23dc0 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
23dd0 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
23de0 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
23df0 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
23e00 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
23e10 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
23e20 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
23e30 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
23e40 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
23e50 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
23e60 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
23e70 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
23e80 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
23e90 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
23ea0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
23eb0 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
23ec0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23ed0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23ee0 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
23ef0 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
23f00 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
23f10 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
23f20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
23f30 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
23f40 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  RT-1]++;.  /* Fa
23f50 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
23f60 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
23f70 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
23f80 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23f90 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
23fa0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
23fb0 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
23fc0 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
23fd0 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
23fe0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
23ff0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
24000 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
24010 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
24020 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24030 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
24040 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
24050 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
24060 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
24070 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
24080 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
24090 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
240a0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
240b0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
240c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
240d0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
240e0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
240f0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24100 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
24110 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
24120 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24130 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24140 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24150 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24160 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24170 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24180 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d  >isSorter==(pOp-
24190 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
241a0 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
241b0 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f   = 1;.  if( isSo
241c0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
241d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
241e0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c  SorterRewind(db,
241f0 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65   pC, &res);.  }e
24200 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d  lse{.    pCrsr =
24210 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
24220 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
24230 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
24240 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
24250 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
24260 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
24270 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
24280 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24290 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
242a0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
242b0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
242c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
242d0 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   0;.  }.  pC->nu
242e0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
242f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24300 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
24310 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
24320 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
24330 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
24340 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24350 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
24360 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
24370 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
24380 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
24390 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
243a0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
243b0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
243c0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
243d0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
243e0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
243f0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
24400 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24410 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24420 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
24430 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
24440 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
24450 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24460 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
24470 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
24480 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
24490 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
244a0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
244b0 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
244c0 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
244d0 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
244e0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
244f0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
24500 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
24510 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
24520 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
24530 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
24540 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24550 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24560 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24570 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24580 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
24590 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63  : Prev.*/./* Opc
245a0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
245b0 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63  * * P5.**.** Bac
245c0 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
245d0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
245e0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
245f0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
24600 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
24610 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
24620 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
24630 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
24640 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
24650 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
24660 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
24670 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
24680 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
24690 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
246a0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
246b0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
246c0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
246d0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
246e0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
246f0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
24700 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
24710 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
24720 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
24730 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
24740 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
24750 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
24760 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
24770 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
24780 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
24790 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
247a0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
247b0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
247c0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
247d0 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  mented..*/.case 
247e0 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 20  OP_SorterNext:  
247f0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24800 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
24810 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
24820 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20  ase OP_Next: {  
24830 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24840 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24850 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
24860 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
24870 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20  RUPT;.  assert( 
24880 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24890 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
248a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
248b0 70 2d 3e 70 35 3c 3d 41 72 72 61 79 53 69 7a 65  p->p5<=ArraySize
248c0 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
248d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
248e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
248f0 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72   pC==0 ){.    br
24900 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63  eak;  /* See tic
24910 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d  ket #2273 */.  }
24920 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24930 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
24940 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24950 4e 65 78 74 29 20 29 3b 0a 20 20 69 66 28 20 69  Next) );.  if( i
24960 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
24970 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24980 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
24990 72 4e 65 78 74 20 29 3b 0a 20 20 20 20 72 63 20  rNext );.    rc 
249a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
249b0 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
249c0 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
249d0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
249e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
249f0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
24a00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
24a10 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->pCursor );.   
24a20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24a30 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
24a40 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24a50 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
24a60 65 78 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ext );.    asser
24a70 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24a80 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
24a90 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24aa0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
24ab0 73 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f  s );.    rc = pO
24ac0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70  p->p4.xAdvance(p
24ad0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
24ae0 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  );.  }.  pC->nul
24af0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
24b00 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
24b10 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
24b20 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
24b30 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
24b40 32 20 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  2 - 1;.    if( p
24b50 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75  Op->p5 ) p->aCou
24b60 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b  nter[pOp->p5-1]+
24b70 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
24b80 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
24b90 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
24ba0 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70  ;.#endif.  }.  p
24bb0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
24bc0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
24bd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49  ./* Opcode: IdxI
24be0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a  nsert P1 P2 P3 *
24bf0 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P5.**.** Regist
24c00 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
24c10 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
24c20 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
24c30 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
24c40 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
24c50 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
24c60 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
24c70 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
24c80 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
24c90 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
24ca0 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
24cb0 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
24cc0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
24cd0 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
24ce0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
24cf0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
24d00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
24d10 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
24d20 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
24d30 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
24d40 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
24d50 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
24d60 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  _Insert..*/.case
24d70 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
24d80 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
24d90 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
24da0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
24db0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
24dc0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
24dd0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
24de0 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
24df0 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
24e00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24e10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24e20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24e30 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24e40 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24e50 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24e60 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d  t( pC->isSorter=
24e70 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
24e80 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
24e90 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
24ea0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
24eb0 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
24ec0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
24ed0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24ee0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
24ef0 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
24f00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24f10 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
24f20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c     rc = ExpandBl
24f30 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66  ob(pIn2);.    if
24f40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24f50 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 73 53  ){.      if( isS
24f60 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
24f70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24f80 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
24f90 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a  (db, pC, pIn2);.
24fa0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
24fb0 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
24fc0 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65  ->n;.        zKe
24fd0 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
24fe0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24ff0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
25000 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
25010 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
25020 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  3, .            
25030 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
25040 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
25050 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
25060 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
25070 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 61      );.        a
25080 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25090 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
250a0 20 20 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68          pC->cach
250b0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
250c0 53 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20  STALE;.      }. 
250d0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
250e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
250f0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
25100 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
25110 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
25120 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
25130 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
25140 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
25150 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
25160 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
25170 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
25180 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
25190 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
251a0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
251b0 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
251c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
251d0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
251e0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
251f0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
25200 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
25210 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
25220 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25230 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
25240 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  3<=p->nMem+1 );.
25250 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25260 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25270 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25280 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25290 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
252a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
252b0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
252c0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
252d0 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
252e0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
252f0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
25300 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
25310 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c  Op->p3;.    r.fl
25320 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61  ags = 0;.    r.a
25330 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
25340 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
25350 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
25360 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
25370 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
25380 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
25390 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
253a0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
253b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
253c0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
253d0 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
253e0 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
253f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
25400 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
25410 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25420 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
25430 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
25440 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25450 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
25460 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
25470 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
25480 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25490 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
254a0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
254b0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
254c0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
254d0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
254e0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
254f0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
25500 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
25510 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
25520 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
25530 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
25540 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
25550 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
25560 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
25570 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
25580 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
25590 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
255a0 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
255b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
255c0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
255d0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
255e0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
255f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
25600 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25610 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
25620 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
25630 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
25640 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
25650 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25660 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
25670 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
25680 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
25690 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
256a0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
256b0 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
256c0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
256d0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
256e0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
256f0 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67  f( NEVER(rc) ) g
25700 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25710 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65  _error;.    asse
25720 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25730 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25740 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
25750 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
25760 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
25770 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
25780 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
25790 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
257a0 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20  wid);.      if( 
257b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
257c0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
257d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
257e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
257f0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
25800 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  d;.      pOut->f
25810 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
25820 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
25830 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25840 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
25850 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20  P4 P5.**.** The 
25860 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
25870 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
25880 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
25890 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
258a0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
258b0 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
258c0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
258d0 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
258e0 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
258f0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
25900 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
25910 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
25920 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
25930 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
25940 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
25950 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
25960 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
25970 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
25980 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
25990 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
259a0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
259b0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
259c0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
259d0 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
259e0 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
259f0 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a   by an epsilon .
25a00 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ** prior to the 
25a10 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
25a20 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64  s make the opcod
25a30 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47  e work like IdxG
25a40 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74  T except.** that
25a50 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d   if the key from
25a60 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
25a70 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
25a80 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f  key in the curso
25a90 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  r,.** the result
25aa0 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61   is false wherea
25ab0 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72  s it would be tr
25ac0 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a  ue with IdxGT..*
25ad0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
25ae0 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
25af0 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
25b00 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
25b10 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
25b20 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
25b30 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
25b40 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
25b50 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
25b60 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
25b70 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
25b80 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
25b90 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
25ba0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
25bb0 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
25bc0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
25bd0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
25be0 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
25bf0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
25c00 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
25c10 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
25c20 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25c30 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
25c40 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
25c50 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
25c60 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
25c70 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
25c80 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72  an epsilon prior
25c90 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70   .** to the comp
25ca0 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
25cb0 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77  kes the opcode w
25cc0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a  ork like IdxLE..
25cd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
25ce0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25cf0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
25d00 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
25d10 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
25d20 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
25d30 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
25d40 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
25d50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25d60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25d70 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25d80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25d90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25da0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25db0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
25dc0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
25dd0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
25de0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
25df0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25e00 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
25e10 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
25e20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
25e30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25e40 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
25e50 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
25e60 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
25e70 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
25e80 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
25e90 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
25ea0 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
25eb0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
25ec0 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
25ed0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
25ee0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
25ef0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
25f00 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
25f10 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
25f20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25f30 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
25f40 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
25f50 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
25f60 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
25f70 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25f80 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
25f90 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20  }.#endif.    rc 
25fa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
25fb0 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26  KeyCompare(pC, &
25fc0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  r, &res);.    if
25fd0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
25fe0 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20  P_IdxLT ){.     
25ff0 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20   res = -res;.   
26000 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
26010 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26020 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20  e==OP_IdxGE );. 
26030 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20       res++;.    
26040 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  }.    if( res>0 
26050 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
26060 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20  p->p2 - 1 ;.    
26070 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
26080 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
26090 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
260a0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
260b0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
260c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
260d0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
260e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
260f0 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
26100 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
26110 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
26120 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
26130 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
26140 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
26150 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
26160 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
26170 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
26180 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
26190 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
261a0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
261b0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
261c0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
261d0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
261e0 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
261f0 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
26200 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
26210 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
26220 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
26230 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
26240 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
26250 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
26260 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
26270 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
26280 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
26290 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
262a0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
262b0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
262c0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
262d0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
262e0 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
262f0 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
26300 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
26310 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
26320 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
26330 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
26340 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
26350 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
26360 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
26370 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
26380 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
26390 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
263a0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
263b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
263c0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
263d0 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
263e0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
263f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
26400 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
26410 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
26420 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
26430 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
26440 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
26450 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
26460 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
26470 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65  int iDb;..  asse
26480 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
26490 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
264a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
264b0 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
264c0 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
264d0 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
264e0 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
264f0 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
26500 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
26510 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
26520 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
26530 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
26540 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  pc>=0 ){.      i
26550 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
26560 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
26570 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3b  db->nVdbeActive;
26580 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
26590 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
265a0 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
265b0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
265c0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
265d0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
265e0 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
265f0 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
26600 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
26610 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
26620 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26630 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
26640 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
26650 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
26660 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
26670 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
26680 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
26690 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
266a0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
266b0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
266c0 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
266d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
266e0 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
266f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
26700 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
26710 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
26720 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
26730 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
26740 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
26750 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
26760 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
26770 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
26780 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
26790 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
267a0 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
267b0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
267c0 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
267d0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
267e0 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
267f0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
26800 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26810 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
26820 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
26830 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
26840 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
26850 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
26860 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
26870 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
26880 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
26890 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
268a0 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
268b0 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
268c0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
268d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
268e0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
268f0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
26900 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
26910 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
26920 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
26930 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
26940 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
26950 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
26960 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
26970 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
26980 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
26990 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
269a0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
269b0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
269c0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
269d0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
269e0 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
269f0 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
26a00 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
26a10 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
26a20 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
26a30 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
26a40 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
26a50 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
26a60 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
26a70 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
26a80 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
26a90 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
26aa0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
26ab0 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
26ac0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
26ad0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
26ae0 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
26af0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
26b00 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
26b10 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
26b20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26b30 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
26b40 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
26b50 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
26b60 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
26b70 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
26b80 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
26b90 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
26ba0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
26bb0 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29  <<pOp->p2))!=0 )
26bc0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
26bd0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
26be0 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
26bf0 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
26c00 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
26c10 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
26c20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
26c30 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
26c40 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
26c50 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
26c60 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
26c70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
26c80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
26c90 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
26ca0 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
26cb0 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
26cc0 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
26cd0 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
26ce0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
26cf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26d00 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20   CreateTable P1 
26d10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
26d20 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
26d30 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
26d40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
26d50 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
26d60 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
26d70 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
26d80 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
26d90 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
26da0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
26db0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
26dc0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
26dd0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
26de0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
26df0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
26e00 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
26e10 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
26e20 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
26e30 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
26e40 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
26e50 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
26e60 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
26e70 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
26e80 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
26e90 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
26ea0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
26eb0 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
26ec0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
26ed0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
26ee0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
26ef0 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
26f00 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
26f10 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
26f20 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
26f30 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26f40 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
26f50 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
26f60 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
26f70 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
26f80 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
26f90 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
26fa0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
26fb0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
26fc0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
26fd0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
26fe0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
26ff0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
27000 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
27010 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
27020 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
27030 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  e */.case OP_Cre
27040 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20  ateTable: {     
27050 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
27060 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
27070 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
27080 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
27090 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73    pgno = 0;.  as
270a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
270b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
270c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
270d0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
270e0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
270f0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
27100 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
27110 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
27120 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
27130 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27140 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
27150 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
27160 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
27170 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
27180 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
27190 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
271a0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
271b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
271c0 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
271d0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
271e0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
271f0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
27200 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
27210 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
27220 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
27230 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
27240 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
27250 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
27260 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
27270 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
27280 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
27290 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
272a0 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
272b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
272c0 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
272d0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
272e0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
272f0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
27300 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
27310 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
27320 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
27330 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
27340 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
27350 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
27360 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
27370 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
27380 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
27390 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
273a0 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
273b0 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
273c0 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
273d0 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
273e0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
273f0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
27400 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
27410 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
27420 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
27430 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
27440 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
27450 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
27460 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
27470 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
27480 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
27490 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
274a0 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
274b0 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
274c0 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
274d0 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
274e0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
274f0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
27500 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
27510 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
27520 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
27530 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
27540 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
27550 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
27560 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
27570 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
27580 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
27590 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
275a0 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
275b0 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
275c0 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
275d0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
275e0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
275f0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
27600 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
27610 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
27620 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
27630 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
27640 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
27650 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
27660 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
27670 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
27680 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
27690 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
276a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
276b0 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
276c0 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
276d0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
276e0 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
276f0 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
27700 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
27710 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
27720 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
27730 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
27740 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
27750 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
27760 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
27770 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
27780 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
27790 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
277a0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
277b0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
277c0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
277d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
277e0 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
277f0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
27800 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
27810 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
27820 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
27830 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
27840 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
27850 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27860 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
27870 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
27880 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
27890 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
278a0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
278b0 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
278c0 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
278d0 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
278e0 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
278f0 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
27900 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
27910 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
27920 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
27930 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
27940 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
27950 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
27960 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
27970 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
27980 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27990 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
279a0 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
279b0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
279c0 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
279d0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
279e0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
279f0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
27a00 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
27a10 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
27a20 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
27a30 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
27a40 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
27a50 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
27a60 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
27a70 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
27a80 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
27a90 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
27aa0 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
27ab0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
27ac0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
27ad0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
27ae0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
27af0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
27b00 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
27b10 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
27b20 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
27b30 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
27b40 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
27b50 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
27b60 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
27b70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27b80 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
27b90 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
27ba0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
27bb0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
27bc0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
27bd0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
27be0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
27bf0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
27c00 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
27c10 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
27c20 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
27c30 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
27c40 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
27c50 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
27c60 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
27c70 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
27c80 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
27c90 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
27ca0 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
27cb0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
27cc0 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
27cd0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27ce0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27cf0 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
27d00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
27d10 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
27d20 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
27d30 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
27d40 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
27d50 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
27d60 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
27d70 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
27d80 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
27d90 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
27da0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27db0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27dc0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27dd0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27de0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27df0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27e00 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
27e10 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
27e20 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
27e30 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
27e40 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
27e50 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
27e60 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
27e70 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
27e80 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
27e90 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
27ea0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
27eb0 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
27ec0 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
27ed0 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
27ee0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
27ef0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
27f00 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
27f10 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
27f20 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
27f30 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
27f40 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
27f50 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
27f60 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
27f70 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
27f80 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
27f90 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
27fa0 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
27fb0 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
27fc0 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
27fd0 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
27fe0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
27ff0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
28000 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
28010 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
28020 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
28030 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
28040 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
28050 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
28060 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
28070 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
28080 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
28090 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
280a0 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74  re integer.** st
280b0 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c  ored in reg(P1),
280c0 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28   reg(P1+1), reg(
280d0 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65  P1+2), ....  The
280e0 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73  re are P2 tables
280f0 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a  .** total..**.**
28100 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
28110 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
28120 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
28130 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
28140 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
28150 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
28160 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
28170 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
28180 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
28190 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
281a0 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
281b0 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
281c0 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
281d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
281e0 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
281f0 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
28200 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
28210 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
28220 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
28230 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
28240 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
28250 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a  ecked */.  int j
28260 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
28270 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
28280 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
28290 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
282a0 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
282b0 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
282c0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
282d0 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
282e0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
282f0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
28300 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
28310 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
28320 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
28330 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
28340 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
28350 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
28360 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
28370 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
28380 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
28390 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
283a0 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
283b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
283c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
283d0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
283e0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
283f0 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
28400 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
28410 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
28420 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
28430 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
28440 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
28450 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
28460 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
28470 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
28480 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
28490 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
284a0 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
284b0 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
284c0 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
284d0 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
284e0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
284f0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
28500 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
28510 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
28520 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
28530 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
28540 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
28550 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
28560 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
28570 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28590 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
285a0 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
285b0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
285c0 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
285d0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
285e0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
285f0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
28600 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
28610 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
28620 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
28630 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
28640 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
28650 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
28660 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
28670 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
28680 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
28690 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
286a0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
286b0 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
286c0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
286d0 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
286e0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
286f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
28700 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
28710 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
28720 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
28730 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28740 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
28750 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
28760 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
28770 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
28780 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
28790 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
287a0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
287b0 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
287c0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
287d0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
287e0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
287f0 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
28800 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
28810 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
28820 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
28830 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
28840 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
28850 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
28860 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
28870 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
28880 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
28890 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
288a0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
288b0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
288c0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
288d0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
288e0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
288f0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
28900 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
28910 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28920 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
28930 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
28940 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
28950 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
28960 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
28970 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
28980 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
28990 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
289a0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
289b0 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
289c0 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
289d0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
289e0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
289f0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
28a00 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
28a10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
28a20 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
28a30 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
28a40 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
28a50 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
28a60 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
28a70 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28a80 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
28a90 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
28aa0 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
28ab0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
28ac0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
28ad0 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
28ae0 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
28af0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28b00 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
28b10 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
28b20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
28b30 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
28b40 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
28b50 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
28b60 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
28b70 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
28b80 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
28b90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
28ba0 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
28bb0 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
28bc0 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
28bd0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
28be0 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
28bf0 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
28c00 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
28c10 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
28c20 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
28c30 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
28c40 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
28c50 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
28c60 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
28c70 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
28c80 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
28c90 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
28ca0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
28cb0 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
28cc0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
28cd0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
28ce0 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
28cf0 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
28d00 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
28d10 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
28d20 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
28d30 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
28d40 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
28d50 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
28d60 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
28d70 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
28d80 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
28d90 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
28da0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
28db0 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
28dc0 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
28dd0 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
28de0 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
28df0 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
28e00 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
28e10 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
28e20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
28e30 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
28e40 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
28e50 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
28e60 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28e70 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
28e80 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
28e90 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
28ea0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
28eb0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
28ec0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
28ed0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28ee0 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
28ef0 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
28f00 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
28f10 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
28f20 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
28f30 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
28f40 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
28f50 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
28f60 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
28f70 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
28f80 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
28f90 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
28fa0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
28fb0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
28fc0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
28fd0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
28fe0 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
28ff0 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
29000 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
29030 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
29040 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
29050 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29060 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
29070 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
29080 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
29090 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
290a0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
290b0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
290c0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
290d0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
290e0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
290f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
29100 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
29110 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
29120 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
29130 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
29140 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
29150 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
29160 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
29170 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
29180 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
29190 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
291a0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
291b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
291c0 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
291d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
291e0 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
291f0 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
29200 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
29210 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
29220 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
29230 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
29240 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
29250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29260 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
29270 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
29280 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292a0 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
292b0 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
292c0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
292d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
292e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
292f0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
29300 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
29310 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
29320 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
29330 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
29340 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
29350 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29360 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
29370 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
29380 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
29390 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
293a0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
293b0 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
293c0 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
293d0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
293e0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
293f0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
29400 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
29410 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
29420 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
29430 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
29440 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
29450 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
29460 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
29470 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
29480 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
29490 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
294a0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
294b0 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
294c0 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
294d0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
294e0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
294f0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
29500 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
29510 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
29520 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
29530 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
29540 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
29550 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
29560 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
29570 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
29580 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29590 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
295a0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
295b0 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
295c0 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
295d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
295e0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
295f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
29600 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
29610 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
29620 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
29630 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
29640 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
29650 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
29660 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
29670 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
29680 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
29690 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
296a0 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
296b0 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
296c0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
296d0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
296e0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
296f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
29700 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
29710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
29720 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
29730 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
29740 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
29750 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
29760 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
29770 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
29780 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
29790 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
297a0 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
297b0 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
297c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
297d0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
297e0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
297f0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
29800 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
29810 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
29820 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
29830 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
29840 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
29850 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
29860 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
29870 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
29880 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
29890 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
298a0 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
298b0 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
298c0 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
298d0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
298e0 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
298f0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
29900 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
29910 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
29920 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
29930 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
29940 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
29950 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
29960 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
29970 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
29980 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29990 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
299a0 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
299b0 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
299c0 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
299d0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
299e0 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
299f0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
29a00 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
29a10 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
29a20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
29a30 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
29a40 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
29a50 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
29a60 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
29a70 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
29a80 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
29a90 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
29aa0 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
29ab0 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
29ac0 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
29ad0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
29ae0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
29af0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
29b00 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
29b10 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
29b20 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
29b30 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
29b40 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
29b50 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
29b60 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
29b70 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
29b80 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
29b90 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
29ba0 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
29bb0 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
29bc0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
29bd0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29be0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29bf0 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
29c00 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
29c10 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
29c20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
29c30 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
29c40 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
29c50 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
29c60 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
29c70 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
29c80 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
29c90 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
29ca0 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
29cb0 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
29cc0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
29cd0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
29ce0 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
29cf0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
29d00 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
29d10 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
29d20 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
29d30 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
29d40 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
29d50 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
29d60 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
29d70 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
29d80 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
29d90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
29da0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
29db0 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
29dc0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
29dd0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
29de0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
29df0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
29e00 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
29e10 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
29e20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
29e30 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
29e40 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
29e50 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
29e60 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
29e70 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
29e80 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
29e90 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
29ea0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
29eb0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
29ec0 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
29ed0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
29ee0 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
29ef0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
29f00 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
29f10 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
29f20 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
29f30 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
29f40 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
29f50 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
29f60 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
29f70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
29f80 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
29f90 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
29fa0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
29fb0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29fc0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
29fd0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
29fe0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
29ff0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2a000 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2a010 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2a020 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2a030 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2a040 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2a050 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2a060 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2a070 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2a080 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
2a090 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
2a0a0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
2a0b0 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
2a0c0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
2a0d0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
2a0e0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
2a0f0 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
2a100 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
2a110 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
2a120 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
2a130 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
2a140 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
2a150 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2a160 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
2a170 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
2a180 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2a190 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
2a1a0 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
2a1b0 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2a1c0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2a1d0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2a1e0 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2a1f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2a200 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2a210 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2a220 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2a230 76 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65  valid;.      pMe
2a240 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
2a250 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
2a260 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
2a270 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
2a280 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
2a290 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
2a2a0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2a2b0 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
2a2c0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
2a2d0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2a2e0 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
2a2f0 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e  rt( pc==pFrame->
2a300 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
2a310 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
2a320 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
2a330 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
2a340 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  e->lastRowid = l
2a350 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
2a360 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
2a370 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e  >nChange;.  p->n
2a380 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
2a390 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
2a3a0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
2a3b0 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
2a3c0 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
2a3d0 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
2a3e0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
2a3f0 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
2a400 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
2a410 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
2a420 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
2a430 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b  *)&aMem[p->nMem+
2a440 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  1];.  p->aOp = a
2a450 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
2a460 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
2a470 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
2a480 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28  p->aOnceFlag = (
2a490 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  u8 *)&p->apCsr[p
2a4a0 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d  ->nCursor];.  p-
2a4b0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72  >nOnceFlag = pPr
2a4c0 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20  ogram->nOnce;.  
2a4d0 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65  pc = -1;.  memse
2a4e0 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
2a4f0 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
2a500 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2a510 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
2a520 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a530 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2a540 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
2a550 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
2a560 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
2a570 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
2a580 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
2a590 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
2a5a0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
2a5b0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2a5c0 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
2a5d0 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
2a5e0 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
2a5f0 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
2a600 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
2a610 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
2a620 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
2a630 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
2a640 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
2a650 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
2a660 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
2a670 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
2a680 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
2a690 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2a6a0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
2a6b0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2a6c0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
2a6d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2a6e0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
2a6f0 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
2a700 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2a710 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2a720 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
2a730 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2a740 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  se */.  VdbeFram
2a750 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
2a760 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20   *pIn;.  pFrame 
2a770 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2a780 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
2a790 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
2a7a0 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
2a7b0 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
2a7c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
2a7d0 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
2a7e0 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
2a7f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
2a800 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2a810 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2a820 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
2a830 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2a840 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
2a850 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
2a860 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63   * * *.**.** Inc
2a870 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2a880 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2a890 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2a8a0 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2a8b0 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2a8c0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2a8d0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2a8e0 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2a8f0 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2a900 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2a910 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2a920 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2a930 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2a940 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2a950 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2a960 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2a970 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a980 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2a990 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2a9a0 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
2a9b0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2a9c0 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2a9d0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2a9e0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2a9f0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2aa00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2aa10 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2aa20 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2aa30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2aa40 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
2aa50 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2aa60 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
2aa70 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
2aa80 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
2aa90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2aaa0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2aab0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2aac0 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
2aad0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2aae0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2aaf0 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
2ab00 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
2ab10 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2ab20 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
2ab30 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
2ab40 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
2ab50 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
2ab60 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
2ab70 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
2ab80 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2ab90 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
2aba0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2abb0 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
2abc0 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2abd0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
2abe0 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
2abf0 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
2ac00 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
2ac10 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
2ac20 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64  >p1 ){.    if( d
2ac30 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2ac40 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2ac50 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2ac60 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2ac70 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20  straint==0 ) pc 
2ac80 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
2ac90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2aca0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2acb0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2acc0 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
2acd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2ace0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
2acf0 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
2ad00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2ad10 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2ad20 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2ad30 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2ad40 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2ad50 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2ad60 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2ad70 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2ad80 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2ad90 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2ada0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2adb0 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2adc0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2add0 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2ade0 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2adf0 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2ae00 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2ae10 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2ae20 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2ae30 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2ae40 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2ae50 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2ae60 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2ae70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2ae80 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2ae90 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70   in2 */.  Mem *p
2aea0 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65  In1;.  VdbeFrame
2aeb0 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2aec0 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2aed0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2aee0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2aef0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2af00 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2af10 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2af20 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2af30 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2af40 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2af50 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2af60 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2af70 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2af80 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2af90 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2afa0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2afb0 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2afc0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2afd0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2afe0 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2aff0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2b000 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2b010 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b020 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2b030 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2b040 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2b050 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2b060 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
2b070 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2b080 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2b090 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2b0a0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b0b0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b0c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b0d0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b0e0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b0f0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b100 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b110 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b120 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b130 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2b140 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b150 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b160 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b170 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b180 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b190 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b1a0 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2b1b0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b1c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b1d0 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2b1e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2b1f0 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2b200 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
2b210 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a  ess than zero, j
2b220 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2b230 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b240 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b250 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b260 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b270 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b280 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b290 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b2a0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b2b0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b2c0 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2b2d0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2b2e0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2b2f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b300 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2b310 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2b320 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
2b330 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2b340 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2b350 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b360 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
2b370 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
2b380 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2b390 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b3a0 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2b3b0 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2b3c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2b3d0 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2b3e0 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2b3f0 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2b400 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2b410 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2b420 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2b430 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2b440 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2b450 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2b460 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2b470 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2b480 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2b490 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
2b4a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b4b0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b4c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b4d0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b4e0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b4f0 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
2b500 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70  pOp->p3;.  if( p
2b510 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
2b520 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b530 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2b540 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b550 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2b560 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2b570 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2b580 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2b590 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2b5a0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2b5b0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2b5c0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2b5d0 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
2b5e0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
2b5f0 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
2b600 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
2b610 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
2b620 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
2b630 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
2b640 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
2b650 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
2b660 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
2b670 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
2b680 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
2b690 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
2b6a0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
2b6b0 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
2b6c0 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2b6d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2b6e0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2b6f0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2b700 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2b710 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2b720 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2b730 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2b740 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2b750 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2b760 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2b770 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2b780 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2b790 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2b7a0 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2b7b0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2b7c0 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Rec);.    sqlite
2b7d0 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2b7e0 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  e(pRec);.  }.  c
2b7f0 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
2b800 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
2b810 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2b820 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
2b830 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  m );.  ctx.pMem 
2b840 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2b850 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2b860 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2b870 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2b880 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2b890 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2b8a0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2b8b0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2b8c0 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2b8d0 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2b8e0 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2b8f0 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2b900 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2b910 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
2b920 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2b930 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2b940 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2b950 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2b960 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2b970 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2b980 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2b990 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2b9a0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2b9b0 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2b9c0 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2b9d0 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2b9e0 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2b9f0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2ba00 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2ba10 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2ba20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2ba30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2ba40 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2ba50 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2ba60 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2ba70 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  Error;.  }.  if(
2ba80 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b   ctx.skipFlag ){
2ba90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2baa0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2bab0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2bac0 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2bad0 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2bae0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2baf0 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2bb00 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64    }..  sqlite3Vd
2bb10 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
2bb20 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  x.s);..  break;.
2bb30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2bb40 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2bb50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
2bb60 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2bb70 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2bb80 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2bb90 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2bba0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2bbb0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2bbc0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2bbd0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2bbe0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2bbf0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2bc00 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2bc10 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2bc20 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2bc30 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2bc40 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2bc50 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2bc60 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2bc70 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2bc80 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2bc90 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2bca0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2bcb0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2bcc0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2bcd0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2bce0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2bcf0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2bd00 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2bd10 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2bd20 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2bd30 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2bd40 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2bd50 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2bd60 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2bd70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bd80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
2bd90 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
2bda0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2bdb0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2bdc0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2bdd0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2bde0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2bdf0 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2be00 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2be10 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2be20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2be30 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2be40 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2be50 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2be60 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2be70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2be80 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2be90 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2bea0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2beb0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2bec0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2bed0 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2bee0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2bef0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2bf00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bf10 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2bf20 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2bf30 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2bf40 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2bf50 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2bf60 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2bf70 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2bf80 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2bf90 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2bfa0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2bfb0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2bfc0 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2bfd0 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2bfe0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2bff0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2c000 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2c010 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2c020 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2c030 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2c040 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2c050 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2c060 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2c070 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2c080 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2c090 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2c0a0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2c0b0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2c0c0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2c0d0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2c0e0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2c0f0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2c100 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2c110 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2c120 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2c130 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2c140 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2c150 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2c180 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2c190 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2c1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2c1b0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2c1c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2c1d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2c1e0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2c1f0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2c200 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2c210 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
2c220 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
2c230 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
2c240 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
2c250 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2c260 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
2c270 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2c280 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
2c290 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2c2a0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2c2b0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29  OINT_RESTART.  )
2c2c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2c2d0 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2c2e0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
2c2f0 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
2c300 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
2c310 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
2c320 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2c330 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
2c340 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
2c350 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
2c360 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
2c370 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
2c380 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c390 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
2c3a0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
2c3b0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
2c3c0 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
2c3d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
2c3e0 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
2c3f0 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
2c400 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
2c410 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72   Change the jour
2c420 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61  nal mode of data
2c430 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50  base P1 to P3. P
2c440 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  3 must be one of
2c450 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f   the.** PAGER_JO
2c460 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61  URNALMODE_XXX va
2c470 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e  lues. If changin
2c480 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61  g between the va
2c490 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a  rious rollback.*
2c4a0 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c  * modes (delete,
2c4b0 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69   truncate, persi
2c4c0 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f  st, off and memo
2c4d0 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73  ry), this is a s
2c4e0 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69  imple.** operati
2c4f0 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71  on. No IO is req
2c500 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uired..**.** If 
2c510 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72  changing into or
2c520 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65   out of WAL mode
2c530 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69   the procedure i
2c540 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74  s more complicat
2c550 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ed..**.** Write 
2c560 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
2c570 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f  ing the final jo
2c580 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65  urnal-mode to re
2c590 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
2c5a0 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64  se OP_JournalMod
2c5b0 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d  e: {    /* out2-
2c5c0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2c5d0 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
2c600 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
2c610 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
2c620 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
2c630 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
2c640 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2c650 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
2c660 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
2c670 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
2c680 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
2c690 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
2c6c0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
2c6d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c6e0 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
2c6f0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
2c700 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
2c710 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
2c720 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
2c730 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20  endif..  eNew = 
2c740 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
2c750 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  t( eNew==PAGER_J
2c760 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54  OURNALMODE_DELET
2c770 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2c780 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2c790 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20  MODE_TRUNCATE . 
2c7a0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2c7b0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c7c0 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20  _PERSIST .      
2c7d0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2c7e0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a  JOURNALMODE_OFF.
2c7f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2c800 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2c810 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20  E_MEMORY.       
2c820 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2c830 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
2c840 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2c850 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c860 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73  _QUERY.  );.  as
2c870 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2c880 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2c890 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2c8a0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2c8b0 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
2c8c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2c8d0 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
2c8e0 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
2c8f0 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
2c900 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
2c910 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2c920 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
2c930 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c940 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
2c950 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
2c960 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
2c970 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
2c980 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
2c990 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
2c9a0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2c9b0 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
2c9c0 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
2c9d0 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20  (pPager, 1);..  
2c9e0 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
2c9f0 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20  a transition to 
2ca00 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c  journal_mode=WAL
2ca10 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
2ca20 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72    ** in temporar
2ca30 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20  y storage or if 
2ca40 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74  the VFS does not
2ca50 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20   support shared 
2ca60 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69  memory .  */.  i
2ca70 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2ca80 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
2ca90 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72    && (sqlite3Str
2caa0 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
2cab0 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ==0           /*
2cac0 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20   Temp file */.  
2cad0 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33       || !sqlite3
2cae0 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65  PagerWalSupporte
2caf0 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20  d(pPager))   /* 
2cb00 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79  No shared-memory
2cb10 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b   support */.  ){
2cb20 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
2cb30 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e  ;.  }..  if( (eN
2cb40 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20  ew!=eOld).   && 
2cb50 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eOld==PAGER_JOU
2cb60 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20  RNALMODE_WAL || 
2cb70 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cb80 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29  NALMODE_WAL).  )
2cb90 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61  {.    if( !db->a
2cba0 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d  utoCommit || db-
2cbb0 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20 29  >nVdbeActive>1 )
2cbc0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
2cbd0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
2cbe0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2cbf0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2cc00 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63  b, .          "c
2cc10 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
2cc20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
2cc30 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
2cc40 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
2cc50 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cc60 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
2cc70 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
2cc80 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
2cc90 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65  break;.    }else
2cca0 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
2ccb0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2ccc0 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
2ccd0 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
2cce0 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
2ccf0 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
2cd00 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
2cd10 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
2cd20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
2cd30 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
2cd40 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
2cd50 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
2cd60 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
2cd70 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
2cd80 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
2cd90 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
2cda0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
2cdb0 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
2cdc0 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
2cdd0 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
2cde0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2cdf0 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
2ce00 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  al(pPager);.    
2ce10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2ce20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2ce30 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
2ce40 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2ce50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20  ager, eNew);.   
2ce60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
2ce70 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47  se if( eOld==PAG
2ce80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
2ce90 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20  EMORY ){.       
2cea0 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73   /* Cannot trans
2ceb0 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66  ition directly f
2cec0 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41  rom MEMORY to WA
2ced0 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46  L.  Use mode OFF
2cee0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
2cef0 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a  n intermediate *
2cf00 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
2cf10 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2cf20 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47  Mode(pPager, PAG
2cf30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
2cf40 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  FF);.      }.  .
2cf50 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20        /* Open a 
2cf60 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
2cf70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2cf80 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
2cf90 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  the journal.    
2cfa0 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20    ** mode, this 
2cfb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61  transaction alwa
2cfc0 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61  ys uses a rollba
2cfd0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20  ck journal..    
2cfe0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
2cff0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
2d000 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30  sInTrans(pBt)==0
2d010 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
2d020 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2d030 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
2d040 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69  te3BtreeSetVersi
2d050 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50  on(pBt, (eNew==P
2d060 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d070 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a  _WAL ? 2 : 1));.
2d080 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2d090 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
2d0a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2d0b0 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20  AL */..  if( rc 
2d0c0 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
2d0d0 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d  ld;.  }.  eNew =
2d0e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2d0f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2d100 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
2d110 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
2d120 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p2];.  pOut->fla
2d130 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
2d140 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
2d150 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
2d160 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
2d170 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
2d180 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
2d190 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2d1a0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
2d1b0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
2d1c0 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
2d1d0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2d1e0 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
2d1f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
2d200 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2d210 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
2d220 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2d230 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
2d240 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2d250 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
2d260 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
2d270 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  m * * * * *.**.*
2d280 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74  * Vacuum the ent
2d290 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  ire database.  T
2d2a0 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
2d2b0 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74  cause other virt
2d2c0 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20  ual.** machines 
2d2d0 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e  to be created an
2d2e0 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e  d run.  It may n
2d2f0 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f  ot be called fro
2d300 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72  m within.** a tr
2d310 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  ansaction..*/.ca
2d320 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a  se OP_Vacuum: {.
2d330 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2d340 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63  dOnly==0 );.  rc
2d350 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
2d360 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
2d370 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   db);.  break;.}
2d380 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
2d390 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2d3a0 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
2d3b0 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
2d3c0 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
2d3d0 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
2d3e0 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
2d3f0 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
2d400 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
2d410 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
2d420 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
2d430 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
2d440 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
2d450 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
2d460 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2d470 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2d480 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2d490 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
2d4a0 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
2d4b0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
2d4c0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
2d4d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2d4e0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2d4f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2d500 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2d510 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
2d520 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61  ->p1))!=0 );.  a
2d530 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d540 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
2d550 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2d560 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
2d570 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
2d580 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
2d590 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2d5a0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2d5b0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2d5c0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2d5d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d5e0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2d5f0 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2d600 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2d610 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2d620 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2d630 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2d640 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2d650 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2d660 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2d670 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2d680 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2d690 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2d6a0 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2d6b0 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2d6c0 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2d6d0 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2d6e0 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2d6f0 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2d700 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2d710 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2d720 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2d730 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2d740 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2d750 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2d760 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2d770 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2d780 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2d790 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2d7a0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2d7b0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2d7c0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2d7d0 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2d7e0 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2d7f0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
2d800 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
2d810 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
2d820 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
2d830 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
2d840 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
2d850 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
2d860 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
2d870 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
2d880 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
2d890 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
2d8a0 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
2d8b0 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
2d8c0 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
2d8d0 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
2d8e0 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
2d8f0 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
2d900 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
2d910 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
2d920 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
2d930 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
2d940 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
2d950 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
2d960 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2d970 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
2d980 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
2d990 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
2d9a0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2d9b0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2d9c0 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
2d9d0 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
2d9e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
2d9f0 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
2da00 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
2da10 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
2da20 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
2da30 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
2da40 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2da50 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
2da60 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
2da70 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
2da80 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
2da90 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
2daa0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2dab0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21  DbMask)1)<<p1))!
2dac0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2dad0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2dae0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2daf0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2db00 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2db10 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2db20 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2db30 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2db40 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2db50 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2db60 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2db70 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2db80 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2db90 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2dba0 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2dbb0 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2dbc0 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2dbd0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2dbe0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2dbf0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2dc00 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2dc10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2dc20 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2dc30 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2dc40 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2dc50 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2dc60 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2dc70 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2dc80 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2dc90 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2dca0 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2dcb0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2dcc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2dcd0 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2dce0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2dcf0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2dd00 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2dd10 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2dd20 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2dd30 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2dd40 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2dd50 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2dd60 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2dd70 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2dd80 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2dd90 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2dda0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2ddb0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ddc0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2ddd0 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2dde0 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72  b ) importVtabEr
2ddf0 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rMsg(p, pVTab->p
2de00 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Vtab);.  break;.
2de10 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2de20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2de30 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2de40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2de50 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2de60 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
2de70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2de80 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2de90 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2dea0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2deb0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
2dec0 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
2ded0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2dee0 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
2def0 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2df00 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2df10 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2df20 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2df30 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2df40 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2df50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2df60 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2df70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2df80 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2df90 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2dfa0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2dfb0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2dfc0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2dfd0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2dfe0 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2dff0 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2e000 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2e010 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2e020 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2e030 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2e040 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2e050 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2e060 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2e070 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2e080 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2e090 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e0a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e0b0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e0c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e0d0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e0e0 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2e0f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2e100 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2e110 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2e120 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2e130 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2e140 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2e150 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2e160 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2e170 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2e180 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2e190 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2e1a0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2e1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2e1c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2e1d0 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2e1e0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2e1f0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2e200 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2e210 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2e220 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2e230 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
2e240 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20  eader );.  pCur 
2e250 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73  = 0;.  pVtabCurs
2e260 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20  or = 0;.  pVtab 
2e270 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2e280 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2e290 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
2e2a0 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
2e2b0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70  dule;.  assert(p
2e2c0 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
2e2d0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2e2e0 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
2e2f0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2e300 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2e310 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2e320 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2e330 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2e340 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2e350 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2e360 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2e370 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2e380 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2e390 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
2e3a0 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2e3b0 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2e3c0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2e3d0 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2e3e0 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2e3f0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2e400 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2e410 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
2e420 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
2e430 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2e440 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
2e450 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2e460 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2e470 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2e480 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2e490 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2e4a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2e4b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e4c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2e4d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e4e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e4f0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2e500 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2e510 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
2e520 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
2e530 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
2e540 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
2e550 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
2e560 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
2e570 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
2e580 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
2e590 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
2e5a0 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
2e5b0 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
2e5c0 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
2e5d0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2e5e0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
2e5f0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
2e600 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
2e610 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
2e620 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2e630 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2e640 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2e650 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
2e660 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
2e670 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
2e680 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
2e690 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
2e6a0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
2e6b0 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
2e6c0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
2e6d0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
2e6e0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
2e6f0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
2e700 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
2e710 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
2e720 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
2e730 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
2e740 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
2e750 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
2e760 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
2e770 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
2e780 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
2e790 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
2e7a0 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
2e7b0 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
2e7c0 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
2e7d0 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
2e7e0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
2e7f0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
2e800 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
2e810 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
2e820 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2e830 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2e840 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
2e850 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2e860 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2e870 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
2e880 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
2e890 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2e8a0 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2e8b0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2e8c0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2e8d0 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
2e8e0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2e8f0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
2e900 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
2e910 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
2e920 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
2e930 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2e940 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e950 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
2e960 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
2e970 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
2e980 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
2e990 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
2e9a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
2e9b0 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
2e9c0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
2e9d0 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
2e9e0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2e9f0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2ea00 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
2ea10 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
2ea20 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
2ea30 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
2ea40 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
2ea50 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
2ea60 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
2ea70 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
2ea80 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
2ea90 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
2eaa0 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
2eab0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2eac0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
2ead0 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20   */.  {.    res 
2eae0 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  = 0;.    apArg =
2eaf0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66   p->apArg;.    f
2eb00 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
2eb10 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70  ; i++){.      ap
2eb20 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
2eb30 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  i+1];.      sqli
2eb40 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2eb50 79 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20  ype(apArg[i]);. 
2eb60 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56     }..    p->inV
2eb70 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2eb80 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
2eb90 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
2eba0 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
2ebb0 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
2ebc0 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
2ebd0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2ebe0 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
2ebf0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2ec00 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2ec10 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
2ec20 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2ec30 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
2ec40 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
2ec50 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2ec60 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2ec70 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2ec80 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2ec90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2eca0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2ecb0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2ecc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ecd0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2ece0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2ecf0 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2ed00 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
2ed10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2ed20 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
2ed30 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
2ed40 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
2ed50 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
2ed60 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
2ed70 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
2ed80 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
2ed90 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
2eda0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2edb0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2edc0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2edd0 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
2ede0 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2edf0 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
2ee00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2ee10 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2ee20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ee30 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2ee40 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2ee50 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2ee60 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
2ee70 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
2ee80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
2ee90 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2eea0 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
2eeb0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2eec0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2eed0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
2eee0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2eef0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2ef00 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2ef10 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2ef20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2ef30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2ef40 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
2ef50 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
2ef60 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
2ef70 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20  ontext));..  /* 
2ef80 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
2ef90 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
2efa0 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
2efb0 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
2efc0 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
2efd0 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e  nts to sContext.
2efe0 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65  s so in case the
2eff0 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a   user-function .
2f000 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65    ** can use the
2f010 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2f020 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
2f030 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
2f040 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e  a .  ** new one.
2f050 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2f060 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e  dbeMemMove(&sCon
2f070 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a  text.s, pDest);.
2f080 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2f090 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45  (&sContext.s, ME
2f0a0 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d  M_Null);..  rc =
2f0b0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2f0c0 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  n(pCur->pVtabCur
2f0d0 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  sor, &sContext, 
2f0e0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f  pOp->p2);.  impo
2f0f0 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2f100 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
2f110 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
2f120 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
2f130 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
2f140 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
2f150 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
2f160 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33  nction to the P3
2f170 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20   register. We.  
2f180 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72  ** do this regar
2f190 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
2f1a0 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   or not an error
2f1b0 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73   occurred to ens
2f1c0 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e  ure any.  ** dyn
2f1d0 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  amic allocation 
2f1e0 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61  in sContext.s (a
2f1f0 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20   Mem struct) is 
2f200 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a   released..  */.
2f210 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2f220 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f  ngeEncoding(&sCo
2f230 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e  ntext.s, encodin
2f240 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
2f250 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20  eMemMove(pDest, 
2f260 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20  &sContext.s);.  
2f270 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2f280 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
2f290 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2f2a0 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
2f2b0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2f2c0 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
2f2d0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2f2e0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2f2f0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2f300 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f310 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2f320 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f330 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2f340 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
2f350 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2f360 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
2f370 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
2f380 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
2f390 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
2f3a0 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
2f3b0 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
2f3c0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
2f3d0 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
2f3e0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
2f3f0 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
2f400 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
2f410 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2f420 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2f430 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
2f440 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
2f450 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2f460 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2f470 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2f480 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
2f490 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2f4a0 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
2f4b0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2f4c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f4d0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2f4e0 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
2f4f0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2f500 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2f510 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2f520 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f530 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2f540 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2f550 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2f560 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
2f570 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
2f580 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
2f590 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
2f5a0 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
2f5b0 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
2f5c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2f5d0 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
2f5e0 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
2f5f0 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
2f600 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
2f610 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2f620 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
2f630 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
2f640 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
2f650 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
2f660 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
2f670 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
2f680 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
2f690 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
2f6a0 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
2f6b0 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
2f6c0 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
2f6d0 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56  r..  */.  p->inV
2f6e0 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2f6f0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2f700 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
2f710 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e  Cursor);.  p->in
2f720 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2f730 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2f740 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2f750 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2f760 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
2f770 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
2f780 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2f790 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73  .  }..  if( !res
2f7a0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
2f7b0 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
2f7c0 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
2f7d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2f7e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f7f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f800 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f810 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2f820 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f830 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2f840 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
2f850 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2f860 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2f870 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2f880 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2f890 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2f8a0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
2f8b0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
2f8c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
2f8d0 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
2f8e0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
2f8f0 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
2f900 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
2f910 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
2f920 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
2f930 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
2f940 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2f950 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
2f960 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
2f970 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2f980 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
2f990 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
2f9a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f9b0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2f9c0 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65  Rename );.  asse
2f9d0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2f9e0 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72  Name) );.  asser
2f9f0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2fa00 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  0 );.  REGISTER_
2fa10 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
2fa20 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28  Name);.  assert(
2fa30 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20   pName->flags & 
2fa40 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73  MEM_Str );.  tes
2fa50 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
2fa60 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
2fa70 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
2fa80 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
2fa90 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65  _UTF16BE );.  te
2faa0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2fab0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2fac0 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  LE );.  rc = sql
2fad0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2fae0 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51  coding(pName, SQ
2faf0 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66  LITE_UTF8);.  if
2fb00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2fb10 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61  ){.    rc = pVta
2fb20 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2fb30 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
2fb40 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74  ->z);.    import
2fb50 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2fb60 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
2fb70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
2fb80 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2fb90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fba0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fbb0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
2fbc0 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
2fbd0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
2fbe0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
2fbf0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
2fc00 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
2fc10 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
2fc20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2fc30 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
2fc40 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
2fc50 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
2fc60 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
2fc70 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
2fc80 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
2fc90 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
2fca0 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
2fcb0 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
2fcc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
2fcd0 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
2fce0 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
2fcf0 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
2fd00 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
2fd10 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
2fd20 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
2fd30 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
2fd40 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
2fd50 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
2fd60 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
2fd70 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
2fd80 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
2fd90 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
2fda0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2fdb0 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
2fdc0 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
2fdd0 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
2fde0 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
2fdf0 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
2fe00 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
2fe10 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
2fe20 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
2fe30 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
2fe40 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
2fe50 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
2fe60 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
2fe70 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
2fe80 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
2fe90 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
2fea0 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
2feb0 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
2fec0 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
2fed0 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
2fee0 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
2fef0 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
2ff00 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
2ff10 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
2ff20 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
2ff30 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
2ff40 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
2ff50 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
2ff60 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
2ff70 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
2ff80 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
2ff90 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
2ffa0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2ffb0 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
2ffc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2ffd0 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
2ffe0 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
2fff0 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
30000 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
30010 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
30020 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
30030 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
30040 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
30050 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
30060 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
30070 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
30080 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
30090 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
300a0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
300b0 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
300c0 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
300d0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
300e0 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
300f0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
30100 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
30110 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
30120 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
30130 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
30140 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
30150 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
30160 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
30170 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
30180 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70  dule;.  nArg = p
30190 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
301a0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
301b0 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
301c0 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e  ALWAYS(pModule->
301d0 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20  xUpdate) ){.    
301e0 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
301f0 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f  t = db->vtabOnCo
30200 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72  nflict;.    apAr
30210 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
30220 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
30230 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
30240 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
30250 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
30260 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29  memIsValid(pX) )
30270 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
30280 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b  ToChange(p, pX);
30290 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
302a0 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
302b0 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
302c0 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
302d0 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
302e0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
302f0 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
30300 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
30310 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
30320 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
30330 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
30340 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
30350 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
30360 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
30370 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30380 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30390 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
303a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
303b0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
303c0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
303d0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
303e0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
303f0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
30400 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
30410 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
30420 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
30430 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
30440 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
30450 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
30460 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
30470 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
30480 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
30490 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
304a0 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
304b0 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
304c0 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
304d0 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
304e0 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
304f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
30500 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
30510 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30520 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30530 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30540 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
30550 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
30560 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
30570 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
30580 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
30590 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
305a0 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
305b0 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
305c0 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
305d0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
305e0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
305f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
30600 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
30610 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
30620 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
30630 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
30640 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
30650 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
30660 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
30670 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
30680 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
30690 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
306a0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
306b0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
306c0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
306d0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
306e0 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
306f0 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
30700 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
30710 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
30720 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
30730 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
30740 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
30750 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
30760 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
30770 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
30780 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
30790 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
307a0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
307b0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
307c0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
307d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
307e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
307f0 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
30800 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
30810 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
30820 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
30830 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
30840 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
30850 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
30860 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
30870 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
30880 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
30890 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
308a0 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
308b0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
308c0 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
308d0 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
308e0 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
308f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30900 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
30910 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
30920 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a   Opcode: Trace *
30930 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30940 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
30950 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
30960 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
30970 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
30980 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
30990 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
309a0 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
309b0 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
309c0 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ack..*/.case OP_
309d0 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20  Trace: {.  char 
309e0 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20  *zTrace;.  char 
309f0 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78  *z;..  if( db->x
30a00 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
30a10 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
30a20 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
30a30 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
30a40 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
30a50 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
30a60 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
30a70 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
30a80 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
30a90 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
30aa0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
30ab0 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
30ac0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
30ad0 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  UG.  if( (db->fl
30ae0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c  ags & SQLITE_Sql
30af0 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20  Trace)!=0.   && 
30b00 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
30b10 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
30b20 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
30b30 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
30b40 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
30b50 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
30b60 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64  Trace);.  }.#end
30b70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
30b80 55 47 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  UG */.  break;.}
30b90 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63  .#endif.../* Opc
30ba0 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20  ode: Noop * * * 
30bb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74  * *.**.** Do not
30bc0 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74  hing.  This inst
30bd0 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e  ruction is often
30be0 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d   useful as a jum
30bf0 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e  p.** destination
30c00 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  ..*/./*.** The m
30c10 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63  agic Explain opc
30c20 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73  ode are only ins
30c30 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61  erted when expla
30c40 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20  in==2 (which.** 
30c50 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74  is to say when t
30c60 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
30c70 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20   PLAN syntax is 
30c80 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f  used.).** This o
30c90 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e  pcode records in
30ca0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
30cb0 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49  he optimizer.  I
30cc0 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20  t is the.** the 
30cd0 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e  same as a no-op.
30ce0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65    This opcodesne
30cf0 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61  ver appears in a
30d00 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d   real VM program
30d10 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20  ..*/.default: { 
30d20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73           /* This
30d30 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f   is really OP_No
30d40 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69  op and OP_Explai
30d50 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
30d60 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
30d70 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  oop || pOp->opco
30d80 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
30d90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
30da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
30df0 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65  The cases of the
30e00 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
30e10 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e  t above this lin
30e20 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  e should all be 
30e30 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36  indented.** by 6
30e40 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68   spaces.  But th
30e50 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70  e left-most 6 sp
30e60 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72  aces have been r
30e70 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76  emoved to improv
30e80 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69  e the.** readabi
30e90 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73  lity.  From this
30ea0 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20   point on down, 
30eb0 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e  the normal inden
30ec0 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65  tation rules are
30ed0 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a  .** restored..**
30ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20  ***********/.   
30f30 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f   }..#ifdef VDBE_
30f40 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20  PROFILE.    {.  
30f50 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20      u64 elapsed 
30f60 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
30f70 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  ) - start;.     
30f80 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20   pOp->cycles += 
30f90 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70  elapsed;.      p
30fa0 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30  Op->cnt++;.#if 0
30fb0 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
30fc0 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75  (stdout, "%10llu
30fd0 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20   ", elapsed);.  
30fe0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
30ff0 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
31000 20 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72   origPc, &aOp[or
31010 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  igPc]);.#endif. 
31020 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
31030 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
31040 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68  g code adds noth
31050 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61  ing to the actua
31060 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  l functionality.
31070 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72      ** of the pr
31080 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e  ogram.  It is on
31090 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74  ly here for test
310a0 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
310b0 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65  g..    ** On the
310c0 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20   other hand, it 
310d0 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79  does burn CPU cy
310e0 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20  cles every time 
310f0 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
31100 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f  he evaluator loo
31110 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65  p.  So we can le
31120 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20  ave it out when 
31130 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  NDEBUG is define
31140 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65  d..    */.#ifnde
31150 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73  f NDEBUG.    ass
31160 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70  ert( pc>=-1 && p
31170 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66  c<p->nOp );..#if
31180 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
31190 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
311a0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
311b0 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70  c!=0 ) fprintf(p
311c0 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e  ->trace,"rc=%d\n
311d0 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
311e0 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
311f0 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52  (OPFLG_OUT2_PRER
31200 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54  ELEASE|OPFLG_OUT
31210 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
31220 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
31230 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  race, pOp->p2, &
31240 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
31250 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
31260 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
31270 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20   OPFLG_OUT3 ){. 
31280 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
31290 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70  race(p->trace, p
312a0 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
312b0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
312c0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f  .    }.#endif  /
312d0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
312e0 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45  /.#endif  /* NDE
312f0 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54  BUG */.  }  /* T
31300 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f  he end of the fo
31310 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c  r(;;) loop the l
31320 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63  oops through opc
31330 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  odes */..  /* If
31340 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
31350 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74  oint, it means t
31360 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73  hat execution is
31370 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20   finished with. 
31380 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20   ** an error of 
31390 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a  some kind..  */.
313a0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a  vdbe_error_halt:
313b0 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b  .  assert( rc );
313c0 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
313d0 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
313e0 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
313f0 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69  Log!=0 );.  sqli
31400 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61  te3_log(rc, "sta
31410 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74  tement aborts at
31420 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a   %d: [%s] %s", .
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20     pc, p->zSql, 
31450 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73  p->zErrMsg);.  s
31460 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
31470 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
31480 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
31490 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ) db->mallocFail
314a0 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53  ed = 1;.  rc = S
314b0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69  QLITE_ERROR;.  i
314c0 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  f( resetSchemaOn
314d0 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73  Fault>0 ){.    s
314e0 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
314f0 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63  hema(db, resetSc
31500 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a  hemaOnFault-1);.
31510 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69    }..  /* This i
31520 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
31530 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
31540 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
31550 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
31560 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
31570 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
31580 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
31590 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
315a0 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c  _return:.  db->l
315b0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
315c0 6f 77 69 64 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e  owid;.  p->aCoun
315d0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
315e0 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2d 31 5d  TATUS_VM_STEP-1]
315f0 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70   += (int)nVmStep
31600 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c  ;.  sqlite3VdbeL
31610 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72  eave(p);.  retur
31620 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
31630 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
31640 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
31650 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
31660 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
31670 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
31680 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
31690 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
316a0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
316b0 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
316c0 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
316d0 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
316e0 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
316f0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
31700 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
31710 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
31720 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
31730 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
31740 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
31750 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
31760 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74  ErrMsg, db, "out
31770 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20   of memory");.  
31780 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
31790 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  M;.  goto vdbe_e
317a0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
317b0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
317c0 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64  r any other kind
317d0 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e   of fatal error.
317e0 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61    The "rc" varia
317f0 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20  ble.  ** should 
31800 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e  hold the error n
31810 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  umber..  */.abor
31820 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a  t_due_to_error:.
31830 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72    assert( p->zEr
31840 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  rMsg==0 );.  if(
31850 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
31860 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
31870 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21  NOMEM;.  if( rc!
31880 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
31890 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
318a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
318b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
318c0 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
318d0 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
318e0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
318f0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
31900 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
31910 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
31920 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
31930 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
31940 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
31950 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
31960 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
31970 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
31980 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
31990 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
319a0 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
319b0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
319c0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
319d0 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
319e0 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
319f0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
31a00 0a                                               .