/ Hex Artifact Content
Login

Artifact 640a7e140c7dc0465eff7e515252e434ca77286e:


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: 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61 74  is macro evaluat
1040: 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65 69  es to true if ei
1050: 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65 20  ther the update 
1060: 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65 75  hook or the preu
1070: 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61 72  pdate.** hook ar
1080: 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64 61  e enabled for da
1090: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20 44  tabase connect D
10a0: 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  B..*/.#ifdef SQL
10b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
10c0: 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66 69  DATE_HOOK.# defi
10d0: 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  ne HAS_UPDATE_HO
10e0: 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d 3e  OK(DB)   ((DB)->
10f0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
1100: 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74  ck||(DB)->xUpdat
1110: 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65  eCallback).#else
1120: 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50  .# define HAS_UP
1130: 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20 28  DATE_HOOK(DB)  (
1140: 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c  (DB)->xUpdateCal
1150: 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f  lback).#endif../
1160: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
1170: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
1180: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
1190: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 46 6f  h type the OP_Fo
11a0: 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  und opcode.** is
11b0: 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73 20   executed. This 
11c0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
11d0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
11e0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a  he foreign key.*
11f0: 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c  * operation impl
1200: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50  emented using OP
1210: 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72  _FkIsZero is wor
1220: 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61  king. This varia
1230: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
1240: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
1250: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
1260: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
1270: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
1280: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
1290: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
12a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  int sqlite3_foun
12b0: 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  d_count = 0;.#en
12c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  dif../*.** Test 
12d0: 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65  a register to se
12e0: 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20  e if it exceeds 
12f0: 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69  the current maxi
1300: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
1310: 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65  * If it does, re
1320: 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78  cord the new max
1330: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
1340: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1350: 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21  QLITE_TEST) && !
1360: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1370: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1380: 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54  ).# define UPDAT
1390: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50  E_MAX_BLOBSIZE(P
13a0: 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62  )  updateMaxBlob
13b0: 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20  size(P).#else.# 
13c0: 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41  define UPDATE_MA
13d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65  X_BLOBSIZE(P).#e
13e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
13f0: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1400: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1410: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1420: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1430: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1440: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
1450: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
1460: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
1470: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
1480: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
1490: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14b0: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29  tringify(P,enc))
14c0: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
14d0: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
14e0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
14f0: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1500: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1510: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1520: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1530: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1540: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1550: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1560: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1570: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1580: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1590: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
15a0: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
15b0: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
15c0: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
15d0: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
15e0: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
15f0: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1600: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1610: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1620: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1630: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1640: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1650: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1660: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1670: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1680: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1690: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
16a0: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
16b0: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20   string into an 
16c0: 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a  MEM_Dyn string..
16d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68  */.#define Deeph
16e0: 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20  emeralize(P) \. 
16f0: 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67    if( ((P)->flag
1700: 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20  s&MEM_Ephem)!=0 
1710: 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69  \.       && sqli
1720: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
1730: 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f  iteable(P) ){ go
1740: 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20  to no_mem;}../* 
1750: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
1760: 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f 70  he cursor was op
1770: 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1780: 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70 63  P_OpenSorter opc
1790: 6f 64 65 2e 20 2a 2f 0a 23 69 66 64 65 66 20 53  ode. */.#ifdef S
17a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45  QLITE_OMIT_MERGE
17b0: 5f 53 4f 52 54 0a 23 20 64 65 66 69 6e 65 20 69  _SORT.# define i
17c0: 73 53 6f 72 74 65 72 28 78 29 20 30 0a 23 65 6c  sSorter(x) 0.#el
17d0: 73 65 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f  se.# define isSo
17e0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
17f0: 6f 72 74 65 72 21 3d 30 29 0a 23 65 6e 64 69 66  orter!=0).#endif
1800: 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74  ../*.** Argument
1810: 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20   pMem points at 
1820: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
1830: 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74  will be passed t
1840: 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69  o a.** user-defi
1850: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  ned function or 
1860: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
1870: 75 73 65 72 20 61 73 20 74 68 65 20 72 65 73 75  user as the resu
1880: 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a  lt of a query..*
1890: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
18a0: 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79  ets the pMem->ty
18b0: 70 65 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  pe variable used
18c0: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f   by the sqlite3_
18d0: 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f  value_*() .** ro
18e0: 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20  utines..*/.void 
18f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
1900: 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65  oreType(Mem *pMe
1910: 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20  m){.  int flags 
1920: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20  = pMem->flags;. 
1930: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1940: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65  _Null ){.    pMe
1950: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
1960: 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73  _NULL;.  }.  els
1970: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
1980: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65  M_Int ){.    pMe
1990: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
19a0: 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20  _INTEGER;.  }.  
19b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
19c0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
19d0: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
19e0: 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a  LITE_FLOAT;.  }.
19f0: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1a00: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
1a10: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1a20: 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65  QLITE_TEXT;.  }e
1a30: 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  lse{.    pMem->t
1a40: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
1a50: 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  B;.  }.}../*.** 
1a60: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1a70: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1a80: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1a90: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1aa0: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1ab0: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1ac0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
1ad0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1ae0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1af0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1b00: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1b10: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1b20: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1b30: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1b40: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1b50: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1b60: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1b70: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1b80: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1b90: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1ba0: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1bb0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1bc0: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
1bd0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
1be0: 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73 6f  int isBtreeCurso
1bf0: 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  r     /* True fo
1c00: 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73 65  r B-Tree.  False
1c10: 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
1c20: 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a  e or vtab */.){.
1c30: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
1c40: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
1c50: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
1c60: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
1c70: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
1c80: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
1c90: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1ca0: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1cb0: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1cc0: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1cd0: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1ce0: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1cf0: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1d00: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1d10: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1d20: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1d30: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
1d40: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
1d50: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
1d60: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
1d70: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
1d80: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
1d90: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1da0: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1db0: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1dc0: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1dd0: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1de0: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1df0: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1e00: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1e10: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1e20: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1e30: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
1e40: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1e50: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
1e60: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
1e70: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
1e80: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
1e90: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1ea0: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1eb0: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1ec0: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1ed0: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1ee0: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1ef0: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1f00: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1f10: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1f20: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1f30: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
1f40: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
1f50: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
1f60: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
1f70: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
1f80: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
1f90: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1fa0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1fb0: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1fc0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1fd0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1fe0: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1ff0: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
2000: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
2010: 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20 20   nByte = .      
2020: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2030: 62 65 43 75 72 73 6f 72 29 29 20 2b 20 0a 20 20  beCursor)) + .  
2040: 20 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73      (isBtreeCurs
2050: 6f 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43  or?sqlite3BtreeC
2060: 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b  ursorSize():0) +
2070: 20 0a 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64   .      2*nField
2080: 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20  *sizeof(u32);.. 
2090: 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d   assert( iCur<p-
20a0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
20b0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
20c0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
20d0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
20e0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
20f0: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2100: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2110: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2120: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
2130: 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30  w(pMem, nByte, 0
2140: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2150: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2160: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2170: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
2180: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
2190: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
21a0: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
21b0: 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c  ;.    pCx->nFiel
21c0: 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20  d = nField;.    
21d0: 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a 20 20  if( nField ){.  
21e0: 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65 20 3d      pCx->aType =
21f0: 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a   (u32 *)&pMem->z
2200: 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56  [ROUND8(sizeof(V
2210: 64 62 65 43 75 72 73 6f 72 29 29 5d 3b 0a 20 20  dbeCursor))];.  
2220: 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73 42 74    }.    if( isBt
2230: 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  reeCursor ){.   
2240: 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 20     pCx->pCursor 
2250: 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20  = (BtCursor*).  
2260: 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a          &pMem->z
2270: 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56  [ROUND8(sizeof(V
2280: 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 6e 46  dbeCursor))+2*nF
2290: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
22a0: 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
22b0: 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28  BtreeCursorZero(
22c0: 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
22d0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
22e0: 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n pCx;.}../*.** 
22f0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61  Try to convert a
2300: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75   value into a nu
2310: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2320: 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a  tion if we can.*
2330: 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20  * do so without 
2340: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2350: 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
2360: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72  ords, if the str
2370: 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b  ing.** looks lik
2380: 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76  e a number, conv
2390: 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75  ert it into a nu
23a0: 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65  mber.  If it doe
23b0: 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69  s not.** look li
23c0: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61  ke a number, lea
23d0: 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a  ve it alone..*/.
23e0: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
23f0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2400: 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69  (Mem *pRec){.  i
2410: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
2420: 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  & (MEM_Real|MEM_
2430: 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Int))==0 ){.    
2440: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
2450: 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20     i64 iValue;. 
2460: 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63     u8 enc = pRec
2470: 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28 20 28  ->enc;.    if( (
2480: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2490: 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  Str)==0 ) return
24a0: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
24b0: 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26  3AtoF(pRec->z, &
24c0: 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c  rValue, pRec->n,
24d0: 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72   enc)==0 ) retur
24e0: 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 71  n;.    if( 0==sq
24f0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
2500: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2510: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2520: 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d       pRec->u.i =
2530: 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 70   iValue;.      p
2540: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2550: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c 73 65  M_Int;.    }else
2560: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 72 20  {.      pRec->r 
2570: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 20 20  = rValue;.      
2580: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
2590: 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d 0a 20  EM_Real;.    }. 
25a0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63   }.}../*.** Proc
25b0: 65 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d  essing is determ
25c0: 69 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e  ine by the affin
25d0: 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a  ity parameter:.*
25e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
25f0: 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49  INTEGER:.** SQLI
2600: 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20  TE_AFF_REAL:.** 
2610: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2620: 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f  IC:.**    Try to
2630: 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   convert pRec to
2640: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2650: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20  esentation or a 
2660: 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d  .**    floating-
2670: 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61  point representa
2680: 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67  tion if an integ
2690: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26a0: 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70  n.**    is not p
26b0: 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74  ossible.  Note t
26c0: 68 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  hat the integer 
26d0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
26e0: 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70  s.**    always p
26f0: 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69  referred, even i
2700: 66 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69  f the affinity i
2710: 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a  s REAL, because.
2720: 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72  **    an integer
2730: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2740: 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66  is more space ef
2750: 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e  ficient on disk.
2760: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2770: 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f  F_TEXT:.**    Co
2780: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20  nvert pRec to a 
2790: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
27a0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ion..**.** SQLIT
27b0: 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20  E_AFF_NONE:.**  
27c0: 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69    No-op.  pRec i
27d0: 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a  s unchanged..*/.
27e0: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
27f0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d  yAffinity(.  Mem
2800: 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20   *pRec,         
2810: 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f   /* The value to
2820: 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20   apply affinity 
2830: 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  to */.  char aff
2840: 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54  inity,      /* T
2850: 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
2860: 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75  e applied */.  u
2870: 38 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20  8 enc           
2880: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74     /* Use this t
2890: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
28a0: 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74  ){.  if( affinit
28b0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  y==SQLITE_AFF_TE
28c0: 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c  XT ){.    /* Onl
28d0: 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f  y attempt the co
28e0: 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54  nversion to TEXT
28f0: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
2900: 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a  integer or real.
2910: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
2920: 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20  ation (blob and 
2930: 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20  NULL do not get 
2940: 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e  converted) but n
2950: 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20  o string.    ** 
2960: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a  representation..
2970: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30      */.    if( 0
2980: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2990: 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63  EM_Str) && (pRec
29a0: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
29b0: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
29c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
29d0: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65  MemStringify(pRe
29e0: 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20  c, enc);.    }. 
29f0: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26     pRec->flags &
2a00: 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  = ~(MEM_Real|MEM
2a10: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  _Int);.  }else i
2a20: 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c  f( affinity!=SQL
2a30: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a  ITE_AFF_NONE ){.
2a40: 20 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69      assert( affi
2a50: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2a60: 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69  _INTEGER || affi
2a70: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2a80: 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20  _REAL.          
2a90: 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d     || affinity==
2aa0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2ab0: 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e  IC );.    applyN
2ac0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ad0: 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52  Rec);.    if( pR
2ae0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
2af0: 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71  Real ){.      sq
2b00: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b10: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b20: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2b30: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2b40: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20  t the type of a 
2b50: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
2b60: 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f  t or a result co
2b70: 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e  lumn.** into a n
2b80: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
2b90: 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68  ation.  Use eith
2ba0: 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  er INTEGER or RE
2bb0: 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20  AL whichever.** 
2bc0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20  is appropriate. 
2bd0: 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65   But only do the
2be0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69   conversion if i
2bf0: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69  t is possible wi
2c00: 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66  thout.** loss of
2c10: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64   information and
2c20: 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69   return the revi
2c30: 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20  sed type of the 
2c40: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74  argument..*/.int
2c50: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
2c60: 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69  umeric_type(sqli
2c70: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
2c80: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  {.  Mem *pMem = 
2c90: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66  (Mem*)pVal;.  if
2ca0: 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d 3d 53 51  ( pMem->type==SQ
2cb0: 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20  LITE_TEXT ){.   
2cc0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2cd0: 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 20  inity(pMem);.   
2ce0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2cf0: 74 6f 72 65 54 79 70 65 28 70 4d 65 6d 29 3b 0a  toreType(pMem);.
2d00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4d 65    }.  return pMe
2d10: 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  m->type;.}../*.*
2d20: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d30: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d40: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d50: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d60: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d70: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d80: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d90: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2da0: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2db0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2dc0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dd0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2de0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2df0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2e00: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e20: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
2e30: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
2e40: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2e50: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2e60: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
2e70: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
2e80: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
2e90: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
2ea0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
2eb0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
2ec0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
2ed0: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
2ee0: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
2ef0: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
2f00: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
2f10: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
2f20: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
2f30: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
2f40: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
2f50: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
2f60: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
2f70: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
2f80: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
2f90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2fa0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2fb0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2fc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2fd0: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
2fe0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
2ff0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3000: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3010: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3020: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3030: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3040: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3050: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3060: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3070: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3080: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
3090: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
30a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
30b0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
30c0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
30d0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
30e0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
30f0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3100: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3110: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3120: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3130: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3140: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3150: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3160: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
3170: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3180: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
3190: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
31a0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
31b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
31c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
31d0: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
31e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
31f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3200: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3210: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3220: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3230: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3240: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3250: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3260: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3270: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
3280: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
3290: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
32a0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
32b0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
32c0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
32d0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
32e0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
32f0: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3300: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3310: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3320: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3340: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3350: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3360: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
3370: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
3380: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
3390: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
33a0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
33b0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
33c0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
33d0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
33e0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
33f0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3400: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3410: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3420: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3430: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3440: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3450: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3460: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
3470: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
3480: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3490: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
34a0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
34b0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
34c0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
34d0: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
34e0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
34f0: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3500: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3510: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3520: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3530: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3540: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3550: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3560: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
3570: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
3580: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
3590: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
35a0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
35b0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
35c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
35d0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
35e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
35f0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3600: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3610: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3620: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3630: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3640: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3650: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3660: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3670: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3680: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3690: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
36a0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
36b0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
36c0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
36d0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
36e0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 46 49  memTracePrint(FI
36f0: 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29  LE *out, Mem *p)
3700: 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  {.  if( p->flags
3710: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
3720: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3730: 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73  " NULL");.  }els
3740: 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20  e if( (p->flags 
3750: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  & (MEM_Int|MEM_S
3760: 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d  tr))==(MEM_Int|M
3770: 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 66  EM_Str) ){.    f
3780: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 73 69  printf(out, " si
3790: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
37a0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
37b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
37c0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
37d0: 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70  ut, " i:%lld", p
37e0: 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20  ->u.i);.#ifndef 
37f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3800: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c  TING_POINT.  }el
3810: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3820: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
3830: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3840: 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23   r:%g", p->r);.#
3850: 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66  endif.  }else if
3860: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3870: 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 66  _RowSet ){.    f
3880: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 28 72  printf(out, " (r
3890: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
38a0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
38b0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
38c0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
38d0: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
38e0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
38f0: 22 20 22 29 3b 0a 20 20 20 20 66 70 72 69 6e 74  " ");.    fprint
3900: 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75  f(out, "%s", zBu
3910: 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63  f);.  }.}.static
3920: 20 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72   void registerTr
3930: 61 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69  ace(FILE *out, i
3940: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3950: 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  {.  fprintf(out,
3960: 20 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69   "REG[%d] = ", i
3970: 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65  Reg);.  memTrace
3980: 50 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20  Print(out, p);. 
3990: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c   fprintf(out, "\
39a0: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
39b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
39c0: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
39d0: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
39e0: 20 69 66 28 70 2d 3e 74 72 61 63 65 29 72 65 67   if(p->trace)reg
39f0: 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
3a00: 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace,R,M).#else.#
3a10: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
3a20: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
3a30: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
3a40: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
3a50: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
3a60: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
3a70: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
3a80: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
3a90: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
3aa0: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
3ab0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
3ac0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
3ad0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b  ./*.** The CHECK
3ae0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 6d  _FOR_INTERRUPT m
3af0: 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65 72  acro defined her
3b00: 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69  e looks to see i
3b10: 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
3b20: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f 75  _interrupt() rou
3b30: 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63 61  tine has been ca
3b40: 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61 73  lled.  If it has
3b50: 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70   been, then.** p
3b60: 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65  rocessing of the
3b70: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69 73   VDBE program is
3b80: 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a   interrupted..**
3b90: 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 61  .** This macro a
3ba0: 64 64 65 64 20 74 6f 20 65 76 65 72 79 20 69 6e  dded to every in
3bb0: 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20 64  struction that d
3bc0: 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72  oes a jump in or
3bd0: 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d  der to.** implem
3be0: 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69  ent a loop.  Thi
3bf0: 73 20 74 65 73 74 20 75 73 65 64 20 74 6f 20 62  s test used to b
3c00: 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67 6c  e on every singl
3c10: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a  e instruction,.*
3c20: 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e 74  * but that meant
3c30: 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e 67   we more testing
3c40: 20 74 68 61 6e 20 77 65 20 6e 65 65 64 65 64 2e   than we needed.
3c50: 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e    By only testin
3c60: 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e  g the.** flag on
3c70: 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69 6f   jump instructio
3c80: 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28 73 6d  ns, we get a (sm
3c90: 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72 6f  all) speed impro
3ca0: 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69  vement..*/.#defi
3cb0: 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  ne CHECK_FOR_INT
3cc0: 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28 20  ERRUPT \.   if( 
3cd0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
3ce0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
3cf0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
3d00: 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44  pt;...#ifndef ND
3d10: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3d20: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3d30: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3d40: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3d50: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3d60: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3d70: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3d80: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3d90: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3da0: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3db0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3dc0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3dd0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3de0: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3df0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3e00: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3e10: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3e20: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3e30: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3e40: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3e50: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3e60: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3e70: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3e80: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3e90: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3ea0: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3eb0: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3ec0: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3ed0: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3ee0: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3ef0: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3f00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3f10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3f20: 72 61 6e 73 66 65 72 20 65 72 72 6f 72 20 6d 65  ransfer error me
3f30: 73 73 61 67 65 20 74 65 78 74 20 66 72 6f 6d 20  ssage text from 
3f40: 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2e  an sqlite3_vtab.
3f50: 7a 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74  zErrMsg (text st
3f60: 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72  ored.** in memor
3f70: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
3f80: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20  sqlite3_malloc) 
3f90: 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a 45 72 72  into a Vdbe.zErr
3fa0: 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65 64  Msg (text stored
3fb0: 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  .** in memory ob
3fc0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
3fd0: 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f  te3DbMalloc)..*/
3fe0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6d 70  .static void imp
3ff0: 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 56 64  ortVtabErrMsg(Vd
4000: 62 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76  be *p, sqlite3_v
4010: 74 61 62 20 2a 70 56 74 61 62 29 7b 0a 20 20 73  tab *pVtab){.  s
4020: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4030: 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  db;.  sqlite3DbF
4040: 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
4050: 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
4060: 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
4070: 44 75 70 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a  Dup(db, pVtab->z
4080: 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
4090: 65 33 5f 66 72 65 65 28 70 56 74 61 62 2d 3e 7a  e3_free(pVtab->z
40a0: 45 72 72 4d 73 67 29 3b 0a 20 20 70 56 74 61 62  ErrMsg);.  pVtab
40b0: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d  ->zErrMsg = 0;.}
40c0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
40d0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
40e0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
40f0: 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e   can then return
4100: 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56  ..**.** sqlite3V
4110: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d  dbeMakeReady() m
4120: 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65  ust be called be
4130: 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e  fore this routin
4140: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
4150: 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72   close the progr
4160: 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20  am with a final 
4170: 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73  OP_Halt and to s
4180: 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61  et up the callba
4190: 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65  cks.** and the e
41a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69  rror message poi
41b0: 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  nter..**.** When
41c0: 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65  ever a row or re
41d0: 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76 61  sult data is ava
41e0: 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75  ilable, this rou
41f0: 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72  tine will either
4200: 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72  .** invoke the r
4210: 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28  esult callback (
4220: 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29  if there is one)
4230: 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a   or return with.
4240: 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a  ** SQLITE_ROW..*
4250: 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d  *.** If an attem
4260: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70  pt is made to op
4270: 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61  en a locked data
4280: 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20  base, then this 
4290: 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20  routine.** will 
42a0: 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68  either invoke th
42b0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
42c0: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
42d0: 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  ) or it will.** 
42e0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
42f0: 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20  SY..**.** If an 
4300: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e  error occurs, an
4310: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
4320: 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d  s written to mem
4330: 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  ory obtained.** 
4340: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
4350: 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72  loc() and p->zEr
4360: 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20  rMsg is made to 
4370: 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65  point to that me
4380: 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72  mory..** The err
4390: 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65  or code is store
43a0: 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74  d in p->rc and t
43b0: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
43c0: 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  rns SQLITE_ERROR
43d0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
43e0: 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74  allback ever ret
43f0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  urns non-zero, t
4400: 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hen the program 
4410: 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61  exits.** immedia
4420: 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c  tely.  There wil
4430: 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65  l be no error me
4440: 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70 2d  ssage but the p-
4450: 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20  >rc field is.** 
4460: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42  set to SQLITE_AB
4470: 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75  ORT and this rou
4480: 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e  tine will return
4490: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
44a0: 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c  *.** A memory al
44b0: 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63  location error c
44c0: 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62  auses p->rc to b
44d0: 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
44e0: 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a  NOMEM and this.*
44f0: 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74  * routine to ret
4500: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4510: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61  ..**.** Other fa
4520: 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72  tal errors retur
4530: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
4540: 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73  **.** After this
4550: 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e   routine has fin
4560: 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64  ished, sqlite3Vd
4570: 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f  beFinalize() sho
4580: 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74  uld be.** used t
4590: 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d  o clean up the m
45a0: 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65 66  ess that was lef
45b0: 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74  t behind..*/.int
45c0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
45d0: 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20  (.  Vdbe *p     
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
45f0: 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b  * The VDBE */.){
4600: 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20 20 20 20  .  int pc=0;    
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4620: 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   The program cou
4630: 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f  nter */.  Op *aO
4640: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
4650: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4660: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4670: 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  pOp;            
4680: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4690: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  t operation */. 
46a0: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
46b0: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56  _OK;        /* V
46c0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
46d0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
46e0: 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f  = p->db;       /
46f0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a  * The database *
4700: 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68 65  /.  u8 resetSche
4710: 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f  maOnFault = 0; /
4720: 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20 61  * Reset schema a
4730: 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66  fter an error if
4740: 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75   positive */.  u
4750: 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43  8 encoding = ENC
4760: 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  (db);     /* The
4770: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
4780: 6e 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ng */.#ifndef SQ
4790: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
47a0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
47b0: 74 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b  t checkProgress;
47c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
47d0: 20 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c   if progress cal
47e0: 6c 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c  lbacks are enabl
47f0: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f  ed */.  int nPro
4800: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20  gressOps = 0;   
4810: 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78     /* Opcodes ex
4820: 65 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f  ecuted since pro
4830: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20  gress callback. 
4840: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4850: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4860: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4870: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4880: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4890: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
48a0: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
48b0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
48c0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
48d0: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
48e0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
48f0: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
4900: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
4910: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4920: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
4930: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
4940: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4950: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
4960: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
4970: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f  sult of last OP_
4980: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f  Compare operatio
4990: 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72  n */.  int *aPer
49a0: 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  mute = 0;       
49b0: 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e    /* Permutation
49c0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20   of columns for 
49d0: 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20  OP_Compare */.  
49e0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  i64 lastRowid = 
49f0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
4a00: 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f  /* Saved value o
4a10: 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  f the last inser
4a20: 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65  t ROWID */.#ifde
4a30: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4a40: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4a60: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4a70: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4a80: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
4a90: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
4aa0: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
4ab0: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
4ac0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4ad0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4ae0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
4af0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4b00: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
4b10: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
4b20: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4b30: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4b40: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4b50: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4b60: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4b70: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4b80: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4b90: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4ba0: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4bb0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4bc0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4bd0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4be0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4bf0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4c00: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4c10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
4c20: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4c30: 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  Y );.  p->rc = S
4c40: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
4c50: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4c60: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4c70: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4c80: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4c90: 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46  y = 0;.  CHECK_F
4ca0: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4cc0: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65  ceSql(p);.#ifnde
4cd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4ce0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4cf0: 20 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20    checkProgress 
4d00: 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  = db->xProgress!
4d10: 3d 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  =0;.#endif.#ifde
4d20: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4d30: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
4d40: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69  ignMalloc();.  i
4d50: 66 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26 26 20  f( p->pc==0  && 
4d60: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4d70: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4d80: 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  ng)!=0 ){.    in
4d90: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4da0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4db0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4dc0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4dd0: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4de0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4df0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4e00: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4e10: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4e20: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
4e30: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
4e40: 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a  alloc();.#endif.
4e50: 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20    for(pc=p->pc; 
4e60: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4e70: 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
4e80: 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d  ( pc>=0 && pc<p-
4e90: 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20  >nOp );.    if( 
4ea0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
4eb0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
4ec0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4ed0: 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d  ILE.    origPc =
4ee0: 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d   pc;.    start =
4ef0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
4f00: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70  ;.#endif.    pOp
4f10: 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20   = &aOp[pc];..  
4f20: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
4f30: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
4f40: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
4f50: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
4f60: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4f70: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
4f80: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d  ){.      if( pc=
4f90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72  =0 ){.        pr
4fa0: 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63 75  intf("VDBE Execu
4fb0: 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b  tion Trace:\n");
4fc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4fd0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4fe0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
4ff0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5000: 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20  p(p->trace, pc, 
5010: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
5020: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
5030: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5040: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
5050: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
5060: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
5070: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
5080: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
5090: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
50a0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
50b0: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
50c0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
50d0: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
50e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
50f0: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
5100: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5110: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5120: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
5130: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5140: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
5150: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
5160: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5170: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
5180: 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68  K.    /* Call 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 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
51b0: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
51c0: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
51d0: 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f      ** of VDBE o
51e0: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
51f0: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
5200: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
5210: 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71  ion of.    ** sq
5220: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5230: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
5240: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
5250: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
5260: 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20  led)..    ** If 
5270: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5280: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5290: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
52a0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
52b0: 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72   with.    ** a r
52c0: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
52d0: 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a  E_ABORT..    */.
52e0: 20 20 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f      if( checkPro
52f0: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69  gress ){.      i
5300: 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  f( db->nProgress
5310: 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70  Ops==nProgressOp
5320: 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  s ){.        int
5330: 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20 70 72   prc;.        pr
5340: 63 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  c = db->xProgres
5350: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
5360: 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  rg);.        if(
5370: 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20   prc!=0 ){.     
5380: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
5390: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
53a0: 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
53b0: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20  error_halt;.    
53c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50      }.        nP
53d0: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
53e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50        }.      nP
53f0: 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20  rogressOps++;.  
5400: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
5410: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
5420: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
5430: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
5440: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
5450: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
5460: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
5470: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
5480: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
5490: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
54a0: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
54b0: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
54c0: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
54d0: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
54e0: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
54f0: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
5500: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
5510: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
5520: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
5530: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
5540: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
5550: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5560: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5570: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5580: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5590: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
55a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
55b0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
55c0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
55d0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d  ->p2];.      mem
55e0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
55f0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64   pOut);.      Vd
5600: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75  beMemRelease(pOu
5610: 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
5620: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
5630: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53  .    }..    /* S
5640: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5650: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
5660: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5670: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
5680: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5690: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
56a0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
56b0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
56c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
56d0: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
56e0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
56f0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5700: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5710: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5720: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5730: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
5740: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5750: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
5760: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5770: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5780: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5790: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
57a0: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
57b0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
57c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
57d0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
57e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
57f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5800: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5810: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5820: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
5830: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5840: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5850: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5860: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5870: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5880: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5890: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p3]) );.      RE
58a0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
58b0: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
58c0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p3]);.    }.   
58d0: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
58e0: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  gs & OPFLG_OUT2)
58f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5900: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5910: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5920: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5930: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5940: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5950: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5960: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5970: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5980: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5990: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
59a0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
59b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
59c0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
59d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
59e0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
59f0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
5a00: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5a10: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5a20: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5a80: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5a90: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5aa0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5ab0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5ac0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5ad0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5ae0: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5af0: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5b00: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5b10: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5b20: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5b30: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5b40: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5b50: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5b60: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5b70: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5b80: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5b90: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5ba0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5bb0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5bc0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5bd0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5be0: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5bf0: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5c00: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5c10: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5c20: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5c30: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5c40: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5c50: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5c60: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5c70: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5c80: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5c90: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5ca0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5cb0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5cc0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5cd0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5ce0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5cf0: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5d00: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5d10: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5d20: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5d30: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5d40: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5d50: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5d60: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5d70: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5d80: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5d90: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5da0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5db0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5dc0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5dd0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5de0: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5df0: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5e00: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5e10: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5e20: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5e30: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5e40: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5e50: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5e60: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5e70: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5e80: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5e90: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5ea0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5eb0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5ec0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ed0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
5ee0: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
5ef0: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
5f00: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
5f10: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
5f20: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
5f30: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
5f40: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
5f50: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
5f60: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
5f70: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5f80: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5f90: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
5fa0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5fb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
5fc0: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
5fd0: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
5fe0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5ff0: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
6000: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
6010: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
6020: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
6030: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
6040: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
6050: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
6060: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
6070: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
6080: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
6090: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
60a0: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
60b0: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
60c0: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
60d0: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
60e0: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
60f0: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
6100: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
6110: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
6120: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
6130: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
6190: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
61a0: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
61b0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
61c0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
61d0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
61e0: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
61f0: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6200: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6210: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
6220: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
6230: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
6240: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6250: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6260: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
6270: 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  UPT;.  pc = pOp-
6280: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6290: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
62a0: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
62b0: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
62c0: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
62d0: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
62e0: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
62f0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6300: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6310: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6320: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6330: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6340: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
6350: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
6360: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6370: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
6380: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
6390: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  yn)==0 );.  memA
63a0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
63b0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
63c0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
63d0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
63e0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
63f0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6400: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6410: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6420: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6430: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6440: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6450: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6460: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6470: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6480: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
6490: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
64a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
64b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
64c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
64d0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
64e0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
64f0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6500: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6510: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6520: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6530: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
6540: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
6550: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
6560: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
6570: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
6580: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6590: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
65a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
65b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
65c0: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
65d0: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
65e0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
65f0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
6600: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
6610: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
6620: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
6630: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
6640: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
6650: 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a  cDest;.  break;.
6660: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
6670: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
6680: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
6690: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
66a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
66b0: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
66c0: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
66d0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
66e0: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
66f0: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
6700: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
6710: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
6720: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
6730: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
6740: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
6750: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
6760: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
6770: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
6780: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
6790: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
67a0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
67b0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
67c0: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
67d0: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
67e0: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
67f0: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6800: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
6810: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
6820: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
6830: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6840: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
6850: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
6860: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
6870: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
6880: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
6890: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
68a0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
68b0: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
68c0: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
68d0: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
68e0: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
68f0: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6900: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6910: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6920: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6930: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6940: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
6950: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
6960: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
6970: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
6980: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
6990: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
69a0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
69b0: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
69c0: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
69d0: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
69e0: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
69f0: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6a00: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6a10: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6a20: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6a30: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6a40: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
6a50: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
6a60: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
6a70: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
6a80: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
6a90: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
6aa0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
6ab0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
6ac0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6ad0: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6ae0: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6af0: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6b00: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6b10: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6b20: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6b30: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6b40: 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f  Halt: {.  if( pO
6b50: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
6b60: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
6b70: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
6b80: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
6b90: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
6ba0: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
6bb0: 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61  . */.    VdbeFra
6bc0: 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e  me *pFrame = p->
6bd0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
6be0: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
6bf0: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
6c00: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
6c10: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
6c20: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
6c30: 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71  ge);.    pc = sq
6c40: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
6c50: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
6c60: 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64     lastRowid = d
6c70: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
6c80: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
6c90: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
6ca0: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
6cb0: 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72   pc is the OP_Pr
6cc0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
6cd0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
6ce0: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
6cf0: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
6d00: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
6d10: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
6d20: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
6d30: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
6d40: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
6d50: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
6d60: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
6d70: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
6d80: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
6d90: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
6da0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
6db0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
6dc0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
6dd0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
6de0: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
6df0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61  .      pc = p->a
6e00: 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20  Op[pc].p2-1;.   
6e10: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
6e20: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
6e30: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65  p->aMem;.    bre
6e40: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63  ak;.  }..  p->rc
6e50: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
6e60: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
6e70: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
6e80: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20  >pc = pc;.  if( 
6e90: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6ea0: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d   assert( p->rc!=
6eb0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
6ec0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
6ed0: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
6ee0: 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  b, "%s", pOp->p4
6ef0: 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  .z);.    testcas
6f00: 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
6f10: 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
6f20: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  ;.    sqlite3_lo
6f30: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
6f40: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
6f50: 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71   %s", pc, p->zSq
6f60: 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  l, pOp->p4.z);. 
6f70: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63   }else if( p->rc
6f80: 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65   ){.    testcase
6f90: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
6fa0: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
6fb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6fc0: 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74  (pOp->p1, "const
6fd0: 72 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20  raint failed at 
6fe0: 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c  %d in [%s]", pc,
6ff0: 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20   p->zSql);.  }. 
7000: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7010: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
7020: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
7030: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
7040: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
7050: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
7060: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7070: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
7080: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
7090: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
70a0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
70b0: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
70c0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
70d0: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
70e0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
70f0: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7100: 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20  ons>0 );.    rc 
7110: 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45  = p->rc ? SQLITE
7120: 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f  _ERROR : SQLITE_
7130: 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  DONE;.  }.  goto
7140: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
7150: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
7160: 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ger P1 P2 * * *.
7170: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7180: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7190: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
71a0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
71b0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
71c0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
71d0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
71e0: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
71f0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7200: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7210: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7220: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
7230: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7240: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7250: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7260: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7270: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7280: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
7290: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
72a0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
72b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
72c0: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
72d0: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
72e0: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
72f0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
7300: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
7310: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
7320: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
7330: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
7340: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7350: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
7360: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
7370: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7380: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7390: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
73a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
73b0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
73c0: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
73d0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
73e0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
73f0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7400: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7410: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7420: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7430: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7440: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
7450: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
7460: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7470: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
7480: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
7490: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
74a0: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
74b0: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
74c0: 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66  an OP_String bef
74d0: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
74e0: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
74f0: 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   time..*/.case O
7500: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
7510: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7520: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
7530: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7540: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7550: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
7560: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
7570: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
7580: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
7590: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
75a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
75b0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
75c0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
75d0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
75e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
75f0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7600: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
7610: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
7620: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
7630: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
7640: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7650: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
7660: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
7670: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
7680: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
7690: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
76a0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61  ssert( pOut->zMa
76b0: 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b  lloc==pOut->z );
76c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
76d0: 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
76e0: 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  yn );.    pOut->
76f0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7700: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
7710: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7720: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
7730: 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28  MEM_Dyn;.    if(
7740: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
7750: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
7760: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
7770: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
7780: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
7790: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
77a0: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
77b0: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
77c0: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
77d0: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
77e0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
77f0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
7800: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
7810: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7820: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
7830: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
7840: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
7850: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
7860: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
7870: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
7880: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
7890: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
78a0: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
78b0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
78c0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P2..*/.case OP_S
78d0: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
78e0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
78f0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7900: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
7910: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
7920: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
7930: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
7940: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
7950: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
7960: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
7970: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
7980: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
7990: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
79a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
79b0: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
79c0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
79d0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
79e0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
79f0: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
7a00: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
7a10: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
7a20: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
7a30: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
7a40: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
7a50: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
7a60: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
7a70: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
7a80: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
7a90: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
7aa0: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
7ab0: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
7ac0: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
7ad0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
7ae0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
7af0: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
7b00: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
7b10: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
7b20: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
7b30: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
7b40: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
7b50: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
7b60: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
7b70: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7b80: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
7b90: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
7ba0: 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20  llFlag;.  cnt = 
7bb0: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
7bc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7bd0: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
7be0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
7bf0: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
7c00: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
7c10: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
7c20: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
7c30: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
7c40: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
7c50: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
7c60: 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52  t);.    VdbeMemR
7c70: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
7c80: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7c90: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e  nullFlag;.    cn
7ca0: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
7cb0: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
7cc0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
7cd0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7ce0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
7cf0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7d00: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7d10: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7d20: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7d30: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
7d40: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7d50: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7d60: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
7d70: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
7d80: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7d90: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7da0: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7db0: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7dc0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
7dd0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
7de0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7df0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7e00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
7e10: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
7e20: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7e30: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7e40: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
7e50: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
7e60: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
7e70: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
7e80: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
7e90: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20  e appears in P4 
7ea0: 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68  and P3==1..** Th
7eb0: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
7ec0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
7ed0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
7ee0: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
7ef0: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
7f00: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7f10: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
7f20: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
7f30: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
7f40: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
7f50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7f60: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
7f70: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
7f80: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
7f90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
7fa0: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
7fb0: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
7fc0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
7fd0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
7fe0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
7ff0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
8000: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8010: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8020: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8030: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
8040: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
8050: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8060: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8070: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
8080: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
8090: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
80a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
80b0: 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f  .P1+P3 over into
80c0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
80d0: 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69 73 74  ..P2+P3.  Regist
80e0: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 61 72  ers P1..P1+P3 ar
80f0: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
8100: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
8110: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
8120: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
8130: 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50   P1..P1+P3 and P
8140: 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76 65 72  2..P2+P3 to over
8150: 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lap..*/.case OP_
8160: 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  Move: {.  char *
8170: 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f  zMalloc;   /* Ho
8180: 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66  lding variable f
8190: 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d  or allocated mem
81a0: 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ory */.  int n; 
81b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
81c0: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
81d0: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
81e0: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
81f0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
8200: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
8210: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
8220: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
8230: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
8240: 6e 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20 31 3b  n = pOp->p3 + 1;
8250: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
8260: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
8270: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
8280: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
8290: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
82a0: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
82b0: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
82c0: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
82d0: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77  = &aMem[p2];.  w
82e0: 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20  hile( n-- ){.   
82f0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
8300: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
8310: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
8320: 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  1<=&aMem[p->nMem
8330: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
8340: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
8350: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
8360: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8370: 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20  t);.    zMalloc 
8380: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
8390: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
83a0: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
83b0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
83c0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
83d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
83e0: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
83f0: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
8400: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
8410: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
8420: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
8430: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
8440: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
8450: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
8460: 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  f.    pIn1->zMal
8470: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
8480: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8490: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
84a0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
84b0: 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  Out++;.  }.  bre
84c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
84d0: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
84e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
84f0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8500: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
8510: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
8520: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
8530: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8540: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8550: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
8560: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
8570: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
8580: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
8590: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
85a0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
85b0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
85c0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
85d0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
85e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
85f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8600: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8610: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8620: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
8630: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8640: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8650: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
8660: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
8670: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
8680: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8690: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
86a0: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
86b0: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
86c0: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
86d0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
86e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
86f0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
8700: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8710: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
8720: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8730: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8740: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8750: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8760: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
8770: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
8780: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
8790: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
87a0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
87b0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
87c0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
87d0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
87e0: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
87f0: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
8800: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
8810: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
8820: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
8830: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
8840: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
8850: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
8860: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
8870: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
8880: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
8890: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
88a0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
88b0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
88c0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
88d0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
88e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
88f0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8900: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
8910: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
8920: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8930: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8940: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8950: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8960: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8970: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
8980: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23  1, MEM_Ephem);.#
8990: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
89a0: 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  UG.  if( pOut->p
89b0: 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70  ScopyFrom==0 ) p
89c0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
89d0: 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20  = pIn1;.#endif. 
89e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
89f0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
8a00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8a10: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
8a20: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8a30: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
8a40: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
8a50: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
8a60: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
8a70: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
8a80: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
8a90: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
8aa0: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
8ab0: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
8ac0: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
8ad0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
8ae0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
8af0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
8b00: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
8b10: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
8b20: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8b30: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
8b40: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
8b50: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
8b60: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
8b70: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
8b80: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
8b90: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8ba0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8bb0: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
8bc0: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20  p->nMem+1 );..  
8bd0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
8be0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
8bf0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
8c00: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
8c10: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
8c20: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8c30: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
8c40: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
8c50: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
8c60: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
8c70: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
8c80: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
8c90: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
8ca0: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
8cb0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
8cc0: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
8cd0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
8ce0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
8cf0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
8d00: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
8d10: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
8d20: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
8d30: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
8d40: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
8d50: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
8d60: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
8d70: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
8d80: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
8d90: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
8da0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8db0: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
8dc0: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8dd0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
8de0: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
8df0: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
8e00: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8e10: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
8e20: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
8e30: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
8e40: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
8e50: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
8e60: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
8e70: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
8e80: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
8e90: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8ea0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
8eb0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
8ec0: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
8ed0: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
8ee0: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
8ef0: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
8f00: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
8f10: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
8f20: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
8f30: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
8f40: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
8f50: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
8f60: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
8f70: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
8f80: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
8f90: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
8fa0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
8fb0: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
8fc0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8fd0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
8fe0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8ff0: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
9000: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
9010: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
9020: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
9030: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
9040: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
9050: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
9060: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
9070: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9080: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
9090: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
90a0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
90b0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
90c0: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
90d0: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
90e0: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
90f0: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
9100: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
9110: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
9120: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
9130: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
9140: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
9150: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
9160: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
9170: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
9180: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
9190: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
91a0: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
91b0: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
91c0: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
91d0: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
91e0: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
91f0: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
9200: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
9210: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
9220: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
9230: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9240: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
9250: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
9260: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
9270: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
9280: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
9290: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
92a0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
92b0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
92c0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
92d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
92e0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
92f0: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
9300: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9310: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 26 70  eMemStoreType(&p
9320: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
9330: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
9340: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
9350: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
9360: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
9370: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
9380: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
9390: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
93a0: 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20   = pc + 1;.  rc 
93b0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
93c0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
93d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
93e0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
93f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  * *.**.** Add th
9400: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
9410: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
9420: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
9430: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
9440: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9450: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9460: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9470: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
9480: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
9490: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
94a0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
94b0: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
94c0: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
94d0: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
94e0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
94f0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
9500: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
9510: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
9520: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
9530: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
9540: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
9550: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
9560: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
9570: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9580: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
9590: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
95a0: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
95b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
95c0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
95d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
95e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
95f0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
9600: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
9610: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
9620: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
9630: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
9640: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9650: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
9660: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
9670: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
9680: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
9690: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
96a0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
96b0: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
96c0: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
96d0: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
96e0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
96f0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
9700: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
9710: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
9720: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
9730: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
9740: 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  g;.  }.  MemSetT
9750: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9760: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71  M_Str);.  if( sq
9770: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
9780: 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
9790: 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29  e+2, pOut==pIn2)
97a0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
97b0: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  mem;.  }.  if( p
97c0: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
97d0: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
97e0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
97f0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
9800: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
9810: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
9820: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
9830: 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70  [nByte] = 0;.  p
9840: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
9850: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
9860: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
9870: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
9880: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
9890: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
98a0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
98b0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
98c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
98d0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
98e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74   * *.**.** Add t
98f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9900: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
9910: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9920: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9930: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9940: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
9950: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9960: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9970: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
9980: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
9990: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
99a0: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
99b0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
99c0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
99d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
99e0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
99f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9a00: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9a10: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9a20: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
9a30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9a40: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
9a50: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
9a60: 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63   *.**.** Subtrac
9a70: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
9a80: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
9a90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9aa0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9ab0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9ac0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9ad0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9ae0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
9af0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9b00: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
9b10: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
9b20: 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20   *.**.** Divide 
9b30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9b40: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9b50: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9b60: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
9b70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9b80: 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d  register P3 (P3=
9b90: 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76  P2/P1). If the v
9ba0: 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69  alue in .** regi
9bb0: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c  ster P1 is zero,
9bc0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
9bd0: 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74   is NULL. If eit
9be0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a  her input is .**
9bf0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9c00: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9c10: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
9c20: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
9c30: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
9c40: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
9c50: 72 20 69 6e 74 65 67 65 72 20 64 69 76 69 73 69  r integer divisi
9c60: 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20  on of the value 
9c70: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
9c80: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9c90: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
9ca0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9cb0: 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66  lt in P3. .** If
9cc0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9cd0: 67 69 73 74 65 72 20 50 32 20 69 73 20 7a 65 72  gister P2 is zer
9ce0: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
9cf0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
9d00: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
9d10: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9d20: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
9d30: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9d50: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
9d60: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9d70: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
9d80: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9d90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
9da0: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
9db0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
9dc0: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
9dd0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9de0: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
9df0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9e00: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
9e10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9e20: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
9e30: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9e40: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
9e50: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
9e60: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
9e70: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
9e80: 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  3 */.  int flags
9e90: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
9ea0: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
9eb0: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
9ec0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
9ed0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9ee0: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
9ef0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
9f00: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
9f10: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
9f20: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
9f30: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
9f40: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
9f50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9f60: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
9f70: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9f80: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
9f90: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
9fa0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9fb0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9fc0: 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20  ffinity(pIn1);. 
9fd0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
9fe0: 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p2];.  applyN
9ff0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
a000: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
a010: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a020: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
a030: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
a040: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
a050: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
a060: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a070: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a080: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
a090: 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61  lags & pIn2->fla
a0a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d  gs & MEM_Int)==M
a0b0: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41  EM_Int ){.    iA
a0c0: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
a0d0: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
a0e0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
a0f0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
a100: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
a110: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
a120: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
a130: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
a140: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
a150: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
a160: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
a170: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
a180: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
a190: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a1a0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a1b0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
a1c0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
a1d0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
a1e0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
a1f0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
a200: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
a210: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a220: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a230: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a240: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
a250: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
a260: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
a270: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
a280: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a290: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
a2a0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
a2b0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
a2c0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a2d0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
a2e0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
a2f0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
a300: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
a310: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a320: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
a330: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
a340: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a350: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
a360: 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20  e{.fp_math:.    
a370: 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rA = sqlite3Vdbe
a380: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b  RealValue(pIn1);
a390: 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65  .    rB = sqlite
a3a0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a3b0: 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68  In2);.    switch
a3c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a3d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a3e0: 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b  dd:         rB +
a3f0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a400: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a410: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42  _Subtract:    rB
a420: 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   -= rA;       br
a430: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a440: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
a450: 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20  rB *= rA;       
a460: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a470: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
a480: 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c         /* (doubl
a490: 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53  e)0 In case of S
a4a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
a4b0: 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a  ING_POINT... */.
a4c0: 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d          if( rA==
a4d0: 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f  (double)0 ) goto
a4e0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a4f0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
a500: 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20      rB /= rA;.  
a510: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a520: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
a530: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41  lt: {.        iA
a540: 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20   = (i64)rA;.    
a550: 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42      iB = (i64)rB
a560: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a570: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a580: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a590: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a5a0: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
a5b0: 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20  1;.        rB = 
a5c0: 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41  (double)(iB % iA
a5d0: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
a5e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
a5f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
a600: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
a610: 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  T.    pOut->u.i 
a620: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
a630: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
a640: 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  EM_Int);.#else. 
a650: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73     if( sqlite3Is
a660: 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20  NaN(rB) ){.     
a670: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a680: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a690: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a6a0: 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  >r = rB;.    Mem
a6b0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a6c0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
a6d0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
a6e0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
a6f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
a700: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
a710: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
a720: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
a730: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
a740: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
a750: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
a760: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
a770: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a780: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
a790: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
a7a0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
a7b0: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
a7c0: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
a7d0: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
a7e0: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
a7f0: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
a800: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
a810: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
a820: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
a830: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
a840: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
a850: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
a860: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
a870: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
a880: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
a890: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
a8a0: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
a8b0: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
a8c0: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
a8d0: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
a8e0: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
a8f0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
a900: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
a910: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
a920: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
a930: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
a940: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
a950: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
a960: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
a970: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
a980: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
a990: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
a9a0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
a9b0: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
a9c0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a9d0: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
a9e0: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
a9f0: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
aa00: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
aa10: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
aa20: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
aa30: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
aa40: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
aa50: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
aa60: 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70  LLSEQ );.  if( p
aa70: 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
aa80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
aa90: 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
aaa0: 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62  p1], 0);.  }.  b
aab0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
aac0: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
aad0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
aae0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
aaf0: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
ab00: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
ab10: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
ab20: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
ab30: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
ab40: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
ab50: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
ab60: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
ab70: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
ab80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
ab90: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
aba0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
abb0: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
abc0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
abd0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
abe0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
abf0: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
ac00: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
ac10: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
ac20: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
ac30: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
ac40: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
ac50: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
ac60: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
ac70: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
ac80: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
ac90: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
aca0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
acb0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
acc0: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
acd0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
ace0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
acf0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
ad00: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
ad10: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
ad20: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
ad30: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
ad40: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
ad50: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
ad60: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
ad70: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
ad80: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
ad90: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
ada0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
adb0: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
adc0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
add0: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
ade0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
adf0: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
ae00: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
ae10: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
ae20: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
ae30: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61  l || n==0 );.  a
ae40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
ae50: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
ae60: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
ae70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
ae80: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
ae90: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
aea0: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
aeb0: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
aec0: 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65  Op->p2+n<=p->nMe
aed0: 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  m+1) );.  assert
aee0: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
aef0: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
af00: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
af10: 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  g = &aMem[pOp->p
af20: 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  2];.  for(i=0; i
af30: 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29  <n; i++, pArg++)
af40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
af50: 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29  mIsValid(pArg) )
af60: 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
af70: 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68   pArg;.    Deeph
af80: 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b  emeralize(pArg);
af90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
afa0: 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72  MemStoreType(pAr
afb0: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
afc0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
afd0: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
afe0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
aff0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
b000: 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
b010: 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20  P4_VDBEFUNC );. 
b020: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
b030: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a  ==P4_FUNCDEF ){.
b040: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
b050: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
b060: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
b070: 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
b080: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
b090: 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f   = (VdbeFunc*)pO
b0a0: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b  p->p4.pVdbeFunc;
b0b0: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
b0c0: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e   ctx.pVdbeFunc->
b0d0: 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63 74  pFunc;.  }..  ct
b0e0: 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
b0f0: 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62  Null;.  ctx.s.db
b100: 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78   = db;.  ctx.s.x
b110: 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
b120: 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20  .zMalloc = 0;.. 
b130: 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
b140: 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
b150: 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
b160: 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
b170: 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74  ** the pointer t
b180: 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61  o ctx.s so in ca
b190: 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
b1a0: 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a  tion can use.  *
b1b0: 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  * the already al
b1c0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
b1d0: 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
b1e0: 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a  ting a new one..
b1f0: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
b200: 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73  beMemMove(&ctx.s
b210: 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65  , pOut);.  MemSe
b220: 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73  tTypeFlag(&ctx.s
b230: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
b240: 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
b250: 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
b260: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
b270: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
b280: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
b290: 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  p>aOp );.    ass
b2a0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
b2b0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
b2c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
b2d0: 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
b2e0: 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
b2f0: 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
b300: 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
b310: 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77   }.  db->lastRow
b320: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
b330: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
b340: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
b350: 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
b360: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
b370: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
b380: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20  ->lastRowid;..  
b390: 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69  /* If any auxili
b3a0: 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f  ary data functio
b3b0: 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c  ns have been cal
b3c0: 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72  led by this user
b3d0: 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20   function,.  ** 
b3e0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c  immediately call
b3f0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20   the destructor 
b400: 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74  for any non-stat
b410: 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a  ic values..  */.
b420: 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46    if( ctx.pVdbeF
b430: 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  unc ){.    sqlit
b440: 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44  e3VdbeDeleteAuxD
b450: 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e  ata(ctx.pVdbeFun
b460: 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  c, pOp->p1);.   
b470: 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75   pOp->p4.pVdbeFu
b480: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
b490: 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74  nc;.    pOp->p4t
b4a0: 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e  ype = P4_VDBEFUN
b4b0: 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64 62  C;.  }..  if( db
b4c0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
b4d0: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
b4e0: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
b4f0: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
b500: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
b510: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
b520: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
b530: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
b540: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
b550: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
b560: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
b570: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
b580: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
b590: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
b5a0: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
b5b0: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
b5c0: 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
b5d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
b5e0: 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
b5f0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
b600: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
b610: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
b620: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
b630: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
b640: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
b650: 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
b660: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
b670: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
b680: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
b690: 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
b6a0: 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
b6b0: 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
b6c0: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
b6d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
b6e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
b6f0: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
b700: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
b710: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
b720: 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
b730: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26  eMemMove(pOut, &
b740: 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71  ctx.s);.  if( sq
b750: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
b760: 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20  ig(pOut) ){.    
b770: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
b780: 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68  }..#if 0.  /* Th
b790: 65 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75  e app-defined fu
b7a0: 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20  nction has done 
b7b0: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61  something that a
b7c0: 73 20 63 61 75 73 65 64 20 74 68 69 73 0a 20 20  s caused this.  
b7d0: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  ** statement to 
b7e0: 65 78 70 69 72 65 2e 20 20 28 50 65 72 68 61 70  expire.  (Perhap
b7f0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63  s the function c
b800: 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78  alled sqlite3_ex
b810: 65 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61  ec().  ** with a
b820: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
b830: 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20  atement.).  */. 
b840: 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
b850: 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42  ) rc = SQLITE_AB
b860: 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52  ORT;.#endif..  R
b870: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
b880: 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
b890: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
b8a0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
b8b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b8c0: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
b8d0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
b8e0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
b8f0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
b900: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
b910: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
b920: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b930: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b940: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b950: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b960: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b970: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
b980: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
b990: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
b9a0: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
b9b0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
b9c0: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
b9d0: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
b9e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b9f0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ba00: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ba10: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ba20: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
ba30: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
ba40: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ba50: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
ba60: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
ba70: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
ba80: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
ba90: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
baa0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
bab0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
bac0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
bad0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
bae0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
baf0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
bb00: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
bb10: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
bb20: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
bb30: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
bb40: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
bb50: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
bb60: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
bb70: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
bb80: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
bb90: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
bba0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
bbb0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
bbc0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
bbd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bbe0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
bbf0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
bc00: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bc10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
bc20: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
bc30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bc40: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
bc50: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bc60: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
bc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bc80: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
bc90: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bca0: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
bcb0: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
bcc0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bcd0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
bce0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
bcf0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
bd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bd10: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
bd20: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bd30: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
bd40: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
bd50: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
bd60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
bd70: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
bd80: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
bd90: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bda0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
bdb0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
bdc0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
bdd0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
bde0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
bdf0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
be00: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
be10: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
be20: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
be30: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
be40: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
be50: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
be60: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
be70: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
be80: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
be90: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
bea0: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
beb0: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
bec0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
bed0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
bee0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
bef0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
bf00: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
bf10: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
bf20: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
bf30: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
bf40: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
bf50: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
bf60: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
bf70: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
bf80: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
bf90: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
bfa0: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
bfb0: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
bfc0: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
bfd0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
bfe0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
bff0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
c000: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
c010: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
c020: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
c030: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
c040: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
c050: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
c060: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
c070: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c080: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
c090: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
c0a0: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
c0b0: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
c0c0: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
c0d0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
c0e0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
c0f0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
c100: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
c110: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
c120: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
c130: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
c140: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
c150: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
c160: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c170: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c180: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c190: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
c1a0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
c1b0: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
c1c0: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
c1d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c1e0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
c1f0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
c200: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
c210: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
c220: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
c230: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
c240: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
c250: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
c260: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
c270: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c280: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
c290: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
c2a0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c2b0: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
c2c0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
c2d0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
c2e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c2f0: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
c300: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
c310: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c320: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c330: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
c340: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
c350: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
c360: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
c370: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
c380: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
c390: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
c3a0: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
c3b0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
c3c0: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
c3d0: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
c3e0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
c3f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
c400: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
c410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
c420: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
c430: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c440: 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ];.  applyAffini
c450: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
c460: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
c470: 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70  oding);.  if( (p
c480: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c490: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
c4a0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
c4b0: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
c4c0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20  ITE_MISMATCH;.  
c4d0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
c4e0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
c4f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63   }else{.      pc
c500: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
c510: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
c520: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c530: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
c540: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c550: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
c560: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
c570: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
c580: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
c590: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
c5a0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
c5b0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
c5c0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
c5d0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
c5e0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
c5f0: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
c600: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
c610: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
c620: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
c630: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
c640: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
c650: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
c660: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
c670: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
c680: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
c690: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
c6a0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
c6b0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
c6c0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
c6d0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
c6e0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c6f0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
c700: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c710: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
c720: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
c730: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
c740: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
c750: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c760: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
c770: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c780: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
c790: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
c7a0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c7b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c7c0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
c7d0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
c7e0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
c7f0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c800: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
c810: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c820: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
c830: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
c840: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
c850: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
c860: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
c870: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
c880: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
c890: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
c8a0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
c8b0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
c8c0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
c8d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c8f0: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
c900: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c910: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
c920: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
c930: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49   pIn1);.  if( pI
c940: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c950: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
c960: 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d  assert( MEM_Str=
c970: 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29  =(MEM_Blob>>3) )
c980: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
c990: 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  |= (pIn1->flags&
c9a0: 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20  MEM_Blob)>>3;.  
c9b0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
c9c0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  n1, SQLITE_AFF_T
c9d0: 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  EXT, encoding);.
c9e0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
c9f0: 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72  b(pIn1);.  asser
ca00: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
ca10: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
ca20: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
ca30: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d    pIn1->flags &=
ca40: 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52   ~(MEM_Int|MEM_R
ca50: 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  eal|MEM_Blob|MEM
ca60: 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45  _Zero);.  UPDATE
ca70: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
ca80: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
ca90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c  ./* Opcode: ToBl
caa0: 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ob P1 * * * *.**
cab0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
cac0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cad0: 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e  P1 to be a BLOB.
cae0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
caf0: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
cb00: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
cb10: 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74  ing first..** St
cb20: 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79  rings are simply
cb30: 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61   reinterpreted a
cb40: 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20  s blobs with no 
cb50: 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65  change.** to the
cb60: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
cb70: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
cb80: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
cb90: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
cba0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
cbb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cbc0: 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20  P_ToBlob: {     
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cbe0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c  same as TK_TO_BL
cbf0: 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  OB, in1 */.  pIn
cc00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
cc10: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
cc20: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
cc30: 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20   ) break;.  if( 
cc40: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
cc50: 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
cc60: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
cc70: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
cc80: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
cc90: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
cca0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ccb0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
ccc0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
ccd0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
cce0: 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  In1, MEM_Blob);.
ccf0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
cd00: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
cd10: 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f  M_TypeMask&~MEM_
cd20: 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44  Blob);.  }.  UPD
cd30: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
cd40: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
cd50: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
cd60: 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20  oNumeric P1 * * 
cd70: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
cd80: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
cd90: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e  ister P1 to be n
cda0: 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61  umeric (either a
cdb0: 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20  n.** integer or 
cdc0: 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  a floating-point
cdd0: 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20   number.).** If 
cde0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
cdf0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
ce00: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
ce10: 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  an using the.** 
ce20: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
ce30: 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61  oi() or atof() a
ce40: 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f  nd store 0 if no
ce50: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
ce60: 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65   .** is possible
ce70: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
ce80: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
ce90: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
cea0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
ceb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cec0: 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20  P_ToNumeric: {  
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cee0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
cef0: 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f  _NUMERIC, in1 */
cf00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cf10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69  pOp->p1];.  sqli
cf20: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
cf30: 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  fy(pIn1);.  brea
cf40: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
cf50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
cf60: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
cf70: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
cf80: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
cf90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cfa0: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
cfb0: 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68  teger.  If.** Th
cfc0: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
cfd0: 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62  ntly a real numb
cfe0: 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61  er, drop its fra
cff0: 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a  ctional part..**
d000: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
d010: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
d020: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
d030: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
d040: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
d050: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
d060: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
d070: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
d080: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
d090: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
d0a0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
d0b0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
d0c0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
d0d0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
d0e0: 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  ToInt: {        
d0f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d100: 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20  e as TK_TO_INT, 
d110: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d120: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d130: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d140: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
d150: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
d160: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d170: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
d180: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65  reak;.}..#if !de
d190: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
d1a0: 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69  T_CAST) && !defi
d1b0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
d1c0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a  FLOATING_POINT).
d1d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61  /* Opcode: ToRea
d1e0: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  l P1 * * * *.**.
d1f0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d200: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d210: 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69  1 to be a floati
d220: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng point number.
d230: 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65  .** If The value
d240: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e   is currently an
d250: 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72   integer, conver
d260: 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  t it..** If the 
d270: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
d280: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
d290: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
d2a0: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
d2b0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
d2c0: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
d2d0: 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63  re 0.0 if no suc
d2e0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
d2f0: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
d300: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
d310: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
d320: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
d330: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
d340: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c  /.case OP_ToReal
d350: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d360: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d370: 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20  TK_TO_REAL, in1 
d380: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d390: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
d3a0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
d3b0: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28  , pIn1);.  if( (
d3c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d3d0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
d3e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d3f0: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
d400: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
d410: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
d420: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
d430: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
d440: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
d450: 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f  ING_POINT) */../
d460: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
d470: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d480: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
d490: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d4a0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
d4b0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
d4c0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
d4d0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
d4e0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
d4f0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
d500: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
d510: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
d520: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
d530: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
d540: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
d550: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
d560: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
d570: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
d580: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
d590: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d5a0: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
d5b0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
d5c0: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
d5d0: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
d5e0: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
d5f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
d600: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
d610: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
d620: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
d630: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
d640: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
d650: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
d660: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
d670: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
d680: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
d690: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
d6a0: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
d6b0: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
d6c0: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
d6d0: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
d6e0: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
d6f0: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
d700: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
d710: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
d720: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
d730: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
d740: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
d750: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
d760: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
d770: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
d780: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
d790: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
d7a0: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
d7b0: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
d7c0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
d7d0: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
d7e0: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
d7f0: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
d800: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
d810: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
d820: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
d830: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
d840: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
d850: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
d860: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
d870: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
d880: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
d890: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
d8a0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
d8b0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
d8c0: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
d8d0: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
d8e0: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
d8f0: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
d900: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
d910: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
d920: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
d930: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
d940: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
d950: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
d960: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
d970: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
d980: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
d990: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
d9a0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
d9b0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
d9c0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
d9d0: 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f  TE_STOREP2 bit o
d9e0: 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
d9f0: 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20  n do not jump.  
da00: 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72  Instead,.** stor
da10: 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75  e a boolean resu
da20: 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72  lt (either 0, or
da30: 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20   1, or NULL) in 
da40: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
da50: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
da60: 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73  _NULLEQ bit is s
da70: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e  et in P5, then N
da80: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
da90: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75  onsidered.** equ
daa0: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
dab0: 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74  r, provided that
dac0: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76   they do not hav
dad0: 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61  e their MEM_Clea
dae0: 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a  red.** bit set..
daf0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
db00: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
db10: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
db20: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
db30: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
db40: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
db50: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
db60: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
db70: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
db80: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
db90: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
dba0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
dbb0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
dbc0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
dbd0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
dbe0: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
dbf0: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
dc00: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
dc10: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
dc20: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
dc30: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
dc40: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
dc50: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
dc60: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
dc70: 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20  ison is false.  
dc80: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
dc90: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
dca0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75  he result is tru
dcb0: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
dcc0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
dcd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
dce0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
dcf0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
dd00: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
dd10: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
dd20: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
dd30: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
dd40: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
dd50: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
dd60: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
dd70: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
dd80: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
dd90: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
dda0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
ddb0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
ddc0: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
ddd0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
dde0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
ddf0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
de00: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
de10: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
de20: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
de30: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
de40: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
de50: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
de60: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
de70: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
de80: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
de90: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
dea0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
deb0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
dec0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
ded0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
dee0: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
def0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
df00: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
df10: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
df20: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
df30: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
df40: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
df50: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
df60: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
df70: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
df80: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
df90: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
dfa0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
dfb0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
dfc0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
dfd0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
dfe0: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
dff0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
e000: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
e010: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
e020: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e030: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
e040: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
e050: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
e060: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
e070: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e080: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e090: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e0a0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e0b0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e0c0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e0d0: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
e0e0: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
e0f0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
e100: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
e110: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e120: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e130: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
e140: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
e150: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
e160: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e170: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e180: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e190: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e1a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e1b0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
e1c0: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
e1d0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
e1e0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
e1f0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
e200: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
e210: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e220: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
e230: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
e240: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e250: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
e260: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
e270: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
e280: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
e290: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
e2a0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e2c0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
e2d0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e2e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e300: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
e310: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e320: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
e330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e340: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
e350: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e360: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
e370: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e380: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
e390: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
e3a0: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
e3b0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
e3c0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
e3d0: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
e3e0: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
e3f0: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
e400: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
e410: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
e420: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
e430: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
e440: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
e450: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
e460: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
e470: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e480: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e490: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
e4a0: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
e4b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e4c0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
e4d0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
e4e0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
e4f0: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
e500: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
e510: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
e520: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
e530: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
e540: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
e550: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
e560: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
e570: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
e580: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e590: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
e5a0: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
e5b0: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
e5c0: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
e5d0: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
e5e0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
e5f0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
e600: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
e610: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
e620: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
e630: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
e640: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
e650: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
e660: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
e670: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
e680: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
e690: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
e6a0: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
e6b0: 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  1&MEM_Null)!=0. 
e6c0: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
e6d0: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
e6e0: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
e6f0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a  MEM_Cleared)==0.
e700: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
e710: 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65   res = 0;  /* Re
e720: 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20  sults are equal 
e730: 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
e740: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
e750: 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65    /* Results are
e760: 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20   not equal */.  
e770: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
e780: 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  .      /* SQLITE
e790: 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72  _NULLEQ is clear
e7a0: 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e   and at least on
e7b0: 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
e7c0: 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  L,.      ** then
e7d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
e7e0: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
e7f0: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
e800: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
e810: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e820: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
e830: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
e840: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
e850: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20  STOREP2 ){.     
e860: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
e870: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
e880: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e890: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
e8a0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
e8b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
e8c0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
e8d0: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35  else if( pOp->p5
e8e0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
e8f0: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
e900: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
e910: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
e920: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
e930: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
e940: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e950: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
e960: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
e970: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
e980: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
e990: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
e9a0: 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
e9b0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
e9c0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
e9d0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c  ing);.      appl
e9e0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
e9f0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
ea00: 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  ng);.      if( d
ea10: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
ea20: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
ea30: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
ea40: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ea50: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
ea60: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
ea70: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
ea80: 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e  pIn1);.    Expan
ea90: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
eaa0: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
eab0: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
eac0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
ead0: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  ll);.  }.  switc
eae0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
eaf0: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
eb00: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
eb10: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
eb20: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
eb30: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
eb40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
eb50: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
eb60: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
eb70: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
eb80: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
eb90: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
eba0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
ebb0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
ebc0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
ebd0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
ebe0: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
ebf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
ec00: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
ec10: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
ec20: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
ec30: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
ec40: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
ec50: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
ec60: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ec70: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ec80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
ec90: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
eca0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
ecb0: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
ecc0: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
ecd0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
ece0: 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
ecf0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
ed00: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
ed10: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
ed20: 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e  isters. */.  pIn
ed30: 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31  1->flags = (pIn1
ed40: 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70  ->flags&~MEM_Typ
ed50: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
ed60: 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a  &MEM_TypeMask);.
ed70: 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
ed80: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn3->flags&~ME
ed90: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
eda0: 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61  lags3&MEM_TypeMa
edb0: 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sk);.  break;.}.
edc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
edd0: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
ede0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
edf0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
ee00: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
ee10: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
ee20: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
ee30: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
ee40: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
ee50: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
ee60: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
ee70: 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61   next OP_Permuta
ee80: 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65  tion, OP_Compare
ee90: 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72  ,.** OP_Halt, or
eea0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20   OP_ResultRow.  
eeb0: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
eec0: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
eed0: 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d  uld occur.** imm
eee0: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
eef0: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
ef00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
ef10: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
ef20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ef30: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
ef40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
ef50: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
ef60: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
ef70: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
ef80: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
ef90: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
efa0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
efb0: 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
efc0: 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
efd0: 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
efe0: 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
eff0: 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
f000: 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
f010: 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
f020: 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
f030: 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
f040: 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
f050: 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
f060: 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
f070: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
f080: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
f090: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
f0a0: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
f0b0: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
f0c0: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
f0d0: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
f0e0: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
f0f0: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
f100: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
f110: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
f120: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
f130: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
f140: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
f150: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
f160: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
f170: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
f180: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
f190: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
f1a0: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
f1b0: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
f1c0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
f1d0: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
f1e0: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
f1f0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
f200: 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
f210: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
f220: 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
f230: 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
f240: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
f250: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f260: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
f270: 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
f280: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
f290: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
f2a0: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
f2b0: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
f2c0: 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ;.  pKeyInfo = p
f2d0: 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
f2e0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
f2f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
f300: 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
f310: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
f320: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53  = pOp->p2;.#if S
f330: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
f340: 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
f350: 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
f360: 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
f370: 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
f380: 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
f390: 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
f3a0: 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
f3b0: 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65  && p1+mx<=p->nMe
f3c0: 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  m+1 );.    asser
f3d0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
f3e0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
f3f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
f400: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
f410: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
f420: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
f430: 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  && p2+n<=p->nMem
f440: 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
f450: 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
f460: 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
f470: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
f480: 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
f490: 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
f4a0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
f4b0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
f4c0: 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
f4d0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
f4e0: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
f4f0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
f500: 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
f510: 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
f520: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f530: 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
f540: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
f550: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
f560: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
f570: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
f580: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
f590: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
f5a0: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
f5b0: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
f5c0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
f5d0: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
f5e0: 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
f5f0: 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
f600: 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
f610: 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
f620: 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
f630: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f640: 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
f650: 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
f660: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
f670: 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
f680: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
f690: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
f6a0: 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
f6b0: 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
f6c0: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
f6d0: 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
f6e0: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
f6f0: 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
f700: 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
f710: 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
f720: 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
f730: 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
f740: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
f750: 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
f760: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
f770: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
f780: 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
f790: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20   pc = pOp->p1 - 
f7a0: 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  1;.  }else if( i
f7b0: 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
f7c0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
f7d0: 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
f7e0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20   pc = pOp->p3 - 
f7f0: 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
f800: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
f810: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
f820: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
f830: 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
f840: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
f850: 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61  ters P1 and P2 a
f860: 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20  nd.** write the 
f870: 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69  result into regi
f880: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
f890: 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
f8a0: 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74  2 is 0 (false) t
f8b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f8c0: 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74  s 0 even if.** t
f8d0: 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
f8e0: 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
f8f0: 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20  and true or two 
f900: 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20  NULLs give.** a 
f910: 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
f920: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31  /* Opcode: Or P1
f930: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
f940: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
f950: 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
f960: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
f970: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
f980: 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
f990: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
f9a0: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
f9b0: 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
f9c0: 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
f9d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
f9e0: 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
f9f0: 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
fa00: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
fa10: 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
fa20: 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
fa30: 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
fa40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
fa50: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
fa60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
fa70: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
fa80: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
fa90: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
faa0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
fab0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
fac0: 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
fad0: 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
fae0: 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
faf0: 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
fb00: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
fb10: 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
fb20: 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
fb30: 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
fb40: 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
fb50: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
fb60: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
fb70: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
fb80: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fb90: 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
fba0: 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
fbb0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
fbc0: 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49  n1)!=0;.  }.  pI
fbd0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
fbe0: 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d  p2];.  if( pIn2-
fbf0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
fc00: 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
fc10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
fc20: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
fc30: 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
fc40: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
fc50: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
fc60: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
fc70: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
fc80: 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
fc90: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
fca0: 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
fcb0: 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
fcc0: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
fcd0: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
fce0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
fcf0: 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
fd00: 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
fd10: 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
fd20: 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
fd30: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
fd40: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
fd50: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
fd60: 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
fd70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
fd80: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
fd90: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
fda0: 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
fdb0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
fdc0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
fdd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fde0: 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
fdf0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
fe00: 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
fe10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
fe20: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
fe30: 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
fe40: 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
fe50: 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
fe60: 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
fe70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
fe80: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
fe90: 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
fea0: 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
feb0: 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fed0: 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
fee0: 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
fef0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
ff00: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
ff10: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
ff20: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
ff30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
ff40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ff50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
ff60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
ff70: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
ff80: 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65  64(pOut, !sqlite
ff90: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
ffa0: 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
ffb0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ffc0: 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
ffd0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  * *.**.** Interp
ffe0: 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
fff0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
10000 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
10010 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
10020 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
10030 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
10040 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10050 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
10060 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
10070 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
10080 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
10090 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
100a0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
100b0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
100c0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
100d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
100e0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
100f0 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
10100 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10110 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
10120 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
10130 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10140 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10150 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e  SetInt64(pOut, ~
10160 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10170 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
10180 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10190 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
101a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
101b0 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66  eck if OP_Once f
101c0 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e 20 49  lag P1 is set. I
101d0 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
101e0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
101f0 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20  herwise,.** set 
10200 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
10210 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
10220 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
10230 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
10240 6f 3a 20 4a 75 6d 70 4f 6e 63 65 0a 2a 2f 0a 63  o: JumpOnce.*/.c
10250 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
10260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10270 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
10280 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
10290 46 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d  Flag );.  if( p-
102a0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
102b0 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  p1] ){.    pc = 
102c0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
102d0 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
102e0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
102f0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
10300 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
10310 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
10320 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
10330 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10340 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
10350 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
10360 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
10370 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
10380 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
10390 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
103a0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
103b0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
103c0 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e   jump if P3 is n
103d0 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f  on-zero..*/./* O
103e0 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
103f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
10400 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
10410 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
10420 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
10430 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
10440 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
10450 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
10460 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
10470 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
10480 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
10490 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
104a0 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
104b0 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
104c0 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
104d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
104e0 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
104f0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10500 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
10510 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
10520 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10530 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
10540 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10550 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
10560 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
10570 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
10580 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
10590 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
105a0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
105b0 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
105c0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
105d0 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
105e0 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
105f0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
10600 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
10610 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
10620 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
10630 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
10640 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10650 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
10660 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10670 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10680 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10690 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
106a0 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
106b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
106c0 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
106d0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
106e0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
106f0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
10700 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10710 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
10720 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
10730 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10740 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
10750 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
10760 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
10770 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
10780 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10790 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
107a0 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
107b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
107c0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
107d0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
107e0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
107f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
10800 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10810 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
10820 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10830 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
10840 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10850 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
10860 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
10870 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
10880 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
10890 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
108a0 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
108b0 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
108c0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
108d0 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
108e0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
108f0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
10900 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
10910 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
10920 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
10930 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
10940 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
10950 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
10960 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
10970 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
10980 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
10990 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
109a0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
109b0 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
109c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
109d0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
109e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
109f0 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
10a00 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
10a10 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
10a20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
10a30 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
10a40 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
10a50 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
10a60 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
10a70 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
10a80 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
10a90 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
10aa0 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
10ab0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
10ac0 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
10ad0 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
10ae0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
10af0 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
10b00 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
10b10 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
10b20 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
10b30 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
10b40 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
10b50 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
10b60 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
10b70 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
10b80 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
10b90 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
10ba0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
10bb0 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
10bc0 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73  OFARG bits are s
10bd0 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a  et on P5 when.**
10be0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67   the result is g
10bf0 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c  uaranteed to onl
10c00 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  y be used as the
10c10 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c   argument of a l
10c20 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79  ength().** or ty
10c30 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
10c40 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
10c50 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c  The loading of l
10c60 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62  arge blobs can b
10c70 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72  e.** skipped for
10c80 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c   length() and al
10c90 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e  l content loadin
10ca0 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64  g can be skipped
10cb0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a   for typeof()..*
10cc0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
10cd0 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61  : {.  u32 payloa
10ce0 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62  dSize;   /* Numb
10cf0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
10d00 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
10d10 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
10d20 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
10d30 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10d40 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  rd */.  int p1; 
10d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31             /* P1
10d60 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
10d70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32  code */.  int p2
10d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10d90 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
10da0 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
10db0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
10dc0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
10dd0 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rsor */.  char *
10de0 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  zRec;        /* 
10df0 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c  Pointer to compl
10e00 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20  ete record-data 
10e10 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
10e20 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
10e30 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
10e40 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
10e50 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
10e60 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
10e70 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
10e80 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
10e90 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
10ea0 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
10eb0 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
10ec0 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
10ed0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
10ee0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
10ef0 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20     /* number of 
10f00 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
10f10 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  cord */.  int le
10f20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
10f30 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
10f40 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
10f50 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
10f60 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
10f70 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
10f80 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68   counter */.  ch
10f90 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20  ar *zData;      
10fa0 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
10fb0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
10fc0 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  oded */.  Mem *p
10fd0 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
10fe0 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
10ff0 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
11000 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
11010 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
11020 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
11030 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
11040 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78  ed */.  u8 *zIdx
11050 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
11060 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20  dex into header 
11070 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72  */.  u8 *zEndHdr
11080 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
11090 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
110a0 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
110b0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
110c0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
110d0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
110e0 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
110f0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
11100 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11110 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
11120 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
11130 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f  szHdr;         /
11140 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
11150 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
11160 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
11170 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69  rd */.  int avai
11180 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
11190 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
111a0 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
111b0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
111c0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
111d0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
111e0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
111f0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
11200 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
11210 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
11220 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20  ter */...  p1 = 
11230 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
11240 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20  pOp->p2;.  pC = 
11250 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  0;.  memset(&sMe
11260 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
11270 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m));.  assert( p
11280 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
11290 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
112a0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
112b0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
112c0 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
112d0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
112e0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
112f0 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
11300 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
11310 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
11320 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
11330 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
11340 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
11350 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
11360 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
11370 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
11380 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
11390 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
113a0 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
113b0 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
113c0 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
113d0 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
113e0 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
113f0 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
11400 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
11410 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
11420 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
11430 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
11440 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
11450 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
11460 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
11470 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
11480 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
11490 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
114a0 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
114b0 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
114c0 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
114d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
114e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
114f0 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
11500 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
11510 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
11520 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
11530 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
11540 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
11550 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
11560 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
11570 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
11580 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
11590 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
115a0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
115b0 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
115c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
115d0 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
115e0 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
115f0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
11600 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
11610 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
11620 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
11630 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
11640 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
11650 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
11660 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
11670 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
11680 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
11690 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
116a0 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
116b0 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
116c0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
116d0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
116e0 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
116f0 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
11700 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
11710 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
11720 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
11730 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
11740 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
11750 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
11760 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
11770 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
11780 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
11790 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
117a0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
117b0 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
117c0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
117d0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
117e0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74      /* sqlite3Bt
117f0 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28  reeParseCellPtr(
11800 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74  ) uses getVarint
11810 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20  32() to extract 
11820 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79  the.      ** pay
11830 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
11840 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
11850 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
11860 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
11870 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
11880 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  its. */.      as
11890 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
118a0 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
118b0 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
118c0 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
118d0 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
118e0 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
118f0 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ze64;.    }else{
11900 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
11910 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
11920 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
11930 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  );.      VVA_ONL
11940 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
11950 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
11960 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
11970 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11980 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11990 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
119a0 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
119b0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
119c0 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73  f( ALWAYS(pC->ps
119d0 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20  eudoTableReg>0) 
119e0 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61  ){.    pReg = &a
119f0 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61  Mem[pC->pseudoTa
11a00 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 69 66 28  bleReg];.    if(
11a10 20 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f   pC->multiPseudo
11a20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
11a30 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
11a40 6f 70 79 28 70 44 65 73 74 2c 20 70 52 65 67 2b  opy(pDest, pReg+
11a50 70 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  p2, MEM_Ephem);.
11a60 20 20 20 20 20 20 44 65 65 70 68 65 6d 65 72 61        Deephemera
11a70 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20  lize(pDest);.   
11a80 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11a90 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20  n_out;.    }.   
11aa0 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
11ab0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
11ac0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
11ad0 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
11ae0 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69  );.    payloadSi
11af0 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  ze = pReg->n;.  
11b00 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a    zRec = pReg->z
11b10 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
11b20 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35  tatus = (pOp->p5
11b30 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43  &OPFLAG_CLEARCAC
11b40 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c  HE) ? CACHE_STAL
11b50 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  E : p->cacheCtr;
11b60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
11b70 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
11b80 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  Rec!=0 );.  }els
11b90 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64  e{.    /* Consid
11ba0 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  er the row to be
11bb0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79   NULL */.    pay
11bc0 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
11bd0 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f  }..  /* If paylo
11be0 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65  adSize is 0, the
11bf0 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e  n just store a N
11c00 55 4c 4c 2e 20 20 54 68 69 73 20 63 61 6e 20 68  ULL.  This can h
11c10 61 70 70 65 6e 20 62 65 63 61 75 73 65 20 6f 66  appen because of
11c20 0a 20 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72  .  ** nullRow or
11c30 20 62 65 63 61 75 73 65 20 6f 66 20 61 20 63 6f   because of a co
11c40 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 20  rrupt database. 
11c50 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  */.  if( payload
11c60 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d  Size==0 ){.    M
11c70 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
11c80 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
11c90 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11ca0 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73  mn_out;.  }.  as
11cb0 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74  sert( db->aLimit
11cc0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
11cd0 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66  NGTH]>=0 );.  if
11ce0 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20  ( payloadSize > 
11cf0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
11d00 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11d10 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
11d20 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
11d30 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46   nField = pC->nF
11d40 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20  ield;.  assert( 
11d50 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20  p2<nField );..  
11d60 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  /* Read and pars
11d70 65 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64  e the table head
11d80 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72  er.  Store the r
11d90 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61  esults of the pa
11da0 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68  rse.  ** into th
11db0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
11dc0 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20  cache fields of 
11dd0 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  the cursor..  */
11de0 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61  .  aType = pC->a
11df0 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e  Type;.  if( pC->
11e00 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
11e10 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
11e20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
11e30 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ffset;.  }else{.
11e40 20 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65      assert(aType
11e50 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30  );.    avail = 0
11e60 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65  ;.    pC->aOffse
11e70 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61  t = aOffset = &a
11e80 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  Type[nField];.  
11e90 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
11ea0 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  e = payloadSize;
11eb0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
11ec0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
11ed0 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75  tr;..    /* Figu
11ee0 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20  re out how many 
11ef0 62 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65  bytes are in the
11f00 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69   header */.    i
11f10 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
11f20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20   zData = zRec;. 
11f30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
11f40 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
11f50 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  ){.        zData
11f60 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
11f70 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70  3BtreeKeyFetch(p
11f80 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
11f90 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11fa0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
11fb0 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44  r*)sqlite3BtreeD
11fc0 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
11fd0 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
11fe0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79  .      /* If Key
11ff0 46 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63  Fetch()/DataFetc
12000 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67  h() managed to g
12010 65 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  et the entire pa
12020 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20  yload,.      ** 
12030 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64  save the payload
12040 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77   in the pC->aRow
12050 20 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69   cache.  That wi
12060 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a  ll save us from.
12070 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20        ** having 
12080 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e  to make addition
12090 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63  al calls to fetc
120a0 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f  h the content po
120b0 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a  rtion of.      *
120c0 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  * the record..  
120d0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
120e0 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b  ert( avail>=0 );
120f0 0a 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f  .      if( paylo
12100 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
12110 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
12120 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20  zRec = zData;.  
12130 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12140 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20   (u8*)zData;.   
12150 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12160 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12170 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12180 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
12190 6e 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75  ng assert is tru
121a0 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 65  e in all cases e
121b0 78 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a  xcept when.    *
121c0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
121d0 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72  ile has been cor
121e0 72 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c  rupted externall
121f0 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73  y..    **    ass
12200 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20  ert( zRec!=0 || 
12210 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
12220 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29  ze || avail>=9 )
12230 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d  ; */.    szHdr =
12240 20 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38   getVarint32((u8
12250 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29  *)zData, offset)
12260 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  ;..    /* Make s
12270 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
12280 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
12290 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
122a0 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
122b0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
122c0 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
122d0 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
122e0 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20  ation..    **.  
122f0 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
12300 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
12310 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
12320 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
12330 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79  5 byte.    ** ty
12340 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
12350 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
12360 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
12370 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
12380 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65  .    ** them, re
12390 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
123a0 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
123b0 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
123c0 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20  s from a.    ** 
123d0 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
123e0 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
123f0 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
12400 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
12410 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
12420 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
12430 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
12440 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
12450 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20  98307..    */.  
12460 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
12470 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63  8307 ){.      rc
12480 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
12490 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
124a0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
124b0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
124c0 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74  Compute in len t
124d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
124e0 65 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65  es of data we ne
124f0 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72  ed to read in or
12500 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65  der.    ** to ge
12510 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61  t nField type va
12520 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73  lues.  offset is
12530 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
12540 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20  on this.  But.  
12550 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68    ** nField migh
12560 74 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74  t be significant
12570 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ly less than the
12580 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20   true number of 
12590 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69  columns.    ** i
125a0 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64  n the table, and
125b0 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35   in that case, 5
125c0 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20  *nField+3 might 
125d0 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  be smaller than 
125e0 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57  offset..    ** W
125f0 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69  e want to minimi
12600 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20  ze len in order 
12610 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a  to limit the siz
12620 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a  e of the memory.
12630 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f      ** allocatio
12640 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66  n, especially if
12650 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12660 61 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75  ase file has cau
12670 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a  sed offset.    *
12680 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65  * to be oversize
12690 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d  d. Offset is lim
126a0 69 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62  ited to 98307 ab
126b0 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20  ove.  But 98307 
126c0 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69  might.    ** sti
126d0 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e  ll exceed Robson
126e0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
126f0 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d  on limits on som
12700 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
12710 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74  ..    ** On syst
12720 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  ems that cannot 
12730 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d  tolerate large m
12740 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12750 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20  s, nField*5+3.  
12760 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79    ** will likely
12770 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72   be much smaller
12780 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69   since nField wi
12790 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73  ll likely be les
127a0 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30  s than.    ** 20
127b0 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e   or so.  This in
127c0 73 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f  sures that Robso
127d0 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  n memory allocat
127e0 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20  ion limits are. 
127f0 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64     ** not exceed
12800 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72  ed even for corr
12810 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
12820 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c  es..    */.    l
12830 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20  en = nField*5 + 
12840 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e  3;.    if( len >
12850 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c   (int)offset ) l
12860 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74  en = (int)offset
12870 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65  ;..    /* The Ke
12880 79 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61  yFetch() or Data
12890 46 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72  Fetch() above ar
128a0 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20  e fast and will 
128b0 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20  get the entire. 
128c0 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
128d0 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65  der in most case
128e0 73 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c  s.  But they wil
128f0 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68  l fail to get th
12900 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a  e complete.    *
12910 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
12920 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  if the record he
12930 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69  ader does not fi
12940 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61  t on a single pa
12950 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ge.    ** in the
12960 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74   B-Tree.  When t
12970 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65  hat happens, use
12980 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12990 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20  romBtree() to.  
129a0 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65    ** acquire the
129b0 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
129c0 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20   text..    */.  
129d0 20 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61    if( !zRec && a
129e0 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20  vail<len ){.    
129f0 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30    sMem.flags = 0
12a00 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20  ;.      sMem.db 
12a10 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
12a20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12a30 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
12a40 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
12a50 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
12a60 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12a70 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
12a80 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12a90 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
12aa0 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
12ab0 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48  .    }.    zEndH
12ac0 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dr = (u8 *)&zDat
12ad0 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78  a[len];.    zIdx
12ae0 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
12af0 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20  szHdr];..    /* 
12b00 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
12b10 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
12b20 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
12b30 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
12b40 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
12b50 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
12b60 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
12b70 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
12b80 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
12b90 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
12ba0 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
12bb0 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
12bc0 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
12bd0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
12be0 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
12bf0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
12c00 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
12c10 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30    */.    for(i=0
12c20 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  ; i<nField; i++)
12c30 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
12c40 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20  <zEndHdr ){.    
12c50 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
12c60 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20   offset;.       
12c70 20 69 66 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38   if( zIdx[0]<0x8
12c80 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74  0 ){.          t
12c90 20 3d 20 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20   = zIdx[0];.    
12ca0 20 20 20 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20        zIdx++;.  
12cb0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12cc0 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 73         zIdx += s
12cd0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
12ce0 32 28 7a 49 64 78 2c 20 26 74 29 3b 0a 20 20 20  2(zIdx, &t);.   
12cf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
12d00 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
12d10 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73       szField = s
12d20 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12d30 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
12d40 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a      offset += sz
12d50 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69  Field;.        i
12d60 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c  f( offset<szFiel
12d70 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66  d ){  /* True if
12d80 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77   offset overflow
12d90 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  s */.          z
12da0 49 64 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31  Idx = &zEndHdr[1
12db0 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51  ];  /* Forces SQ
12dc0 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74  LITE_CORRUPT ret
12dd0 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20  urn below */.   
12de0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
12df0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
12e00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
12e10 49 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61  If i is less tha
12e20 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74  t nField, then t
12e30 68 65 72 65 20 61 72 65 20 66 65 77 65 72 20 66  here are fewer f
12e40 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20  ields in this.  
12e50 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20        ** record 
12e60 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d  than SetNumColum
12e70 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74 68 65  ns indicated the
12e80 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  re are columns i
12e90 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  n the.        **
12ea0 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20   table. Set the 
12eb0 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65  offset for any e
12ec0 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74  xtra columns not
12ed0 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20   present in.    
12ee0 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
12ef0 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c  d to 0. This tel
12f00 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f  ls code below to
12f10 20 73 74 6f 72 65 20 74 68 65 20 64 65 66 61 75   store the defau
12f20 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20  lt value.       
12f30 20 2a 2a 20 66 6f 72 20 74 68 65 20 63 6f 6c 75   ** for the colu
12f40 6d 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  mn instead of de
12f50 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
12f60 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
12f70 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
12f80 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
12f90 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
12fa0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
12fb0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
12fc0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
12fd0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
12fe0 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
12ff0 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
13000 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
13010 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
13020 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
13030 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
13040 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
13050 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
13060 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
13070 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
13080 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
13090 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
130a0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
130b0 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
130c0 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
130d0 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
130e0 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
130f0 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
13100 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
13110 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
13120 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
13130 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
13140 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28   > zEndHdr) || (
13150 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64  offset > payload
13160 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c  Size).         |
13170 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72  | (zIdx==zEndHdr
13180 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c   && offset!=payl
13190 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
131a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
131b0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
131c0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
131d0 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
131e0 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
131f0 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
13200 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
13210 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
13220 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
13230 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
13240 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
13250 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
13260 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
13270 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
13280 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
13290 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
132a0 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
132b0 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
132c0 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
132d0 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
132e0 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
132f0 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
13300 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
13310 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
13320 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
13330 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13340 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
13350 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69   ){.      /* Thi
13360 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
13370 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 77  case where the w
13380 68 6f 6c 65 20 72 6f 77 20 66 69 74 73 20 6f 6e  hole row fits on
13390 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 2a   a single page *
133a0 2f 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52  /.      VdbeMemR
133b0 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20  elease(pDest);. 
133c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
133d0 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
133e0 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
133f0 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
13400 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
13410 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
13420 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
13430 6e 6c 79 20 77 68 65 6e 20 74 68 65 20 72 6f 77  nly when the row
13440 20 6f 76 65 72 66 6c 6f 77 73 20 6f 6e 74 6f 20   overflows onto 
13450 6d 75 6c 74 69 70 6c 65 20 70 61 67 65 73 20 2a  multiple pages *
13460 2f 0a 20 20 20 20 20 20 74 20 3d 20 61 54 79 70  /.      t = aTyp
13470 65 5b 70 32 5d 3b 0a 20 20 20 20 20 20 69 66 28  e[p2];.      if(
13480 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
13490 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
134a0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
134b0 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 28  !=0.       && ((
134c0 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
134d0 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
134e0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
134f0 47 29 21 3d 30 29 0a 20 20 20 20 20 20 29 7b 0a  G)!=0).      ){.
13500 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
13510 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
13520 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28   for the typeof(
13530 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66  ) function and f
13540 6f 72 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  or.        ** th
13550 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
13560 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
13570 6c 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68  lob.  So we migh
13580 74 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20  t as well use.  
13590 20 20 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63        ** bogus c
135a0 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
135b0 61 6e 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65  an reading conte
135c0 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e  nt from disk.  N
135d0 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20  ULL works.      
135e0 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61 6e    ** for text an
135f0 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74 65  d blob and whate
13600 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70 61  ver is in the pa
13610 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69  yloadSize64 vari
13620 61 62 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  able.        ** 
13630 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
13640 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
13650 2f 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  /.        zData 
13660 3d 20 74 3c 31 32 20 3f 20 28 63 68 61 72 2a 29  = t<12 ? (char*)
13670 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
13680 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
13690 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  .        len = s
136a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
136b0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
136c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
136d0 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44  emMove(&sMem, pD
136e0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63  est);.        rc
136f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13700 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13710 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
13720 65 6e 2c 20 20 70 43 2d 3e 69 73 49 6e 64 65 78  en,  pC->isIndex
13730 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20         &sMem);. 
13760 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
13770 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13780 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13790 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
137a0 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74    }.        zDat
137b0 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
137c0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
137d0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
137e0 75 38 2a 29 7a 44 61 74 61 2c 20 74 2c 20 70 44  u8*)zData, t, pD
137f0 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  est);.    }.    
13800 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
13810 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a  oding;.  }else{.
13820 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
13830 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
13840 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13850 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
13860 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
13870 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
13880 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13890 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
138a0 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
138b0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
138c0 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63  /* If we dynamic
138d0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
138e0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
138f0 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20   data (in the.  
13900 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
13910 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c  mFromBtree() cal
13920 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72  l above) then tr
13930 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f  ansfer control o
13940 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61  f that.  ** dyna
13950 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13960 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20  d space over to 
13970 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74  the pDest struct
13980 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70  ure..  ** This p
13990 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79  revents a memory
139a0 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66   copy..  */.  if
139b0 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29  ( sMem.zMalloc )
139c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d  {.    assert( sM
139d0 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
139e0 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  oc );.    assert
139f0 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
13a00 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
13a10 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
13a20 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  st->flags & (MEM
13a30 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20  _Blob|MEM_Str)) 
13a40 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65  || pDest->z==sMe
13a50 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74  m.z );.    pDest
13a60 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
13a70 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69  _Ephem|MEM_Stati
13a80 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66  c);.    pDest->f
13a90 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
13aa0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d  ;.    pDest->z =
13ab0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65   sMem.z;.    pDe
13ac0 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
13ad0 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a  em.zMalloc;.  }.
13ae0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
13af0 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
13b00 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f  ble(pDest);..op_
13b10 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
13b20 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
13b30 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
13b40 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
13b50 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
13b60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13b70 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
13b80 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 * P4 *.**.** A
13b90 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
13ba0 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
13bb0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
13bc0 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
13bd0 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
13be0 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
13bf0 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
13c00 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13c10 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13c20 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13c30 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13c40 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13c50 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13c60 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
13c70 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
13c80 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
13c90 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
13ca0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
13cb0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
13cc0 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
13cd0 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20   char cAff;     
13ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
13cf0 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
13d00 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a  of affinity */..
13d10 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
13d20 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
13d30 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
13d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
13d50 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
13d60 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
13d70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13d80 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20   while( (cAff = 
13d90 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21  *(zAffinity++))!
13da0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
13db0 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
13dc0 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20  em[p->nMem] );. 
13dd0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
13de0 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
13df0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
13e00 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  n1);.    applyAf
13e10 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66  finity(pIn1, cAf
13e20 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  f, encoding);.  
13e30 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
13e40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13e50 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20  ode: MakeRecord 
13e60 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
13e70 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
13e80 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
13e90 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
13ea0 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
13eb0 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
13ec0 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
13ed0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
13ee0 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
13ef0 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
13f00 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
13f10 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
13f20 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
13f30 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
13f40 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
13f50 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
13f60 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
13f70 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
13f80 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
13f90 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
13fa0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
13fb0 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
13fc0 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
13fd0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
13fe0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
13ff0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
14000 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
14010 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
14020 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
14030 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
14040 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
14050 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14060 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14070 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14080 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14090 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
140a0 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
140b0 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
140c0 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
140d0 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
140e0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
140f0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
14100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14110 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
14120 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
14130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14140 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14150 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14160 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14170 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14180 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14190 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
141a0 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
141b0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
141c0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
141d0 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
141e0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
141f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14200 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14210 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14220 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14230 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
14240 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14250 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14260 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14270 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14280 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14290 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
142a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
142b0 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
142c0 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
142d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
142e0 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
142f0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
14300 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
14310 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
14320 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14330 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
14340 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14350 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14360 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14370 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14380 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14390 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
143a0 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
143b0 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
143c0 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
143d0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
143e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
143f0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14400 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69  wRecord[] */.  i
14410 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
14420 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
14430 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
14440 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
14450 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14460 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
14470 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
14480 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
14490 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
144a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144e0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
144f0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
14500 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
14510 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
14520 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
14530 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
14540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14560 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14570 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14580 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
14590 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
145a0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
145b0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
145c0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
145d0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
145e0 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
145f0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
14600 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
14610 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
14620 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
14630 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
14640 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
14650 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
14660 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
14670 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
14680 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
14690 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
146a0 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
146b0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
146c0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
146d0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
146e0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
146f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14700 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
14710 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
14720 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
14730 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14740 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
14750 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
14760 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14770 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
14780 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
14790 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
147a0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
147b0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
147c0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
147d0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
147e0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
147f0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d  p->p2+nField<=p-
14800 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61  >nMem+1 );.  pDa
14810 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65  ta0 = &aMem[nFie
14820 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
14830 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
14840 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
14850 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
14860 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
14870 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
14880 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20  /* Identify the 
14890 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
148a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
148b0 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20  ->p3<pOp->p1 || 
148c0 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31  pOp->p3>=pOp->p1
148d0 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f  +pOp->p2 );.  pO
148e0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
148f0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
14900 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
14910 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
14920 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
14930 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
14940 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
14950 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
14960 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
14970 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
14980 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
14990 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
149a0 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
149b0 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
149c0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
149d0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
149e0 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
149f0 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
14a00 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
14a10 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
14a20 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
14a30 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
14a40 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
14a50 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
14a60 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
14a70 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
14a80 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
14a90 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
14aa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14ab0 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
14ac0 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
14ad0 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
14ae0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
14af0 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
14b00 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
14b10 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
14b20 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
14b30 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
14b40 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
14b50 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
14b60 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
14b70 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
14b80 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
14b90 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
14ba0 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
14bb0 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
14bc0 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
14bd0 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
14be0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
14bf0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
14c00 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ro;.    }else if
14c10 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e  ( len ){.      n
14c20 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
14c30 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68    }..  /* Add th
14c40 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72  e initial header
14c50 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61   varint and tota
14c60 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20  l the size */.  
14c70 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20  nHdr += nVarint 
14c80 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
14c90 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20  en(nHdr);.  if( 
14ca0 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
14cb0 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
14cc0 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20  {.    nHdr++;.  
14cd0 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
14ce0 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20  +nData-nZero;.  
14cf0 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
14d00 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
14d10 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
14d20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
14d30 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14d40 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
14d50 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
14d60 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
14d70 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
14d80 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
14d90 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
14da0 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
14db0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
14dc0 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
14dd0 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
14de0 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
14df0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
14e00 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
14e10 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c  beMemGrow() coul
14e20 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
14e30 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
14e40 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
14e50 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
14e60 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
14e70 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20  )nByte, 0) ){.  
14e80 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
14e90 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
14ea0 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
14eb0 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
14ec0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
14ed0 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
14ee0 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
14ef0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
14f00 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
14f10 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72  pRec++){.    ser
14f20 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
14f30 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14f40 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
14f50 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
14f60 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
14f70 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
14f80 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20  _type);      /* 
14f90 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
14fa0 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
14fb0 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
14fc0 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20  t; pRec++){  /* 
14fd0 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20  serial data */. 
14fe0 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56     i += sqlite3V
14ff0 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
15000 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e  ewRecord[i], (in
15010 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65  t)(nByte-i), pRe
15020 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  c,file_format);.
15030 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d    }.  assert( i=
15040 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
15050 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
15060 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
15070 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  em );.  pOut->n 
15080 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
15090 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
150a0 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
150b0 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
150c0 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
150d0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
150e0 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
150f0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
15100 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
15110 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
15120 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
15130 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
15140 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15150 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15160 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15170 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15180 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15190 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
151a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
151b0 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
151c0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
151d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
151e0 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
151f0 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
15200 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
15210 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
15220 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
15230 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
15240 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
15250 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
15260 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
15270 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
15280 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
15290 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
152a0 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
152b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
152c0 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
152d0 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
152e0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
152f0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
15300 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
15310 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45  .  }else{.    nE
15320 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ntry = 0;.  }.  
15330 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
15340 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
15350 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
15360 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
15370 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
15380 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
15390 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
153a0 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
153b0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
153c0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
153d0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
153e0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
153f0 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
15400 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
15410 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
15420 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
15430 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
15440 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
15450 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
15460 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
15470 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
154a0 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
154b0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
154c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
154d0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
154e0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
154f0 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
15500 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
15510 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
15520 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
15530 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
15540 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
15550 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
15560 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
15570 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
15580 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
15590 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
155a0 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
155b0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
155c0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
155d0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
155e0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
155f0 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
15600 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
15610 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
15620 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
15630 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
15640 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
15650 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
15660 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
15670 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
15680 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
15690 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
156a0 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
156b0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
156c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
156d0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
156e0 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20  t(db) );..  if( 
156f0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
15700 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
15710 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
15720 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
15730 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
15740 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
15750 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
15760 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
15770 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
15780 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
15790 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
157a0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
157b0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
157c0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
157d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
157e0 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
157f0 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
15800 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15810 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15820 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
15830 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
15840 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
15850 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
15860 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
15870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
15880 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
15890 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
158a0 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
158b0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
158c0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
158d0 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
158e0 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
158f0 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
15900 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
15910 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
15920 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
15930 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
15940 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
15950 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
15960 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
15970 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
15980 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
15990 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
159a0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
159b0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
159c0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
159d0 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
159e0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
159f0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
15a00 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
15a30 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
15a40 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
15a50 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
15a60 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15a70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15a80 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
15a90 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
15aa0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
15ab0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
15ac0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
15ad0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
15ae0 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
15af0 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
15b00 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
15b10 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
15b20 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
15b30 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
15b40 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
15b50 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
15b60 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
15b70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
15b80 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
15b90 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
15ba0 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
15bb0 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
15bc0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
15bd0 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
15be0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
15bf0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
15c00 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
15c10 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
15c20 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
15c30 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
15c40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
15c50 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
15c60 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  +;.        }..  
15c70 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
15c80 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
15c90 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
15ca0 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
15cb0 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
15cc0 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
15cd0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
15ce0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
15cf0 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
15d00 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
15d10 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
15d20 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
15d30 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
15d40 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
15d50 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
15d60 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
15d70 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
15d80 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
15d90 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
15da0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
15db0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
15dc0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
15dd0 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
15de0 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
15df0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
15e00 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
15e10 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
15e20 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
15e30 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
15e40 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
15e50 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
15e60 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
15e70 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
15e80 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
15e90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15ea0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15eb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
15ec0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
15ed0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
15ee0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
15ef0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
15f00 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  f( db->writeVdbe
15f10 43 6e 74 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  Cnt>0 && p1==SAV
15f20 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
15f30 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
15f40 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
15f50 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
15f60 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
15f70 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
15f80 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
15f90 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
15fa0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
15fb0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15fc0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
15fd0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15fe0 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
15ff0 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
16000 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a  ts in progress".
16010 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
16020 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16030 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
16040 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
16050 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
16060 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
16070 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
16080 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
16090 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
160a0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
160b0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
160c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
160d0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
160e0 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
160f0 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
16100 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
16110 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
16120 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16130 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
16140 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
16150 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
16160 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16170 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
16180 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
16190 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
161a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
161b0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
161c0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
161d0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
161e0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
161f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16200 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
16210 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
16220 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
16230 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
16240 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
16250 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
16260 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16270 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
16280 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16290 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
162a0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
162b0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
162c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
162d0 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
162e0 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  {.        iSavep
162f0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
16300 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
16310 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
16320 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16330 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
16340 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
16350 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
16360 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
16370 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
16380 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
16390 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c  aDb[ii].pBt, SQL
163a0 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20  ITE_ABORT);.    
163b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
163c0 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
163d0 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
163e0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
163f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16400 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
16410 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
16420 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
16430 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
16440 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16450 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
16460 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16470 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
16480 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16490 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
164a0 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64  T_ROLLBACK && (d
164b0 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
164c0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
164d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
164e0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
164f0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
16500 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
16510 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
16520 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
16530 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
16540 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
16550 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
16560 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
16570 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16580 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
16590 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
165a0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
165b0 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
165c0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
165d0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
165e0 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
165f0 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
16600 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16610 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
16620 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
16630 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
16640 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
16650 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16660 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16670 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
16680 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
16690 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
166a0 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
166b0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
166c0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
166d0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
166e0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
166f0 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
16700 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
16710 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
16720 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
16730 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
16740 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
16750 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
16760 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
16770 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
16780 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
16790 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
167a0 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
167b0 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
167c0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
167d0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
167e0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
167f0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16800 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
16810 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
16820 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
16830 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
16840 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16850 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
16860 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
16870 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
16880 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
16890 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
168a0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
168b0 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
168c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
168d0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
168e0 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
168f0 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
16900 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  s;.      }..    
16910 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
16920 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
16930 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
16940 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31  Savepoint(db, p1
16950 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
16960 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
16970 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
16980 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16990 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
169a0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
169b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
169c0 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
169d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
169e0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
169f0 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
16a00 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
16a10 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
16a20 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
16a30 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
16a40 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
16a50 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
16a60 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
16a70 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
16a80 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
16a90 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
16aa0 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
16ab0 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
16ac0 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
16ad0 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
16ae0 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
16af0 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
16b00 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
16b10 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
16b20 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
16b30 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
16b40 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
16b50 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
16b60 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75  llback;.  int tu
16b70 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72  rnOnAC;..  desir
16b80 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
16b90 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
16ba0 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
16bb0 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69   turnOnAC = desi
16bc0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26  redAutoCommit &&
16bd0 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
16be0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
16bf0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
16c00 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
16c10 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
16c20 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
16c30 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
16c40 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
16c50 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69  assert( db->acti
16c60 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20  veVdbeCnt>0 );  
16c70 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
16c80 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
16c90 65 20 2a 2f 0a 0a 23 69 66 20 30 0a 20 20 69 66  e */..#if 0.  if
16ca0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
16cb0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61  ollback && db->a
16cc0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29  ctiveVdbeCnt>1 )
16cd0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
16ce0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
16cf0 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
16d00 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
16d10 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
16d20 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
16d30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
16d40 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
16d50 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
16d60 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
16d70 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
16d80 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
16d90 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
16da0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
16db0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
16dc0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
16dd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
16de0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
16df0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
16e00 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
16e10 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16e20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69  }else.#endif.  i
16e30 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
16e40 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
16e50 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
16e60 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
16e70 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
16e80 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
16e90 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
16ea0 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
16eb0 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
16ec0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
16ed0 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
16ee0 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
16ef0 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
16f00 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16f10 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16f20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
16f30 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
16f40 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
16f50 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16f60 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
16f70 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16f80 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
16f90 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
16fa0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
16fb0 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
16fc0 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
16fd0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16fe0 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
16ff0 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
17000 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
17010 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
17020 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
17030 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
17040 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
17050 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
17060 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
17070 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
17080 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17090 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
170a0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
170b0 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
170c0 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66  Commit;.      if
170d0 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
170e0 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
170f0 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Y ){.        p->
17100 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
17110 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17120 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
17130 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
17140 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17150 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17160 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
17170 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
17180 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
17190 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
171a0 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
171b0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
171c0 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
171d0 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
171e0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
171f0 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
17200 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
17210 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
17220 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
17230 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
17240 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
17250 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17260 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20  rrMsg, db,.     
17270 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
17280 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
17290 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
172a0 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
172b0 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
172c0 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
172d0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
172e0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
172f0 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
17320 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
17330 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
17340 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
17350 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
17360 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
17370 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
17380 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a  action P1 P2 * *
17390 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61   *.**.** Begin a
173a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
173b0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
173c0 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69  nds when a Commi
173d0 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a  t or Rollback.**
173e0 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75   opcode is encou
173f0 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69  ntered.  Dependi
17400 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e  ng on the ON CON
17410 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74  FLICT setting, t
17420 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  he.** transactio
17430 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  n might also be 
17440 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61  rolled back if a
17450 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  n error is encou
17460 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31  ntered..**.** P1
17470 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
17480 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
17490 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  le on which the 
174a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
174b0 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65  * started.  Inde
174c0 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  x 0 is the main 
174d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
174e0 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65  d index 1 is the
174f0 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f  .** file used fo
17500 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
17510 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20  es.  Indices of 
17520 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73  2 or more are us
17530 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68  ed for.** attach
17540 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ed databases..**
17550 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
17560 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
17570 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
17580 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52  is started.  A R
17590 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a  ESERVED lock is.
175a0 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  ** obtained on t
175b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
175c0 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   when a write-tr
175d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
175e0 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68  rted.  No.** oth
175f0 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73  er process can s
17600 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69  tart another wri
17610 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  te transaction w
17620 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61  hile this transa
17630 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65  ction is.** unde
17640 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20  rway.  Starting 
17650 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
17660 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73  ion also creates
17670 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
17680 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20  nal. A.** write 
17690 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
176a0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
176b0 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63  re any changes c
176c0 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
176d0 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  e.** database.  
176e0 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72  If P2 is 2 or gr
176f0 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58  eater then an EX
17700 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20  CLUSIVE lock is 
17710 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  also obtained.**
17720 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a   on the file..**
17730 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74  .** If a write-t
17740 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17750 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64  arted and the Vd
17760 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  be.usesStmtJourn
17770 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72  al flag is.** tr
17780 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73  ue (this flag is
17790 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65   set if the Vdbe
177a0 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65   may modify more
177b0 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e   than one row an
177c0 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61  d may.** throw a
177d0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
177e0 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  n), a statement 
177f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
17800 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a  also be opened..
17810 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63  ** More specific
17820 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e  ally, a statemen
17830 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
17840 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20   opened iff the 
17850 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
17860 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
17870 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63  tly not in autoc
17880 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69  ommit mode, or i
17890 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  f there are othe
178a0 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74  r.** active stat
178b0 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d  ements. A statem
178c0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
178d0 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67  allows the chang
178e0 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a  es made by this.
178f0 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f  ** VDBE to be ro
17900 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20  lled back after 
17910 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74  an error without
17920 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20   having to roll 
17930 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69  back the.** enti
17940 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
17950 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65  If no error is e
17960 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20  ncountered, the 
17970 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17980 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75  ction.** will au
17990 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d  tomatically comm
179a0 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45  it when the VDBE
179b0 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   halts..**.** If
179c0 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
179d0 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73  n a read-lock is
179e0 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
179f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
17a00 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
17a10 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
17a20 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
17a30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
17a40 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
17a50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
17a60 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
17a70 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
17a80 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
17a90 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
17aa0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
17ab0 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
17ac0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
17ad0 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
17ae0 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20  p->p2);.    if( 
17af0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
17b00 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
17b10 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63   pc;.      p->rc
17b20 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
17b30 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
17b40 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17b50 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53   }.    if( rc!=S
17b60 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17b70 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
17b80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
17b90 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ..    if( pOp->p
17ba0 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74  2 && p->usesStmt
17bb0 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26  Journal .     &&
17bc0 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   (db->autoCommit
17bd0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76  ==0 || db->activ
17be0 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20  eVdbeCnt>1) .   
17bf0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
17c00 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
17c10 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
17c20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
17c30 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
17c40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
17c50 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
17c60 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
17c70 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
17c80 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
17c90 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
17ca0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
17cb0 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
17cc0 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
17cd0 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
17ce0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17cf0 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
17d00 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
17d10 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
17d20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
17d30 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
17d40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17d50 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
17d60 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
17d70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
17d80 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
17d90 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
17da0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
17db0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
17dc0 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
17dd0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
17de0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17df0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
17e00 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
17e10 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
17e20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
17e30 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
17e40 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
17e50 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
17e60 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
17e70 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  redCons;.    }. 
17e80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
17e90 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
17ea0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
17eb0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
17ec0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
17ed0 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
17ee0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
17ef0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
17f00 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
17f10 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
17f20 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
17f30 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
17f40 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
17f50 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
17f60 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
17f70 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
17f80 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
17f90 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
17fa0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
17fb0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
17fc0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
17fd0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
17fe0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
17ff0 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
18000 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
18010 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
18020 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
18030 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
18040 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
18050 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
18060 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
18070 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
18080 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
18090 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
180a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
180b0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
180c0 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
180d0 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
180e0 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  e;..  iDb = pOp-
180f0 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
18100 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
18110 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
18120 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
18130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
18140 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
18150 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
18160 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
18170 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
18180 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
18190 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
181a0 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73  iDb))!=0 );..  s
181b0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
181c0 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
181d0 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75  pBt, iCookie, (u
181e0 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
181f0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74  pOut->u.i = iMet
18200 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  a;.  break;.}../
18210 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
18220 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
18230 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
18240 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
18250 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72  ster P3 (interpr
18260 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
18270 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b  er).** into cook
18280 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
18290 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32  database P1.  P2
182a0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
182b0 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20  a version.  .** 
182c0 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
182d0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32  abase format. P2
182e0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
182f0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
18300 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
18310 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
18320 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
18330 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
18340 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
18350 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
18360 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
18370 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
18380 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
18390 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
183a0 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
183b0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
183c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
183d0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f  ookie: {       /
183e0 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70  * in3 */.  Db *p
183f0 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
18400 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
18410 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
18420 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
18430 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
18440 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18450 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
18460 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
18470 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
18480 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
18490 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
184a0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
184b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
184c0 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
184d0 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
184e0 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20  1, 0) );.  pIn3 
184f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
18500 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
18510 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18520 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
18530 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
18540 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
18550 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
18560 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
18570 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
18580 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
18590 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
185a0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
185b0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
185c0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
185d0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
185e0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
185f0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
18600 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
18610 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
18620 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
18630 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
18640 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
18650 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
18660 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
18670 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
18680 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
18690 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
186a0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
186b0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
186c0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
186d0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
186e0 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
186f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
18700 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
18710 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
18720 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
18730 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
18740 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
18750 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
18760 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
18770 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
18780 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18790 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
187a0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
187b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
187c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72  ../* Opcode: Ver
187d0 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  ifyCookie P1 P2 
187e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
187f0 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ck the value of 
18800 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20  global database 
18810 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
18820 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d   0 (the.** schem
18830 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d  a version) and m
18840 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65  ake sure it is e
18850 71 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74  qual to P2 and t
18860 68 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72  hat the.** gener
18870 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e  ation counter on
18880 20 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d   the local schem
18890 61 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50  a parse equals P
188a0 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3..**.** P1 is t
188b0 68 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62  he database numb
188c0 65 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f  er which is 0 fo
188d0 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
188e0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  ase file.** and 
188f0 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68  1 for the file h
18900 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  olding temporary
18910 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65   tables and some
18920 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a   higher number.*
18930 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20  * for auxiliary 
18940 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
18950 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
18960 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
18970 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
18980 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
18990 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
189a0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
189b0 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
189c0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
189d0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
189e0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
189f0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
18a00 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
18a10 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65  ema..**.** Eithe
18a20 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  r a transaction 
18a30 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65  needs to have be
18a40 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e  en started or an
18a50 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a   OP_Open needs.*
18a60 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  * to be executed
18a70 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61   (to establish a
18a80 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f   read lock) befo
18a90 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  re this opcode i
18aa0 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f  s.** invoked..*/
18ab0 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43  .case OP_VerifyC
18ac0 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69  ookie: {.  int i
18ad0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
18ae0 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
18af0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18b00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18b10 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18b20 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
18b30 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
18b40 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
18b50 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
18b60 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
18b70 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
18b80 31 2c 20 30 29 20 29 3b 0a 20 20 70 42 74 20 3d  1, 0) );.  pBt =
18b90 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18ba0 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74  ].pBt;.  if( pBt
18bb0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
18bc0 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
18bd0 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45   BTREE_SCHEMA_VE
18be0 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69  RSION, (u32 *)&i
18bf0 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20  Meta);.    iGen 
18c00 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
18c10 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
18c20 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65  eration;.  }else
18c30 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65  {.    iGen = iMe
18c40 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ta = 0;.  }.  if
18c50 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32  ( iMeta!=pOp->p2
18c60 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
18c70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  3 ){.    sqlite3
18c80 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
18c90 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
18ca0 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
18cb0 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
18cc0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
18cd0 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
18ce0 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
18cf0 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
18d00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
18d10 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
18d20 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
18d30 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
18d40 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
18d50 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
18d60 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
18d70 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
18d80 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
18d90 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
18da0 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
18db0 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
18dc0 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
18dd0 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
18de0 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
18df0 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
18e00 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
18e10 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
18e20 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
18e30 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
18e40 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
18e50 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
18e60 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
18e70 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
18e80 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
18e90 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
18ea0 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
18eb0 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
18ec0 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
18ed0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
18ee0 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
18ef0 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
18f00 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
18f10 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
18f20 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
18f30 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
18f40 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
18f50 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
18f60 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
18f70 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
18f80 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
18f90 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
18fa0 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
18fb0 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
18fc0 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
18fd0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
18fe0 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
18ff0 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
19000 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
19010 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
19020 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78 70     }..    p->exp
19030 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
19040 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
19050 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19060 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
19070 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
19080 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  4 P5.**.** Open 
19090 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
190a0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
190b0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
190c0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
190d0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
190e0 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
190f0 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
19100 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
19110 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
19120 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19130 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
19140 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
19150 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
19160 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
19170 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
19180 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
19190 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
191a0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
191b0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
191c0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
191d0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
191e0 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
191f0 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
19200 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
19210 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
19220 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
19230 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
19240 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
19250 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19260 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
19270 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
19280 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
19290 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
192a0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
192b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
192c0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
192d0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
192e0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
192f0 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
19300 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
19310 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
19320 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
19330 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
19340 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
19350 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
19360 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
19370 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
19380 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
19390 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
193a0 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
193b0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
193c0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
193d0 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
193e0 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
193f0 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
19400 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
19410 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
19420 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
19430 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
19440 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
19450 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
19460 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
19470 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
19480 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
19490 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
194a0 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
194b0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
194c0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
194d0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
194e0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
194f0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
19500 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19510 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19520 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19530 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19540 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19550 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19560 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19570 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
19580 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
19590 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
195a0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
195b0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
195c0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
195d0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
195e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
195f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
19600 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
19610 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
19620 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
19630 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19640 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
19650 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
19660 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
19670 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
19680 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
19690 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
196a0 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
196b0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
196c0 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
196d0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
196e0 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
196f0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
19700 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
19710 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
19720 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
19730 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
19740 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
19750 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
19760 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
19770 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
19780 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
19790 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
197a0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
197b0 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
197c0 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
197d0 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
197e0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
197f0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
19800 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
19810 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
19820 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
19830 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
19840 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
19850 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
19860 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
19870 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
19880 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
19890 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
198a0 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
198b0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
198c0 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
198d0 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
198e0 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
198f0 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
19900 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
19910 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
19920 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
19930 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
19940 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
19950 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
19960 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
19970 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
19980 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
19990 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  ite: {.  int nFi
199a0 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
199b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
199c0 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
199d0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
199e0 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
199f0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
19a00 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
19a10 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50  rt( (pOp->p5&(OP
19a20 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46  FLAG_P2ISREG|OPF
19a30 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70  LAG_BULKCSR))==p
19a40 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65  Op->p5 );.  asse
19a50 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
19a60 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
19a70 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 0a   pOp->p5==0 );..
19a80 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
19a90 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
19aa0 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62  ITE_ABORT;.    b
19ab0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
19ac0 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
19ad0 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
19ae0 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
19af0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
19b00 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
19b10 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
19b20 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
19b30 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
19b40 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
19b50 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
19b60 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
19b70 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
19b80 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
19b90 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
19ba0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
19bb0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a      wrFlag = 1;.
19bc0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
19bd0 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
19be0 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
19bf0 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
19c00 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
19c10 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
19c20 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
19c30 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
19c40 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
19c50 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
19c60 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
19c70 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
19c80 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
19c90 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
19ca0 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
19cb0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
19cc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
19cd0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
19ce0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
19cf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
19d00 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
19d10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
19d20 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
19d30 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
19d40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
19d50 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
19d60 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
19d70 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
19d80 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
19d90 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
19da0 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
19db0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
19dc0 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
19dd0 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
19de0 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
19df0 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
19e00 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
19e10 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
19e20 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
19e30 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
19e40 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
19e50 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
19e60 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
19e70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
19e80 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
19e90 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
19ea0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
19eb0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
19ec0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19ed0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
19ee0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
19ef0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
19f00 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
19f10 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
19f20 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f  fo;.    pKeyInfo
19f30 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
19f40 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  b);.    nField =
19f50 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
19f60 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d+1;.  }else if(
19f70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
19f80 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
19f90 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
19fa0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
19fb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
19fc0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
19fd0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
19fe0 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31  , nField, iDb, 1
19ff0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
1a000 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1a010 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
1a020 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
1a030 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63  rdered = 1;.  rc
1a040 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1a050 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1a060 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1a070 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
1a080 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1a090 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61   = pKeyInfo;.  a
1a0a0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55  ssert( OPFLAG_BU
1a0b0 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c  LKCSR==BTREE_BUL
1a0c0 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74  KLOAD );.  sqlit
1a0d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1a0e0 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  ts(pCur->pCursor
1a0f0 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  , (pOp->p5 & OPF
1a100 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a  LAG_BULKCSR));..
1a110 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65    /* Since it pe
1a120 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79  rforms no memory
1a130 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49   allocation or I
1a140 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75  O, the only valu
1a150 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69  e that.  ** sqli
1a160 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
1a170 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53   may return is S
1a180 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61  QLITE_OK. */.  a
1a190 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1a1a0 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65  E_OK );..  /* Se
1a1b0 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1a1c0 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49  .isTable and isI
1a1d0 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20  ndex variables. 
1a1e0 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1a1f0 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1a200 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1a210 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1a220 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1a230 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1a240 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1a250 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1a260 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1a270 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1a280 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1a290 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1a2a0 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1a2b0 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1a2c0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1a2d0 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
1a2e0 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
1a2f0 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b   !pCur->isTable;
1a300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a310 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1a320 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1a330 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
1a340 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1a350 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1a360 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1a370 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1a380 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1a390 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1a3a0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1a3b0 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1a3c0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1a3d0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1a3e0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1a3f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1a400 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1a410 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1a420 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1a430 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1a440 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1a450 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1a460 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1a470 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1a480 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1a490 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1a4a0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1a4b0 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1a4c0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1a4d0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1a4e0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1a4f0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1a500 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1a510 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
1a520 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
1a530 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
1a540 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
1a550 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
1a560 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
1a570 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
1a580 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
1a590 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
1a5a0 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
1a5b0 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
1a5c0 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
1a5d0 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
1a5e0 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
1a5f0 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
1a600 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
1a610 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
1a620 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
1a630 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70  ..**.** The P5 p
1a640 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20  arameter can be 
1a650 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54  a mask of the BT
1a660 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69  REE_* flags defi
1a670 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e  ned.** in btree.
1a680 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20  h.  These flags 
1a690 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20  control aspects 
1a6a0 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
1a6b0 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65   of.** the btree
1a6c0 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49  .  The BTREE_OMI
1a6d0 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54  T_JOURNAL and BT
1a6e0 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73  REE_SINGLE flags
1a6f0 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75   are.** added au
1a700 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
1a710 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41  /* Opcode: OpenA
1a720 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a  utoindex P1 P2 *
1a730 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1a740 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1a750 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1a760 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1a770 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1a780 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1a790 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1a7a0 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1a7b0 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1a7c0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1a7d0 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1a7e0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1a7f0 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1a800 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1a810 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1a820 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1a830 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1a840 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1a850 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  pCx;.  static co
1a860 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
1a870 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
1a880 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
1a890 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1a8a0 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
1a8b0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
1a8c0 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
1a8d0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
1a8e0 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
1a8f0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
1a900 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20  RANSIENT_DB;..  
1a910 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1a920 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1a930 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1a940 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1a950 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1a960 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1a970 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1a980 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
1a990 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
1a9a0 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
1a9b0 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20  b, &pCx->pBt, . 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1a9e0 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1a9f0 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1aa00 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1aa10 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1aa20 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1aa30 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1aa40 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
1aa50 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
1aa60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1aa70 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
1aa80 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
1aa90 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
1aaa0 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
1aab0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1aac0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
1aad0 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1aae0 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1aaf0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
1ab00 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1ab10 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1ab20 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1ab30 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
1ab40 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1ab50 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
1ab60 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
1ab70 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
1ab80 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f     */.    if( pO
1ab90 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29  p->p4.pKeyInfo )
1aba0 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
1abb0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1abc0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1abd0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
1abe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1abf0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
1ac00 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
1ac10 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1ac20 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1ac30 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1ac40 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1ac50 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1ac60 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1ac70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ac80 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1ac90 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a  >pBt, pgno, 1, .
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70  (KeyInfo*)pOp->p
1acd0 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  4.z, pCx->pCurso
1ace0 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
1acf0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1ad00 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1ad10 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1ad20 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
1ad30 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->db);.      }. 
1ad40 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1ad50 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1ad60 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1ad70 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1ad80 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1ad90 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1ada0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1adb0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1adc0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1add0 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1ade0 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1adf0 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70  _UNORDERED);.  p
1ae00 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  Cx->isIndex = !p
1ae10 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  Cx->isTable;.  b
1ae20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ae30 64 65 3a 20 4f 70 65 6e 53 6f 72 74 65 72 20 50  de: OpenSorter P
1ae40 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1ae50 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1ae60 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1ae70 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1ae80 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1ae90 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1aea0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1aeb0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1aec0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1aed0 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1aee0 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1aef0 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1af00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
1af10 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
1af20 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 23  eCursor *pCx;..#
1af30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1af40 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20  IT_MERGE_SORT.  
1af50 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1af60 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1af70 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1af80 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1af90 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1afa0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1afb0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1afc0 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1afd0 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
1afe0 64 62 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f  db);.  pCx->isSo
1aff0 72 74 65 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d  rter = 1;.  rc =
1b000 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1b010 65 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b  erInit(db, pCx);
1b020 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70  .#else.  pOp->op
1b030 63 6f 64 65 20 3d 20 4f 50 5f 4f 70 65 6e 45 70  code = OP_OpenEp
1b040 68 65 6d 65 72 61 6c 3b 0a 20 20 70 63 2d 2d 3b  hemeral;.  pc--;
1b050 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
1b060 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1b070 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1b080 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  P3 * P5.**.** Op
1b090 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1b0a0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1b0b0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1b0c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1b0d0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1b0e0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1b0f0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1b100 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
1b110 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1b120 73 74 65 72 20 50 32 20 77 68 65 6e 20 50 35 3d  ster P2 when P5=
1b130 3d 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  =0.  In other wo
1b140 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1b150 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1b160 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1b170 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1b180 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1b190 65 72 20 50 32 2e 20 20 57 68 65 6e 20 50 35 3d  er P2.  When P5=
1b1a0 3d 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  =1, then the.** 
1b1b0 72 6f 77 20 69 73 20 72 65 70 72 65 73 65 6e 74  row is represent
1b1c0 65 64 20 62 79 20 50 33 20 63 6f 6e 73 65 63 75  ed by P3 consecu
1b1d0 74 69 76 65 20 72 65 67 69 73 74 65 72 73 20 62  tive registers b
1b1e0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 32  eginning with P2
1b1f0 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1b200 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1b210 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1b220 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1b230 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1b240 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1b250 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1b260 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1b270 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1b280 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1b290 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1b2a0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1b2b0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1b2c0 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1b2d0 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1b2e0 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1b2f0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1b300 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1b310 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1b320 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1b330 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1b340 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1b350 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1b360 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1b370 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1b380 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1b390 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1b3a0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b3b0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b3c0 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1b3d0 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
1b3e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b3f0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1b400 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
1b410 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1b420 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1b430 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
1b440 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20  ->isIndex = 0;. 
1b450 20 70 43 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64   pCx->multiPseud
1b460 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62  o = pOp->p5;.  b
1b470 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1b480 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1b490 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1b4a0 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1b4b0 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1b4c0 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1b4d0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1b4e0 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1b4f0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1b500 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1b510 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1b520 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1b530 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1b540 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1b550 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1b560 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1b570 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1b580 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1b590 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b5a0 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50  : SeekGe P1 P2 P
1b5b0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1b5c0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b5d0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1b5e0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1b5f0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1b600 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1b610 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1b620 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1b630 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b640 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1b650 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1b660 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1b670 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1b680 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1b690 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1b6a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1b6b0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1b6c0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1b6d0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1b6e0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1b6f0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1b700 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1b710 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1b720 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1b730 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1b740 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1b750 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1b760 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1b770 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1b780 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1b790 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b7a0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1b7b0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1b7c0 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1b7d0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1b7e0 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33   SeekGt P1 P2 P3
1b7f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
1b800 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1b810 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1b820 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1b830 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1b840 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1b850 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1b860 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1b870 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1b880 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1b890 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1b8a0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1b8b0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1b8c0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1b8d0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1b8e0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1b8f0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1b900 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1b910 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1b920 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1b930 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1b940 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1b950 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1b960 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1b970 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1b980 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1b990 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1b9a0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1b9b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1b9c0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1b9d0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1b9e0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1b9f0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1ba00 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50  ode: SeekLt P1 P
1ba10 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a  2 P3 P4 * .**.**
1ba20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ba30 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1ba40 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1ba50 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1ba60 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1ba70 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1ba80 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1ba90 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1baa0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1bab0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1bac0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1bad0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1bae0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1baf0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1bb00 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1bb10 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1bb20 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1bb30 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1bb40 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1bb50 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1bb60 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1bb70 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1bb80 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1bb90 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1bba0 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1bbb0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1bbc0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1bbd0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1bbe0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1bbf0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1bc00 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1bc10 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1bc20 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20  e: SeekLe P1 P2 
1bc30 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1bc40 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bc50 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1bc60 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1bc70 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1bc80 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1bc90 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1bca0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1bcb0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bcc0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1bcd0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1bce0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1bcf0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1bd00 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1bd10 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1bd20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1bd30 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1bd40 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1bd50 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1bd60 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1bd70 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1bd80 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1bd90 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1bda0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bdb0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bdc0 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1bdd0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1bde0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1bdf0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1be00 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1be10 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1be20 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1be30 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1be40 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1be50 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20   OP_SeekLt:     
1be60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1be70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1be80 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Le:         /* j
1be90 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1bea0 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20   OP_SeekGe:     
1beb0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1bec0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1bed0 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  Gt: {       /* j
1bee0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1bef0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b  t res;.  int oc;
1bf00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1bf10 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  C;.  UnpackedRec
1bf20 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69  ord r;.  int nFi
1bf30 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  eld;.  i64 iKey;
1bf40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
1bf50 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
1bf60 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  k to */..  asser
1bf70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1bf80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1bf90 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1bfa0 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
1bfb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1bfc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1bfd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1bfe0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1bff0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1c000 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1c010 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Le == OP_SeekLt+
1c020 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1c030 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53  P_SeekGe == OP_S
1c040 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73  eekLt+2 );.  ass
1c050 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d  ert( OP_SeekGt =
1c060 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b  = OP_SeekLt+3 );
1c070 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1c080 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66  sOrdered );.  if
1c090 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1c0a0 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
1c0b0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1c0c0 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1c0d0 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  w = 0;.    if( p
1c0e0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1c0f0 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1c100 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1c110 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1c120 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1c130 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20  , string,.      
1c140 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1c150 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1c160 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1c170 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1c180 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73  o.      ** the s
1c190 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
1c1a0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33  t. */.      pIn3
1c1b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1c1c0 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ];.      applyNu
1c1d0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1c1e0 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20  n3);.      iKey 
1c1f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1c200 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
1c210 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c220 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  lid = 0;..      
1c230 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1c240 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1c250 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1c260 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1c270 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20  t.      ** loss 
1c280 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1c290 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1c2a0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1c2b0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  red... */.      
1c2c0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1c2d0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1c2e0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  {.        if( (p
1c2f0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c300 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1c310 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1c320 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1c330 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1c340 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1c350 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1c360 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1c370 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1c380 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1c390 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  P2 */.          
1c3a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1c3b0 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
1c3c0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
1c3d0 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65       /* If we re
1c3e0 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
1c3f0 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75  then the P3 valu
1c400 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  e must be a floa
1c410 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20  ting.        ** 
1c420 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f  point number. */
1c430 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1c440 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1c450 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a  MEM_Real)!=0 );.
1c460 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65  .        if( iKe
1c470 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  y==SMALLEST_INT6
1c480 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64  4 && (pIn3->r<(d
1c490 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49  ouble)iKey || pI
1c4a0 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20  n3->r>0) ){.    
1c4b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20        /* The P3 
1c4c0 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72  value is too lar
1c4d0 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20  ge in magnitude 
1c4e0 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20  to be expressed 
1c4f0 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20  as an.          
1c500 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20  ** integer. */. 
1c510 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31           res = 1
1c520 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1c530 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20  pIn3->r<0 ){.   
1c540 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e           if( oc>
1c550 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61  =OP_SeekGe ){  a
1c560 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1c570 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGe || oc==OP_S
1c580 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1c590 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1c5a0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1c5b0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1c5c0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1c5d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1c5e0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1c5f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1c600 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c610 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c620 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d          if( oc<=
1c630 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73  OP_SeekLe ){  as
1c640 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1c650 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1c660 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20  ekLe );.        
1c670 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1c680 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1c690 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c6b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1c6c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1c6d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1c6e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c6f0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
1c700 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1c710 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c720 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1c730 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
1c740 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  eak;.        }el
1c750 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65  se if( oc==OP_Se
1c760 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1c770 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
1c780 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65     /* Use the ce
1c790 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e  iling() function
1c7a0 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
1c7b0 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
1c7c0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e     if( pIn3->r >
1c7d0 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1c7e0 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20  iKey++;.        
1c7f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1c800 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f   /* Use the floo
1c810 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  r() function to 
1c820 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e  convert real->in
1c830 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61  t */.          a
1c840 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1c850 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLe || oc==OP_S
1c860 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1c870 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c     if( pIn3->r <
1c880 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1c890 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20  iKey--;.        
1c8a0 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  }.      } .     
1c8b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c8c0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1c8d0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1c8e0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1c8f0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1c900 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1c910 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1c920 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c930 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c940 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1c950 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1c960 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20  sValid = 1;.    
1c970 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1c980 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20  d = iKey;.      
1c990 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1c9a0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1c9b0 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73  >p4.i;.      ass
1c9c0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1c9d0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1c9e0 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
1c9f0 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e  ld>0 );.      r.
1ca00 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1ca10 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
1ca20 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
1ca30 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a  Field;..      /*
1ca40 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1ca50 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1ca60 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1ca70 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a   faster:.      *
1ca80 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1ca90 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
1caa0 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20  SeekLe ){.      
1cab0 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1cac0 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
1cad0 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65  Y;.      **   }e
1cae0 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20  lse{.      **   
1caf0 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1cb00 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20       **   }.    
1cb10 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61    */.      r.fla
1cb20 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50 41 43  gs = (u16)(UNPAC
1cb30 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31  KED_INCRKEY * (1
1cb40 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1cb50 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73  Lt)));.      ass
1cb60 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1cb70 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55  Gt || r.flags==U
1cb80 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
1cb90 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1cba0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc!=OP_SeekLe |
1cbb0 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1cbc0 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1cbd0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1cbe0 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e  =OP_SeekGe || r.
1cbf0 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20  flags==0 );.    
1cc00 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1cc10 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61  _SeekLt || r.fla
1cc20 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  gs==0 );..      
1cc30 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
1cc40 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
1cc50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1cc60 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1cc70 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1cc80 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1cc90 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1cca0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1ccb0 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1ccc0 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20  b(r.aMem);.     
1ccd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cce0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1ccf0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1cd00 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1cd10 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1cd20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1cd30 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1cd40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1cd50 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1cd60 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1cd70 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1cd80 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1cd90 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1cda0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1cdb0 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1cdc0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1cdd0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1cde0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1cdf0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1ce00 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1ce10 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1ce20 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1ce30 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1ce40 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1ce50 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1ce60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ce70 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1ce80 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1ce90 20 20 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 20 67 6f 74 6f  SQLITE_OK ) goto
1ceb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1cec0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1ced0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1cee0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1cef0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1cf00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1cf10 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1cf20 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1cf30 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1cf40 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1cf50 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1cf60 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1cf70 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1cf80 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1cf90 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1cfa0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1cfb0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1cfc0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1cfd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1cfe0 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1cff0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1d000 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d010 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1d020 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1d030 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1d040 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1d050 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1d060 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1d070 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1d080 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1d090 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1d0a0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1d0b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1d0c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1d0d0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1d0e0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1d0f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1d100 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1d110 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1d120 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1d130 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1d140 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1d150 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1d160 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1d170 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1d180 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1d190 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1d1a0 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1d1b0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1d1c0 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1d1d0 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1d1e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1d1f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d200 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1d210 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1d220 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1d230 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1d240 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1d250 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1d260 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1d270 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1d280 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1d290 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1d2a0 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1d2b0 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1d2c0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1d2d0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1d2e0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1d2f0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1d300 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1d310 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1d320 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1d330 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1d340 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1d350 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1d360 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1d370 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1d380 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d390 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d3a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d3b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d3c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d3d0 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1d3e0 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1d3f0 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
1d400 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1d410 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1d420 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d   = 0;.    pIn2 =
1d430 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1d440 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1d450 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1d460 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1d470 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1d480 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1d490 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d4a0 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1d4b0 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1d4c0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1d4d0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1d4e0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1d4f0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1d500 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1d510 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1d520 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1d530 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d540 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1d550 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1d560 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1d570 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1d580 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1d590 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1d5a0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1d5b0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1d5c0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1d5d0 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1d5e0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1d5f0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1d600 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1d610 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1d620 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1d630 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f  g entry..*/./* O
1d640 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
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 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1d710 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1d720 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1d730 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1d740 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1d750 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1d760 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1d770 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1d780 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1d790 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1d7a0 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1d7b0 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1d7c0 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1d7d0 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1d7e0 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1d7f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1d800 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1d810 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1d820 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1d830 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1d840 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1d850 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1d860 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1d870 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1d880 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d890 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1d8a0 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1d8b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1d8c0 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1d8d0 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ts;.  VdbeCursor
1d8e0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1d8f0 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
1d900 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1d910 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1d920 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1d930 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1d940 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1d950 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1d960 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20  sizeof(Mem)*3 + 
1d970 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1d980 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
1d990 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1d9a0 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61  .#endif..  alrea
1d9b0 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  dyExists = 0;.  
1d9c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d9d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1d9e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1d9f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1da00 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1da10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1da20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1da30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
1da40 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1da50 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  p3];.  if( ALWAY
1da60 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1da70 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74  ) ){..    assert
1da80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1da90 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
1daa0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  >p4.i>0 ){.     
1dab0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1dac0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1dad0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1dae0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
1daf0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
1db00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1db10 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e  DEBUG.      { in
1db20 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1db30 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1db40 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1db50 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1db60 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
1db70 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1db80 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
1db90 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d  .      pIdxKey =
1dba0 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   &r;.    }else{.
1dbb0 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20        pIdxKey = 
1dbc0 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
1dbd0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
1dbe0 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b            pC->pK
1dbf0 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63  eyInfo, aTempRec
1dc00 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1dc10 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 20  c), &pFree.     
1dc20 20 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 70   ); .      if( p
1dc30 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
1dc40 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 61   no_mem;.      a
1dc50 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1dc60 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1dc70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1dc80 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1dc90 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f  M_Zero)==0 );  /
1dca0 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65  * zeroblobs alre
1dcb0 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a  ady expanded */.
1dcc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1dcd0 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
1dce0 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
1dcf0 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
1dd00 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 70 49  dxKey);.      pI
1dd10 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20  dxKey->flags |= 
1dd20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1dd30 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20  MATCH;.    }.   
1dd40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dd50 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1dd60 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1dd70 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1dd80 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  s);.    if( pOp-
1dd90 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1dda0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1ddb0 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 20 20  db, pFree);.    
1ddc0 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
1ddd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1dde0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1ddf0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1de00 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20  = (res==0);.    
1de10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1de20 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1de30 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1de40 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1de50 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1de60 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
1de70 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
1de80 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1de90 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
1dea0 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1deb0 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1dec0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1ded0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1dee0 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20  pcode: IsUnique 
1def0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1df00 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1df10 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65   open on an inde
1df20 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61 74 20  x b-tree - that 
1df30 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62 74 72  is to say, a btr
1df40 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64  ee which.** no d
1df50 61 74 61 20 61 6e 64 20 77 68 65 72 65 20 74 68  ata and where th
1df60 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f 72 64  e key are record
1df70 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f  s generated by O
1df80 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74  P_MakeRecord wit
1df90 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20 66 69  h.** the list fi
1dfa0 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20 69 6e  eld being the in
1dfb0 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74  teger ROWID of t
1dfc0 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68  he entry that th
1dfd0 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  e index.** entry
1dfe0 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a   refers to..**.*
1dff0 2a 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  * The P3 registe
1e000 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
1e010 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1e020 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73 20 72  ber. Call this r
1e030 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72  ecord .** number
1e040 20 52 2e 20 52 65 67 69 73 74 65 72 20 50 34 20   R. Register P4 
1e050 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e060 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69  a set of N conti
1e070 67 75 6f 75 73 20 72 65 67 69 73 74 65 72 73 0a  guous registers.
1e080 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  ** that make up 
1e090 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e0a0 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e 20 62  x key that can b
1e0b0 65 20 75 73 65 64 20 77 69 74 68 20 63 75 72 73  e used with curs
1e0c0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61  or P1..** The va
1e0d0 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62 65 20  lue of N can be 
1e0e0 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68  inferred from th
1e0f0 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c  e cursor. N incl
1e100 75 64 65 73 20 74 68 65 20 72 6f 77 69 64 0a 2a  udes the rowid.*
1e110 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64 65 64  * value appended
1e120 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
1e130 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e  he index record.
1e140 20 54 68 69 73 20 72 6f 77 69 64 20 76 61 6c 75   This rowid valu
1e150 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20  e may.** or may 
1e160 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  not be the same 
1e170 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  as R..**.** If a
1e180 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65 67 69  ny of the N regi
1e190 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
1e1a0 77 69 74 68 20 72 65 67 69 73 74 65 72 20 50 34  with register P4
1e1b0 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
1e1c0 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  .** value, jump 
1e1d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1e1e0 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  2..**.** Otherwi
1e1f0 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  se, this instruc
1e200 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 63  tion checks if c
1e210 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e  ursor P1 contain
1e220 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68  s an entry.** wh
1e230 65 72 65 20 74 68 65 20 66 69 72 73 74 20 28 4e  ere the first (N
1e240 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74 63 68  -1) fields match
1e250 20 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 76   but the rowid v
1e260 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e 64 0a  alue at the end.
1e270 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ** of the index 
1e280 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52 2e 20  entry is not R. 
1e290 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
1e2a0 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72  uch entry, contr
1e2b0 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69  ol jumps.** to i
1e2c0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
1e2d0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 72 6f  therwise, the ro
1e2e0 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c  wid of the confl
1e2f0 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20  icting index.** 
1e300 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65 64 20  entry is copied 
1e310 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
1e320 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73  nd control falls
1e330 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1e340 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
1e350 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1e360 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1e370 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a  otExists, Found.
1e380 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e 69  */.case OP_IsUni
1e390 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  que: {        /*
1e3a0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1e3b0 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65 43 75  u16 ii;.  VdbeCu
1e3c0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43  rsor *pCx;.  BtC
1e3d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1e3e0 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65  u16 nField;.  Me
1e3f0 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b  m *aMx;.  Unpack
1e400 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20  edRecord r;     
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e420 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65 61  B-Tree index sea
1e430 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  rch key */.  i64
1e440 20 52 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   R;             
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20  /* Rowid stored 
1e470 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  in register P3 *
1e480 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  /..  pIn3 = &aMe
1e490 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d  m[pOp->p3];.  aM
1e4a0 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  x = &aMem[pOp->p
1e4b0 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72  4.i];.  /* Asser
1e4c0 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  t that the value
1e4d0 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1e4e0 50 31 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e  P1 and P4 are in
1e4f0 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73   range. */.  ass
1e500 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1e510 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1e520 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
1e530 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69  i>0 && pOp->p4.i
1e540 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
1e550 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e560 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e570 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a  nCursor );..  /*
1e580 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20   Find the index 
1e590 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78  cursor. */.  pCx
1e5a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e5b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1e5c0 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  pCx->deferredMov
1e5d0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d  eto==0 );.  pCx-
1e5e0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
1e5f0 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61  .  pCx->cacheSta
1e600 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e610 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78  E;.  pCrsr = pCx
1e620 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  ->pCursor;..  /*
1e630 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76   If any of the v
1e640 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20  alues are NULL, 
1e650 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a  take the jump. *
1e660 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78  /.  nField = pCx
1e670 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  ->pKeyInfo->nFie
1e680 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20  ld;.  for(ii=0; 
1e690 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  ii<nField; ii++)
1e6a0 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b 69 69  {.    if( aMx[ii
1e6b0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1e6c0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ll ){.      pc =
1e6d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e6e0 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20      pCrsr = 0;. 
1e6f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e700 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1e710 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61  (aMx[nField].fla
1e720 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
1e730 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73  0 );..  if( pCrs
1e740 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50  r!=0 ){.    /* P
1e750 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65  opulate the inde
1e760 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f  x search key. */
1e770 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1e780 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b  = pCx->pKeyInfo;
1e790 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1e7a0 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20  nField + 1;.    
1e7b0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1e7c0 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
1e7d0 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61  ;.    r.aMem = a
1e7e0 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Mx;.#ifdef SQLIT
1e7f0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1e800 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1e810 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1e820 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1e830 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1e840 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
1e850 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61  * Extract the va
1e860 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65  lue of R from re
1e870 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20  gister P3. */.  
1e880 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1e890 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1e8a0 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e  ;.    R = pIn3->
1e8b0 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61  u.i;..    /* Sea
1e8c0 72 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69  rch the B-Tree i
1e8d0 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66  ndex. If no conf
1e8e0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69  licting record i
1e8f0 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20  s found, jump.  
1e900 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65    ** to P2. Othe
1e910 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20  rwise, copy the 
1e920 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1e930 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20  flicting record 
1e940 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  to.    ** regist
1e950 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74  er P3 and fall t
1e960 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1e970 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
1e980 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
1e990 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1e9a0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
1e9b0 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73  r, 0, 0, &pCx->s
1e9c0 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20  eekResult);.    
1e9d0 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55  if( (r.flags & U
1e9e0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1e9f0 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69  EARCH) || r.rowi
1ea00 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63  d==R ){.      pc
1ea10 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1ea20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ea30 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72   pIn3->u.i = r.r
1ea40 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  owid;.    }.  }.
1ea50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ea60 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
1ea70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1ea80 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  .** Use the cont
1ea90 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1eaa0 50 33 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P3 as an integer
1eab0 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
1eac0 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
1ead0 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
1eae0 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
1eaf0 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
1eb00 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
1eb10 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
1eb20 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
1eb30 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
1eb40 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1eb50 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1eb60 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1eb70 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1eb80 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1eb90 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1eba0 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1ebb0 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1ebc0 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1ebd0 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1ebe0 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1ebf0 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1ec00 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1ec10 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1ec20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1ec30 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1ec40 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1ec50 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1ec60 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1ec70 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1ec80 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1ec90 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1eca0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ecb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ecc0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1ecd0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1ece0 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1ecf0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1ed00 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1ed10 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1ed20 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1ed30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ed40 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ed50 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ed60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ed70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ed80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ed90 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1eda0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1edb0 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1edc0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1edd0 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
1ede0 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
1edf0 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
1ee00 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e     iKey = pIn3->
1ee10 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  u.i;.    rc = sq
1ee20 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1ee30 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1ee40 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1ee50 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  );.    pC->lastR
1ee60 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
1ee70 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
1ee80 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1ee90 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  ?1:0;.    pC->nu
1eea0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1eeb0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1eec0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1eed0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1eee0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66  veto = 0;.    if
1eef0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
1ef00 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1ef10 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
1ef20 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1ef30 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  id==0 );.    }. 
1ef40 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
1ef50 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65  t = res;.  }else
1ef60 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1ef70 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74  ppens when an at
1ef80 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20  tempt to open a 
1ef90 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74  read cursor on t
1efa0 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  he .    ** sqlit
1efb0 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72  e_master table r
1efc0 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1efd0 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  PTY..    */.    
1efe0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1eff0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1f000 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1f010 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65  0 );.    pC->see
1f020 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d  kResult = 0;.  }
1f030 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f040 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1f050 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1f060 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1f070 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1f080 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1f090 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1f0a0 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1f0b0 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1f0c0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1f0d0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f0e0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1f0f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1f100 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1f110 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1f120 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1f130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1f140 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f150 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f160 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f170 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f180 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1f190 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1f1a0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1f1b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f1c0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1f1d0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1f1e0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1f1f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1f200 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1f210 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1f220 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1f230 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1f240 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1f250 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1f260 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1f270 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1f280 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1f290 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1f2a0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1f2b0 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1f2c0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1f2d0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1f2e0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1f2f0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1f300 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1f310 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1f320 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1f330 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1f340 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1f350 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1f360 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1f370 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1f380 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1f390 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1f3a0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1f3b0 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1f3c0 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1f3d0 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1f3e0 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
1f3f0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1f400 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
1f410 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1f420 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
1f430 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1f440 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
1f450 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1f460 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1f470 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1f480 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1f490 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1f4a0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1f4b0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1f4c0 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f4e0 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1f4f0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1f500 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1f510 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1f520 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1f530 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f550 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1f560 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1f570 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f590 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1f5a0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
1f5b0 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
1f5c0 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
1f5d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1f5e0 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
1f5f0 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
1f600 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
1f610 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
1f620 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
1f630 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
1f640 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
1f650 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1f660 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1f670 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1f680 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f690 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f6a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f6b0 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
1f6c0 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
1f6d0 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
1f6e0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
1f6f0 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
1f700 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
1f710 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
1f720 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
1f730 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
1f740 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
1f750 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
1f760 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
1f770 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
1f780 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
1f790 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
1f7a0 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
1f7b0 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
1f7c0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
1f7d0 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
1f7e0 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
1f7f0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
1f800 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
1f810 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
1f820 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
1f830 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
1f840 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
1f850 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
1f860 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
1f870 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
1f880 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
1f890 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
1f8a0 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
1f8b0 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
1f8c0 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
1f8d0 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
1f8e0 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
1f8f0 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
1f900 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
1f910 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
1f920 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
1f930 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
1f940 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
1f950 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
1f960 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
1f970 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
1f980 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
1f990 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f9a0 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
1f9b0 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
1f9c0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1f9d0 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
1f9e0 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
1f9f0 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
1fa00 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
1fa10 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
1fa20 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1fa30 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
1fa40 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1fa50 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
1fa60 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
1fa70 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
1fa80 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
1fa90 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
1faa0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
1fab0 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
1fac0 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
1fad0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1fae0 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
1faf0 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
1fb00 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
1fb10 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
1fb20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
1fb30 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1fb40 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
1fb50 65 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeGetCachedRowid
1fb60 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1fb70 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b       if( v==0 ){
1fb80 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1fb90 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1fba0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1fbb0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1fbc0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1fbd0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1fbe0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fbf0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1fc00 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1fc10 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b            v = 1;
1fc20 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
1fc30 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
1fc40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fc50 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1fc60 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
1fc70 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73  sValid(pC->pCurs
1fc80 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20  or) );.         
1fc90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1fca0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1fcb0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1fcc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
1fcd0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
1fce0 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
1fcf0 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
1fd00 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
1fd10 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
1fd20 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
1fd30 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
1fd40 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
1fd50 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1fd60 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
1fd70 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
1fd80 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
1fd90 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1fda0 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1fdb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1fdc0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69  NCREMENT.      i
1fdd0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1fde0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1fdf0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1fe00 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1fe10 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
1fe20 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
1fe30 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70          if( p->p
1fe40 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
1fe50 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
1fe60 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
1fe70 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
1fe80 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
1fe90 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
1fea0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1feb0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1fec0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1fed0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1fee0 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
1fef0 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  m );.          p
1ff00 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
1ff10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1ff20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1ff30 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1ff40 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1ff50 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1ff60 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1ff70 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1ff80 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1ff90 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
1ffa0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1ffb0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
1ffc0 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
1ffd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1ffe0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1fff0 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
20000 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
20010 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
20020 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
20030 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
20040 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
20050 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
20060 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
20070 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
20080 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
20090 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
200a0 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
200b0 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
200c0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
200d0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
200e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
200f0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
20100 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
20110 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
20120 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20130 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20140 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
20150 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
20160 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
20170 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
20180 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
20190 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
201a0 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  dif..      sqlit
201b0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
201c0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
201d0 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f  r, v<MAX_ROWID ?
201e0 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d   v+1 : 0);.    }
201f0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
20200 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
20210 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
20220 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
20230 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
20240 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
20250 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
20260 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
20270 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
20280 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
20290 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
202a0 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
202b0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
202c0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
202d0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
202e0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
202f0 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
20300 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
20310 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
20320 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
20330 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
20340 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
20350 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
20360 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
20370 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
20380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20390 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
203a0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
203b0 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66       /* on the f
203c0 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69  irst attempt, si
203d0 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65  mply do one more
203e0 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a   than previous *
203f0 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61 73 74  /.      v = last
20400 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26  Rowid;.      v &
20410 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
20420 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73  ; /* ensure does
20430 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20  n't go negative 
20440 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a  */.      v++; /*
20450 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f   ensure non-zero
20460 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
20470 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  0;.      while( 
20480 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
20490 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
204a0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
204b0 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
204c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
204f0 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
20500 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
20510 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
20520 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
20530 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20  <100)){.        
20540 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74  /* collision - t
20550 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f  ry another rando
20560 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20  m rowid */.     
20570 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
20580 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
20590 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66   &v);.        if
205a0 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20  ( cnt<5 ){.     
205b0 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61       /* try "sma
205c0 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  ll" random rowid
205d0 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61  s for the initia
205e0 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20  l attempts */.  
205f0 20 20 20 20 20 20 20 20 76 20 26 3d 20 30 78 66          v &= 0xf
20600 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
20610 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
20620 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
20630 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64  >1); /* ensure d
20640 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69  oesn't go negati
20650 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  ve */.        }.
20660 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20          v++; /* 
20670 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20  ensure non-zero 
20680 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  */.      }.     
20690 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
206a0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
206b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
206c0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
206d0 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
206e0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
206f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
20700 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
20710 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
20720 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
20730 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
20740 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
20750 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
20760 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
20770 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
20780 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
20790 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
207a0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
207b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
207c0 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
207d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
207e0 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
207f0 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
20800 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
20810 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
20820 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
20830 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
20840 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
20850 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
20860 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
20870 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
20880 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
20890 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
208a0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
208b0 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
208c0 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
208d0 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
208e0 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
208f0 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
20900 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20910 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
20920 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
20930 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
20940 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
20950 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
20960 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
20970 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
20980 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
20990 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
209a0 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
209b0 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
209c0 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
209d0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
209e0 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
209f0 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
20a00 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
20a10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20a20 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
20a30 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
20a40 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65  et and if the re
20a50 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c  sult of.** the l
20a60 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69  ast seek operati
20a70 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73  on (OP_NotExists
20a80 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c  ) was a success,
20a90 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
20aa0 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74  eration will not
20ab0 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
20ac0 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
20ad0 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e   row before doin
20ae0 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20  g.** the insert 
20af0 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64  but will instead
20b00 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72   overwrite the r
20b10 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ow that the curs
20b20 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74  or is.** current
20b30 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ly pointing to. 
20b40 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65   Presumably, the
20b50 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69   prior OP_NotExi
20b60 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61  sts opcode.** ha
20b70 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69  s already positi
20b80 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
20b90 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73  correctly.  This
20ba0 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
20bb0 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73  ion.** that boos
20bc0 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62  ts performance b
20bd0 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e  y avoiding redun
20be0 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a  dant seeks..**.*
20bf0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20c00 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
20c10 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20   set, then this 
20c20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f  opcode is part o
20c30 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f  f an.** UPDATE o
20c40 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72  peration.  Other
20c50 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61  wise (if the fla
20c60 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e  g is clear) then
20c70 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20   this opcode.** 
20c80 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e  is part of an IN
20c90 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20  SERT operation. 
20ca0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
20cb0 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e  is only importan
20cc0 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61  t to.** the upda
20cd0 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50  te hook..**.** P
20ce0 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20  arameter P4 may 
20cf0 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65  point to a Table
20d00 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d   structure, or m
20d10 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
20d20 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c  t is .** not NUL
20d30 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  L, then the upda
20d40 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33  te-hook (sqlite3
20d50 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
20d60 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a  ) is invoked .**
20d70 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63   following a suc
20d80 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a  cessful insert..
20d90 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54  **.** (WARNING/T
20da0 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20  ODO: If P1 is a 
20db0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e  pseudo-cursor an
20dc0 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61  d P2 is dynamica
20dd0 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
20de0 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70  , then ownership
20df0 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66   of P2 is transf
20e00 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65  erred to the pse
20e10 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e  udo-cursor.** an
20e20 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65  d register P2 be
20e30 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e  comes ephemeral.
20e40 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20    If the cursor 
20e50 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a  is changed, the.
20e60 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  ** value of regi
20e70 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65  ster P2 will the
20e80 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20  n change.  Make 
20e90 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e  sure this does n
20ea0 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20  ot.** cause any 
20eb0 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a  problems.).**.**
20ec0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
20ed0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  n only works on 
20ee0 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75  tables.  The equ
20ef0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
20f00 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63  ion.** for indic
20f10 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65  es is OP_IdxInse
20f20 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
20f30 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50  : InsertInt P1 P
20f40 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
20f50 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
20f60 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
20f70 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
20f80 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
20f90 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
20fa0 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
20fb0 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
20fc0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
20fd0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
20fe0 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
20ff0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
21000 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
21010 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
21020 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
21030 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
21040 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
21050 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
21060 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21070 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
21080 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
21090 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
210a0 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
210b0 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
210c0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
210d0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
210e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
210f0 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
21100 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
21110 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
21120 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  n */.  int nZero
21130 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
21140 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73  er of zero-bytes
21150 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20   to append */.  
21160 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
21170 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
21180 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
21190 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
211a0 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
211b0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
211c0 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
211d0 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
211e0 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54  date hook */.  T
211f0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
21200 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74   /* Table struct
21210 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70  ure - used by up
21220 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64  date and pre-upd
21230 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69  ate hooks */.  i
21240 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
21250 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
21260 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
21270 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
21280 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
21290 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
212a0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
212b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
212c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
212d0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
212e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
212f0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
21300 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21310 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21320 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21330 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
21340 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21350 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21360 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21370 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
21380 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
21390 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f  ==P4_TABLE || pO
213a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4e 4f  p->p4type==P4_NO
213b0 54 55 53 45 44 20 29 3b 0a 20 20 52 45 47 49 53  TUSED );.  REGIS
213c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
213d0 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
213e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
213f0 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
21400 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
21410 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
21420 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
21430 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
21440 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21450 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
21460 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
21470 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
21480 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
21490 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
214a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
214b0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
214c0 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
214d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
214e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
214f0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
21500 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
21510 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
21520 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
21530 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21540 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
21550 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
21560 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
21570 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e   pTab = pOp->p4.
21580 70 54 61 62 3b 0a 20 20 20 20 6f 70 20 3d 20 28  pTab;.    op = (
21590 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
215a0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
215b0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
215c0 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
215d0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
215e0 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
215f0 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
21600 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
21610 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a  e hook, if any *
21620 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
21630 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a  UpdateCallback .
21640 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70     && pOp->p4typ
21650 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26  e==P4_TABLE.   &
21660 26 20 28 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  & (!(pOp->p5 & O
21670 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
21680 7c 7c 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  || pC->rowidIsVa
21690 6c 69 64 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20  lid==0).  ){.   
216a0 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
216b0 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
216c0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
216d0 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  zDb, pTab, iKey,
216e0 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23   pOp->p2);.  }.#
216f0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
21700 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
21710 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
21720 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
21730 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
21740 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
21750 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
21760 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
21770 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
21780 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
21790 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
217a0 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
217b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
217c0 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
217d0 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
217e0 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
217f0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
21800 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
21810 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
21820 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
21830 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
21840 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
21850 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
21860 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
21870 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
21880 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
21890 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
218a0 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
218b0 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
218c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
218d0 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
218e0 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
21910 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
21920 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21930 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
21940 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50  >p5 & OPFLAG_APP
21950 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  END, seekResult.
21960 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
21970 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21980 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21990 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
219a0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
219b0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
219c0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
219d0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
219e0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
219f0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
21a00 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
21a10 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
21a20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
21a30 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
21a40 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
21a50 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 69 4b   pTab->zName, iK
21a60 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
21a70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21a80 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
21a90 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
21aa0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
21ab0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
21ac0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
21ad0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
21ae0 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
21af0 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
21b00 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
21b10 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
21b20 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
21b30 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
21b40 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
21b50 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
21b60 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
21b70 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
21b80 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
21b90 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
21ba0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
21bb0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
21bc0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
21bd0 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
21be0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
21bf0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
21c00 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
21c10 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
21c20 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
21c30 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
21c40 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
21c50 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
21c60 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
21c70 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
21c80 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
21c90 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
21ca0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
21cb0 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e  ULL then it poin
21cc0 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  ts to a Table st
21cd0 72 75 74 75 72 65 2e 20 49 6e 20 74 68 69 73 20  ruture. In this 
21ce0 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20  case either .** 
21cf0 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72  the update or pr
21d00 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f  e-update hook, o
21d10 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69  r both, may be i
21d20 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63  nvoked. The P1 c
21d30 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61  ursor must.** ha
21d40 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
21d50 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ed using OP_NotF
21d60 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
21d70 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
21d80 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63  de in .** this c
21d90 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ase. Specificall
21da0 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  y, if one is con
21db0 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65  figured, the pre
21dc0 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  -update hook is 
21dd0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50  .** invoked if P
21de0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54  4 is not NULL. T
21df0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
21e00 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65  s invoked if one
21e10 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
21e20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55  .** P4 is not NU
21e30 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c  LL, and the OPFL
21e40 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
21e50 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a  is set in P2..**
21e60 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
21e70 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
21e80 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68  is set in P2, th
21e90 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  en P3 contains t
21ea0 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66  he address.** of
21eb0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
21ec0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
21ed0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  he value that th
21ee0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72  e rowid of the r
21ef0 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65  ow will.** be se
21f00 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61  t to by the upda
21f10 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  te..*/.case OP_D
21f20 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
21f30 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
21f40 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
21f50 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
21f60 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
21f70 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
21f80 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
21f90 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65  iKey = 0;.  asse
21fa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21fb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21fc0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
21fd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
21ff0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22000 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
22010 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
22020 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
22030 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
22040 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
22050 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
22060 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  BLE || pOp->p4ty
22070 70 65 3d 3d 50 34 5f 4e 4f 54 55 53 45 44 20 29  pe==P4_NOTUSED )
22080 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  ;..  /* The OP_D
22090 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
220a0 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
220b0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
220c0 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
220d0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
220e0 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
220f0 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
22100 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
22110 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
22120 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
22130 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
22140 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
22150 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
22160 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
22170 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
22180 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
22190 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
221a0 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
221b0 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
221c0 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
221d0 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
221e0 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
221f0 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
22200 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
22210 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
22220 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
22230 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
22240 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22250 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22260 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22270 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
22280 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
22290 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
222a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
222b0 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  _error;..  /* If
222c0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
222d0 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
222e0 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
222f0 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f  ked, set iKey to
22300 20 0a 20 20 2a 2a 20 74 68 65 20 72 6f 77 69 64   .  ** the rowid
22310 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e   of the row bein
22320 67 20 64 65 6c 65 74 65 64 2e 20 53 65 74 20 7a  g deleted. Set z
22330 44 62 20 61 6e 64 20 7a 54 61 62 20 61 73 20 77  Db and zTab as w
22340 65 6c 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ell..  */.  if( 
22350 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 41 53  pOp->p4.z && HAS
22360 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
22370 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
22380 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
22390 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
223a0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
223b0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
223c0 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73  Valid );  /* las
223d0 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72  tRowid set by pr
223e0 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75  evious OP_NotFou
223f0 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d  nd */.    iKey =
22400 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
22410 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
22420 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
22430 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
22440 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 7d 0a 0a  ->p4.pTab;.  }..
22450 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22460 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
22470 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
22480 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
22490 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
224a0 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
224b0 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
224c0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
224d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f  .    assert( !(o
224e0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
224f0 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d  ISUPDATE) || (aM
22500 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67  em[pOp->p3].flag
22510 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a  s & MEM_Int) );.
22520 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
22530 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
22540 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
22550 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
22560 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
22570 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
22580 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
22590 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65    zDb, pTab, iKe
225a0 79 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e  y,.        pOp->
225b0 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 23 65  p3.    );.  }.#e
225c0 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f 70 66 6c  ndif..  if( opfl
225d0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
225e0 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 0a 20 20  OOP ) break;..  
225f0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
22600 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
22610 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
22620 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22630 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
22640 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
22650 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22660 41 4c 45 3b 0a 0a 20 20 2f 2a 20 55 70 64 61 74  ALE;..  /* Updat
22670 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75  e the change-cou
22680 6e 74 65 72 20 61 6e 64 20 69 6e 76 6f 6b 65 20  nter and invoke 
22690 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
226a0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
226b0 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
226c0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
226d0 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
226e0 2b 2b 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ++;.    assert( 
226f0 70 4f 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20 20 20  pOp->p4.z );.   
22700 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22710 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
22720 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  eCallback ){.   
22730 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
22740 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
22750 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
22760 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
22770 3e 7a 4e 61 6d 65 2c 69 4b 65 79 29 3b 0a 20 20  >zName,iKey);.  
22780 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
22790 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
227a0 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
227b0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
227c0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
227d0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
227e0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
227f0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
22800 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
22810 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
22820 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
22830 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
22840 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
22850 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
22860 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
22870 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
22880 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
22890 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
228a0 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
228b0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
228c0 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
228d0 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
228e0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
228f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22900 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
22910 61 72 65 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  are P1 P2 P3.**.
22920 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
22930 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
22940 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
22950 72 65 73 20 74 68 65 20 72 65 63 6f 72 64 20 62  res the record b
22960 6c 6f 62 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lob in .** regis
22970 74 65 72 20 50 33 20 77 69 74 68 20 74 68 65 20  ter P3 with the 
22980 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 73  entry that the s
22990 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
229a0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
229b0 2e 0a 2a 2a 20 49 66 2c 20 65 78 63 6c 75 64 69  ..** If, excludi
229c0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 66 69 65  ng the rowid fie
229d0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2c 20  lds at the end, 
229e0 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
229f0 61 72 65 20 61 20 6d 61 74 63 68 2c 0a 2a 2a 20  are a match,.** 
22a00 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22a10 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
22a20 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c  tion. Otherwise,
22a30 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
22a40 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
22a50 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
22a60 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22a70 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
22a80 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
22a90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22aa0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
22ab0 70 43 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  pC) );.  pIn3 = 
22ac0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22ad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
22ae0 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
22af0 70 43 2c 20 70 49 6e 33 2c 20 26 72 65 73 29 3b  pC, pIn3, &res);
22b00 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22b10 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
22b20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22b30 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
22b40 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a  rterData P1 P2 *
22b50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
22b60 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22b70 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
22b80 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
22b90 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
22ba0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
22bb0 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
22bc0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 23 69 66 6e  ursor *pC;..#ifn
22bd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22be0 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 75  MERGE_SORT.  pOu
22bf0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
22c00 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
22c10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22c20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
22c30 72 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20 73  rter );.  rc = s
22c40 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
22c50 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
22c60 3b 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f  ;.#else.  pOp->o
22c70 70 63 6f 64 65 20 3d 20 4f 50 5f 52 6f 77 4b 65  pcode = OP_RowKe
22c80 79 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69  y;.  pc--;.#endi
22c90 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
22ca0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
22cb0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
22cc0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
22cd0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
22ce0 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
22cf0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22d00 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
22d10 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
22d20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
22d30 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
22d40 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
22d50 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
22d60 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
22d70 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22d80 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
22d90 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22da0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
22db0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
22dc0 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
22dd0 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
22de0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
22df0 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
22e00 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
22e10 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
22e20 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
22e30 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
22e40 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
22e50 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
22e60 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
22e70 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
22e80 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
22e90 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
22ea0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
22eb0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
22ec0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
22ed0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
22ee0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22ef0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
22f00 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
22f10 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
22f20 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
22f30 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
22f40 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
22f50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
22f60 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
22f70 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
22f80 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22f90 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
22fa0 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
22fb0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
22fc0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
22fd0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
22fe0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
22ff0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
23000 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
23010 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
23020 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
23030 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
23040 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23050 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23060 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23070 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23080 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
23090 74 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ter==0 );.  asse
230a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
230b0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
230c0 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
230d0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e  assert( pC->isIn
230e0 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  dex || pOp->opco
230f0 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
23100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23110 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23120 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
23130 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
23140 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
23150 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23160 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
23170 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23180 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
23190 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
231a0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
231b0 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  ) );..  /* The O
231c0 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
231d0 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
231e0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
231f0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
23200 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
23210 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
23220 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
23230 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
23240 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
23250 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
23260 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nce the followin
23270 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  g sqlite3VdbeCur
23280 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
23290 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   is always.  ** 
232a0 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20  a no-op and can 
232b0 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74  never fail.  But
232c0 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20   we leave it in 
232d0 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74  place as a safet
232e0 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  y..  */.  assert
232f0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23300 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
23310 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
23320 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
23330 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
23340 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
23350 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23360 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ror;..  if( pC->
23370 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61  isIndex ){.    a
23380 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
23390 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f  ble );.    VVA_O
233a0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
233b0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
233c0 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
233d0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
233e0 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
233f0 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
23400 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
23410 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
23420 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
23430 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
23440 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
23450 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
23460 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
23470 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
23480 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
23490 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
234a0 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
234b0 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
234c0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
234d0 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28      /* DataSize(
234e0 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
234f0 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
23500 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
23510 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
23520 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
23530 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
23540 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
23550 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
23560 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  n, 0) ){.    got
23570 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
23580 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d  pOut->n = n;.  M
23590 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
235a0 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  ut, MEM_Blob);. 
235b0 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
235c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
235d0 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
235e0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
235f0 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
23600 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23610 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
23620 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
23630 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
23640 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
23650 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
23660 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74  b is ever cast t
23670 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41  o text */.  UPDA
23680 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
23690 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
236a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
236b0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
236c0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
236d0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
236e0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
236f0 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
23700 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
23710 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
23720 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
23730 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
23740 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
23750 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
23760 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
23770 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
23780 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
23790 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
237a0 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
237b0 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
237c0 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
237d0 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
237e0 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
237f0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
23800 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
23810 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
23820 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ease */.  VdbeCu
23830 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
23840 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
23850 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
23860 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
23870 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
23880 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23890 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
238a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
238b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
238c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
238d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
238e0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
238f0 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75  Reg==0 || pC->nu
23900 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
23910 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
23920 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
23930 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
23940 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
23950 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23960 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
23970 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
23980 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23990 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
239a0 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
239b0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b  ->pVtabCursor ){
239c0 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d  .    pVtab = pC-
239d0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
239e0 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  tab;.    pModule
239f0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
23a00 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
23a10 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
23a20 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
23a30 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70  le->xRowid(pC->p
23a40 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b  VtabCursor, &v);
23a50 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45  .    importVtabE
23a60 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
23a70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23a80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23a90 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
23aa0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23ab0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23ac0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23ad0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
23ae0 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
23af0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23b00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
23b10 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
23b20 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
23b30 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
23b40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23b50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23b60 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
23b70 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
23b80 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23b90 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c  ITE_OK );  /* Al
23ba0 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20  ways so because 
23bb0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
23bc0 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d  ) above */.    }
23bd0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
23be0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
23bf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
23c00 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
23c10 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
23c20 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
23c30 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
23c40 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
23c50 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
23c60 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
23c70 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
23c80 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
23c90 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
23ca0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
23cb0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
23cc0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
23cd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23ce0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23cf0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23d00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23d10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23d20 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
23d30 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f  ow = 1;.  pC->ro
23d40 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
23d50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
23d60 75 72 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74  ursor || pC->pVt
23d70 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
23d80 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
23d90 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
23da0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
23db0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
23dc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23dd0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
23de0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
23df0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
23e00 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
23e10 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
23e20 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
23e30 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
23e40 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
23e50 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23e60 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
23e70 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
23e80 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
23e90 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
23ea0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
23eb0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
23ec0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
23ed0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
23ee0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
23ef0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
23f00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
23f10 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
23f20 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
23f30 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23f40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23f50 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23f60 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23f70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23f80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23f90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23fa0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23fb0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23fc0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
23fd0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
23fe0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 66  .  res = 0;.  if
23ff0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
24000 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0) ){.    rc = s
24010 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
24020 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
24030 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
24040 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
24050 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
24060 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
24070 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
24080 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24090 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
240a0 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
240b0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
240c0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
240d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
240e0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
240f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24100 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
24110 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
24120 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
24130 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
24140 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
24150 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
24160 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
24170 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
24180 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
24190 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
241a0 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
241b0 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
241c0 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
241d0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
241e0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
241f0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
24200 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
24210 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
24220 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
24230 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
24240 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
24250 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
24260 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
24270 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
24280 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
24290 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
242a0 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
242b0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
242c0 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
242d0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
242e0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
242f0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
24300 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
24310 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
24320 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
24330 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d  ERGE_SORT.  pOp-
24340 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72  >opcode = OP_Sor
24350 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
24360 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
24370 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
24380 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
24390 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
243a0 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
243b0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
243c0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
243d0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
243e0 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
243f0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
24400 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
24410 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
24420 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
24430 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
24440 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
24450 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
24460 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
24470 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
24480 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
24490 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
244a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
244b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
244c0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
244d0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
244e0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
244f0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
24500 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
24510 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
24520 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24530 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
24540 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
24550 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
24560 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
24570 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
24580 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24590 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
245a0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
245b0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
245c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
245d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
245e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
245f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24600 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24610 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24620 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
24630 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  ter==(pOp->opcod
24640 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
24650 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
24660 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
24670 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
24680 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
24690 52 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26  Rewind(db, pC, &
246a0 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
246b0 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
246c0 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
246d0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
246e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
246f0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
24700 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
24710 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
24720 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
24730 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
24740 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
24750 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24760 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
24770 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
24780 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
24790 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
247a0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
247b0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
247c0 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b   );.  if( res ){
247d0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
247e0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
247f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24800 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20 50  : Next P1 P2 * P
24810 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
24820 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
24830 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
24840 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
24850 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
24860 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
24870 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
24880 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
24890 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
248a0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
248b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
248c0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
248d0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
248e0 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
248f0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
24900 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24910 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
24920 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
24930 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
24940 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
24950 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  le..**.** P4 is 
24960 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
24970 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
24980 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
24990 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
249a0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
249b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
249c0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
249d0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
249e0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
249f0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
24a00 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
24a10 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
24a20 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
24a30 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
24a40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
24a50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35  rev P1 P2 * * P5
24a60 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
24a70 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
24a80 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
24a90 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
24aa0 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
24ab0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
24ac0 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
24ad0 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
24ae0 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
24af0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
24b00 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
24b10 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
24b20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
24b30 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
24b40 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
24b50 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24b60 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
24b70 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
24b80 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
24b90 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
24ba0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  able..**.** P4 i
24bb0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
24bc0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
24bd0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
24be0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
24bf0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
24c00 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
24c10 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
24c20 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
24c30 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
24c40 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24c50 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24c60 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24c70 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24c90 74 65 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a  terNext:    /* j
24ca0 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
24cb0 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
24cc0 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  SORT.  pOp->opco
24cd0 64 65 20 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65  de = OP_Next;.#e
24ce0 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 50 72 65  ndif.case OP_Pre
24cf0 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
24d00 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
24d10 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ext: {        /*
24d20 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
24d30 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
24d40 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
24d50 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
24d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24d70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24d80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
24d90 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41  sert( pOp->p5<=A
24da0 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
24db0 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
24dc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24dd0 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29  ];.  if( pC==0 )
24de0 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a  {.    break;  /*
24df0 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32 37   See ticket #227
24e00 33 20 2a 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72  3 */.  }.  asser
24e10 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d  t( pC->isSorter=
24e20 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
24e30 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 29 3b  P_SorterNext) );
24e40 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
24e50 70 43 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  pC) ){.    asser
24e60 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
24e70 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 20 29 3b  OP_SorterNext );
24e80 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24e90 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
24ea0 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20  db, pC, &res);. 
24eb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20   }else{.    res 
24ec0 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
24ed0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24ee0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
24ef0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
24f00 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
24f10 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
24f20 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
24f30 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
24f40 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
24f50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24f60 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
24f70 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24f80 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24f90 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 20  ePrevious );.   
24fa0 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
24fb0 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73  dvance(pC->pCurs
24fc0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  or, &res);.  }. 
24fd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
24fe0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61  u8)res;.  pC->ca
24ff0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
25000 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
25010 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
25020 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
25030 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
25040 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
25050 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
25060 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
25070 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
25080 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
25090 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
250a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
250b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
250c0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
250d0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
250e0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
250f0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
25100 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
25110 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
25120 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
25130 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
25140 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
25150 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
25160 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
25170 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
25180 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
25190 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
251a0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
251b0 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
251c0 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
251d0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
251e0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
251f0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
25200 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
25210 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
25220 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
25230 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
25240 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
25250 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
25260 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
25270 2f 2a 20 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66  /* in2 */.#ifdef
25280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52   SQLITE_OMIT_MER
25290 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f  GE_SORT.  pOp->o
252a0 70 63 6f 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e  pcode = OP_IdxIn
252b0 73 65 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73  sert;.#endif.cas
252c0 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
252d0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
252e0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
252f0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
25300 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b  *pCrsr;.  int nK
25310 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ey;.  const char
25320 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72   *zKey;..  asser
25330 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25340 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25350 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25360 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25370 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25380 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25390 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70  ->isSorter==(pOp
253a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
253b0 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
253c0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
253d0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
253e0 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
253f0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72  EM_Blob );.  pCr
25400 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
25410 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
25420 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
25430 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
25440 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63  ble==0 );.    rc
25450 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
25460 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  n2);.    if( rc=
25470 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25480 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72      if( isSorter
25490 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 20 20  (pC) ){.        
254a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
254b0 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20  SorterWrite(db, 
254c0 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  pC, pIn2);.     
254d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
254e0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
254f0 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70          zKey = p
25500 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20  In2->z;.        
25510 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25520 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
25530 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
25540 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
25550 20 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70             ((pOp
25560 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
25570 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
25580 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
25590 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  0).            )
255a0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
255b0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
255c0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20  veto==0 );.     
255d0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
255e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
255f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
25600 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25610 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
25620 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
25630 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  *.**.** The cont
25640 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74  ent of P3 regist
25650 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  ers starting at 
25660 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d  register P2 form
25670 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  .** an unpacked 
25680 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20  index key. This 
25690 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74  opcode removes t
256a0 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74  hat entry from t
256b0 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65  he .** index ope
256c0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
256d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
256e0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
256f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
25700 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
25710 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
25720 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
25730 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25740 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
25750 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
25760 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ->p2+pOp->p3<=p-
25770 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73  >nMem+1 );.  ass
25780 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25790 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
257a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
257b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
257c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
257d0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
257e0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
257f0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
25800 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  =0) ){.    r.pKe
25810 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
25820 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
25830 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
25840 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  3;.    r.flags =
25850 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d   0;.    r.aMem =
25860 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
25870 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25880 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
25890 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
258a0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
258b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
258c0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
258d0 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
258e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
258f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
25900 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
25910 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
25920 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
25930 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
25940 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
25950 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20  ete(pCrsr);.    
25960 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  }.    assert( pC
25970 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25980 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
25990 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
259a0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
259b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
259c0 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
259d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
259e0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
259f0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
25a00 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
25a10 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
25a20 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
25a30 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
25a40 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
25a50 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
25a60 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
25a70 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
25a80 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
25a90 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
25aa0 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
25ab0 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
25ac0 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
25ad0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
25ae0 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
25af0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
25b00 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
25b10 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ase */.  BtCurso
25b20 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65  r *pCrsr;.  Vdbe
25b30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
25b40 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65  4 rowid;..  asse
25b50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25b60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25b70 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25b80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25b90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25ba0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
25bb0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f  C->pCursor;.  pO
25bc0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
25bd0 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41  Null;.  if( ALWA
25be0 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a  YS(pCrsr!=0) ){.
25bf0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25c00 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
25c10 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45  (pC);.    if( NE
25c20 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61  VER(rc) ) goto a
25c30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25c40 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
25c50 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25c60 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
25c70 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
25c80 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
25c90 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
25ca0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25cb0 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
25cc0 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b   pCrsr, &rowid);
25cd0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
25ce0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
25cf0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
25d00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
25d10 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d     }.      pOut-
25d20 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20  >u.i = rowid;.  
25d30 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
25d40 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
25d50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25d60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
25d70 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
25d80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
25d90 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
25da0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
25db0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
25dc0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
25dd0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f  hat omits the RO
25de0 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
25df0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
25e00 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
25e10 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
25e20 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
25e30 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
25e40 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  e ROWID on the P
25e50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
25e60 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
25e70 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
25e80 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
25e90 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
25ea0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
25eb0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
25ec0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
25ed0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
25ee0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  on..**.** If P5 
25ef0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e  is non-zero then
25f00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69   the key value i
25f10 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61  s increased by a
25f20 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72  n epsilon .** pr
25f30 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61  ior to the compa
25f40 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b  rison.  This mak
25f50 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  e the opcode wor
25f60 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63  k like IdxGT exc
25f70 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74  ept.** that if t
25f80 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69  he key from regi
25f90 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72 65  ster P3 is a pre
25fa0 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69  fix of the key i
25fb0 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  n the cursor,.**
25fc0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
25fd0 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74 20  alse whereas it 
25fe0 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77 69  would be true wi
25ff0 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20  th IdxGT..*/./* 
26000 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
26010 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
26020 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
26030 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
26040 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
26050 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
26060 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
26070 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
26080 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
26090 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
260a0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
260b0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
260c0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
260d0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
260e0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
260f0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
26100 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
26110 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
26120 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
26130 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
26140 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
26150 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
26160 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
26170 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
26180 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
26190 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
261a0 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
261b0 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
261c0 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
261d0 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
261e0 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
261f0 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
26200 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
26210 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
26220 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
26230 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26240 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
26250 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
26260 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
26270 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
26280 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26290 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
262a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
262b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
262c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
262d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
262e0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66  sOrdered );.  if
262f0 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
26300 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
26310 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
26320 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
26330 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
26340 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
26350 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  p5==1 );.    ass
26360 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
26370 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
26380 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
26390 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
263a0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
263b0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
263c0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
263d0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
263e0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
263f0 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  | UNPACKED_PREFI
26400 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 65 6c  X_MATCH;.    }el
26410 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67  se{.      r.flag
26420 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
26430 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d  FIX_MATCH;.    }
26440 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
26450 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
26460 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26470 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
26480 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
26490 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
264a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
264b0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
264c0 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
264d0 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
264e0 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72  mpare(pC, &r, &r
264f0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  es);.    if( pOp
26500 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
26510 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  LT ){.      res 
26520 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73  = -res;.    }els
26530 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
26540 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26550 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20  _IdxGE );.      
26560 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  res++;.    }.   
26570 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
26580 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
26590 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d   - 1 ;.    }.  }
265a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
265b0 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
265c0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
265d0 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
265e0 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
265f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
26600 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
26610 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
26620 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
26630 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
26640 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
26650 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
26660 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
26670 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
26680 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
26690 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
266a0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
266b0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
266c0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
266d0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
266e0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
266f0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
26700 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
26710 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
26720 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
26730 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
26740 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
26750 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
26760 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
26770 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
26780 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
26790 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
267a0 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
267b0 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
267c0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
267d0 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
267e0 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
267f0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
26800 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
26810 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
26820 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
26830 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
26840 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
26850 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
26860 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
26870 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
26880 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
26890 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
268a0 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
268b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
268c0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
268d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
268e0 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
268f0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
26900 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
26910 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
26920 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
26930 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
26940 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
26950 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
26960 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
26970 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
26980 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65  int iCnt;.  Vdbe
26990 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69   *pVdbe;.  int i
269a0 44 62 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  Db;..#ifndef SQL
269b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
269c0 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
269d0 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
269e0 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
269f0 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
26a00 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
26a10 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
26a20 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
26a30 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
26a40 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
26a50 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
26a60 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
26a70 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
26a80 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
26a90 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d  ;.#endif.  pOut-
26aa0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
26ab0 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  l;.  if( iCnt>1 
26ac0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
26ad0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
26ae0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
26af0 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
26b00 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
26b10 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
26b20 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
26b30 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
26b40 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
26b50 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
26b60 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
26b70 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
26b80 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
26b90 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
26ba0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
26bb0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
26bc0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
26bd0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
26be0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
26bf0 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
26c00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26c10 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
26c20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
26c30 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
26c40 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
26c50 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
26c60 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
26c70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
26c80 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
26c90 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
26ca0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
26cb0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
26cc0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
26cd0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
26ce0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26cf0 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
26d00 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
26d10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26d20 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
26d30 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
26d40 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
26d50 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26d60 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
26d70 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
26d80 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26d90 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
26da0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
26db0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
26dc0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
26dd0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
26de0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
26df0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
26e00 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
26e10 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
26e20 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26e30 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
26e40 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
26e50 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
26e60 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
26e70 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
26e80 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
26e90 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
26ea0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
26eb0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
26ec0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
26ed0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
26ee0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
26ef0 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
26f00 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
26f10 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
26f20 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
26f30 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
26f40 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
26f50 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
26f60 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
26f70 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26f80 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26f90 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26fa0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
26fb0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
26fc0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
26fd0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
26fe0 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
26ff0 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
27000 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
27010 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
27020 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
27030 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
27040 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
27050 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
27060 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
27070 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
27080 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
27090 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
270a0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29  sk)1)<<pOp->p2))
270b0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
270c0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
270d0 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e  able(.      db->
270e0 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
270f0 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d  , pOp->p1, (pOp-
27100 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a  >p3 ? &nChange :
27110 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70   0).  );.  if( p
27120 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d  Op->p3 ){.    p-
27130 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61  >nChange += nCha
27140 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  nge;.    if( pOp
27150 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20  ->p3>0 ){.      
27160 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
27170 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  id(&aMem[pOp->p3
27180 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  ]) );.      memA
27190 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
271a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
271b0 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d  .      aMem[pOp-
271c0 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
271d0 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
271e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
271f0 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
27200 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
27210 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
27220 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
27230 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
27240 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
27250 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
27260 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
27270 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
27280 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
27290 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
272a0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
272b0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
272c0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
272d0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
272e0 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
272f0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
27300 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
27310 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
27320 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
27330 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
27340 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
27350 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
27360 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
27370 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
27380 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
27390 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
273a0 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
273b0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
273c0 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
273d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
273e0 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
273f0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
27400 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
27410 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
27420 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
27430 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
27440 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
27450 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
27460 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
27470 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
27480 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
27490 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
274a0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
274b0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
274c0 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
274d0 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
274e0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
274f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
27500 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
27510 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
27520 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
27530 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
27540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
27550 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
27560 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
27570 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
27580 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
27590 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
275a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
275b0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
275c0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
275d0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
275e0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
275f0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
27600 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
27610 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
27620 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
27630 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
27640 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
27650 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
27660 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
27670 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
27680 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
27690 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
276a0 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
276b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
276c0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
276d0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
276e0 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
276f0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
27700 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27710 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
27720 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27730 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
27740 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
27750 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
27760 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
27770 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
27780 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
27790 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
277a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
277b0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
277c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
277d0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
277e0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
277f0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
27800 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
27810 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
27820 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
27830 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
27840 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
27850 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
27860 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
27870 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
27880 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
27890 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
278a0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
278b0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
278c0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
278d0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
278e0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
278f0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
27900 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
27910 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
27920 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
27930 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27940 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
27950 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
27960 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
27970 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
27980 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
27990 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
279a0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
279b0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
279c0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
279d0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
279e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
279f0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
27a00 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
27a10 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
27a20 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
27a30 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
27a40 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
27a50 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
27a60 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
27a70 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
27a80 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27a90 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
27aa0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
27ab0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
27ac0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
27ad0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
27ae0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
27af0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
27b00 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
27b10 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
27b20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
27b30 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
27b40 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
27b50 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
27b60 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
27b70 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
27b80 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
27b90 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
27ba0 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
27bb0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
27bc0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
27bd0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
27be0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
27bf0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
27c00 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
27c10 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
27c20 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
27c30 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
27c40 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27c50 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
27c60 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
27c70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
27c80 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
27c90 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27ca0 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
27cb0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73    }.  if( rc ) s
27cc0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
27cd0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
27ce0 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  n(db);.  if( rc=
27cf0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
27d00 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
27d10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
27d20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
27d30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
27d40 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
27d50 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
27d60 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
27d70 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
27d80 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
27d90 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
27da0 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
27db0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
27dc0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
27dd0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
27de0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
27df0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
27e00 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
27e10 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
27e20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
27e30 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
27e40 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
27e50 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
27e60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27e70 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27e80 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
27e90 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
27ea0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
27eb0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
27ec0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27ed0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
27ee0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
27ef0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
27f00 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
27f10 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
27f20 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27f30 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27f40 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
27f50 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
27f60 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27f70 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
27f80 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
27f90 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27fa0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27fb0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27fc0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27fd0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27fe0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27ff0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
28000 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
28010 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28020 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
28030 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
28040 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
28050 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
28060 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
28070 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
28080 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
28090 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
280a0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
280b0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
280c0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
280d0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
280e0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
280f0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
28100 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
28110 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
28120 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
28130 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
28140 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
28150 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
28160 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
28170 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
28180 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
28190 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
281a0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
281b0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
281c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
281d0 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
281e0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
281f0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
28200 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
28210 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
28220 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
28230 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
28240 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
28250 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
28260 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
28270 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
28280 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
28290 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
282a0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
282b0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
282c0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
282d0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
282e0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
282f0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
28300 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28310 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
28320 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
28330 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
28340 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28350 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
28360 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
28370 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
28380 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
28390 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
283a0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
283b0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
283c0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
283d0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
283e0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
283f0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
28400 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
28410 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
28420 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
28430 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
28440 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
28450 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
28460 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
28470 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
28480 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
28490 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
284a0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
284b0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
284c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
284d0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
284e0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
284f0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
28500 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
28510 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
28520 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
28530 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
28540 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
28550 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
28560 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
28570 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
28580 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
28590 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
285a0 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
285b0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
285c0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
285d0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
285e0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
285f0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
28600 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
28610 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
28620 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
28630 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
28640 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28650 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
28660 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
28670 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
28680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
28690 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
286a0 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
286b0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
286c0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
286d0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
286e0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
286f0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
28700 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
28710 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
28720 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
28730 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
28740 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
28750 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
28760 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
28770 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
28780 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
28790 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
287a0 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
287b0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
287c0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
287d0 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
287e0 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
287f0 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a  remaining */.  .
28800 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
28810 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
28820 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
28830 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
28840 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
28850 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
28860 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
28870 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
28880 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28890 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
288a0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45  p->nMem );.  pnE
288b0 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
288c0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
288d0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
288e0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
288f0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
28900 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
28910 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
28920 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
28930 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
28940 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
28950 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
28960 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
28970 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
28980 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
28990 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
289a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
289b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
289c0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
289d0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
289e0 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29  <<pOp->p5))!=0 )
289f0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
28a00 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
28a10 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
28a20 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
28a30 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a50 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
28a60 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
28a70 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
28a80 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
28a90 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
28aa0 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
28ab0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
28ac0 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
28ad0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
28ae0 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
28af0 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
28b00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
28b10 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
28b20 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
28b30 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
28b40 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
28b50 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
28b60 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
28b70 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
28b80 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
28b90 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
28ba0 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
28bb0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
28bc0 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
28bd0 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
28be0 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
28bf0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28c00 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
28c10 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
28c20 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
28c30 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
28c40 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
28c50 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
28c60 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
28c70 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
28c80 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
28c90 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
28ca0 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
28cb0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
28cc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28cd0 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
28ce0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
28cf0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
28d00 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
28d10 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
28d20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28d30 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
28d40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
28d50 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
28d60 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
28d70 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
28d80 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
28d90 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
28da0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
28db0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
28dc0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
28dd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28de0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
28df0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 P3 * *.**.** E
28e00 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
28e10 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
28e20 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
28e30 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
28e40 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
28e50 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
28e60 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
28e70 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
28e80 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
28e90 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
28ea0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
28eb0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
28ec0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
28ed0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
28ee0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
28ef0 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46  4 val;.  CHECK_F
28f00 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
28f10 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
28f20 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
28f30 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
28f40 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
28f50 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
28f60 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
28f70 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
28f80 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
28f90 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
28fa0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
28fb0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
28fc0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20  l(pIn1);.    pc 
28fd0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
28fe0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
28ff0 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
29000 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
29010 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
29020 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
29030 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
29040 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
29050 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29060 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
29070 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67   P3 P4.**.** Reg
29080 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
29090 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
290a0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
290b0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
290c0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
290d0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
290e0 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
290f0 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
29100 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
29110 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
29120 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
29130 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
29140 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
29150 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
29160 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
29170 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
29180 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
29190 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
291a0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
291b0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
291c0 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
291d0 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
291e0 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
291f0 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
29200 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
29210 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
29220 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
29230 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
29240 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
29250 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
29260 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
29270 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
29280 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
29290 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
292a0 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
292b0 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
292c0 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
292d0 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
292e0 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
292f0 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
29300 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
29310 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
29320 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
29330 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
29340 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
29350 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
29360 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
29370 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
29380 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
29390 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
293a0 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
293b0 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
293c0 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
293d0 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
293e0 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
293f0 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
29400 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
29410 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
29420 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
29430 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
29440 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
29450 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
29460 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
29470 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
29480 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
29490 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
294a0 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
294b0 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
294c0 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
294f0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
29500 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
29510 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
29520 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
29530 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
29540 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  3];.  iSet = pOp
29550 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
29560 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
29570 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
29580 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
29590 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
295a0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
295b0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
295c0 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
295d0 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
295e0 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
295f0 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
29600 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
29610 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
29620 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
29630 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
29640 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
29650 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29660 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29670 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
29680 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
29690 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
296a0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
296b0 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
296c0 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
296d0 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
296e0 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
296f0 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
29700 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29720 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
29730 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
29740 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
29750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29760 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
29770 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  .i);.    if( exi
29780 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
29790 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
297a0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
297b0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
297c0 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
297d0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
297e0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
297f0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
29800 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
29810 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29820 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
29830 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
29840 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
29850 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
29860 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
29870 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
29880 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
29890 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
298a0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
298b0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
298c0 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
298d0 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
298e0 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
298f0 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
29900 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
29910 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
29920 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
29930 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
29940 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
29950 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
29960 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
29970 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
29980 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
29990 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
299a0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
299b0 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
299c0 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
299d0 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
299e0 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
299f0 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
29a00 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
29a10 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
29a20 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
29a30 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
29a40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
29a50 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
29a60 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
29a70 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gram..*/.case OP
29a80 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
29a90 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
29aa0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
29ab0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
29ac0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
29ad0 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
29ae0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
29af0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
29b00 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
29b10 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
29b20 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
29b30 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
29b40 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
29b50 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
29b60 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
29b70 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
29b80 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
29b90 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
29ba0 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
29bb0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
29bc0 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
29bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
29be0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
29bf0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
29c00 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
29c10 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
29c20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
29c30 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
29c40 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
29c50 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
29c60 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
29c70 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29c90 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
29ca0 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
29cb0 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
29cc0 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
29cd0 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
29ce0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
29cf0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
29d00 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
29d10 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
29d20 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
29d30 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
29d40 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
29d50 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
29d60 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
29d70 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
29d80 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
29d90 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
29da0 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
29db0 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
29dc0 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
29dd0 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
29de0 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
29df0 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
29e00 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
29e10 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
29e20 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
29e30 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
29e40 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
29e50 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
29e60 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
29e70 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
29e80 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
29e90 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
29ea0 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
29eb0 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
29ec0 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
29ed0 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
29ee0 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
29ef0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
29f00 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
29f10 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
29f20 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
29f30 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
29f40 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
29f50 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
29f60 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
29f70 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
29f80 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
29f90 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
29fa0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
29fb0 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
29fc0 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
29fd0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
29fe0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
29ff0 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
2a000 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
2a010 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
2a020 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
2a030 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
2a040 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
2a050 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
2a060 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
2a070 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
2a080 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2a090 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a0a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a0b0 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  db, "too many le
2a0c0 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
2a0d0 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
2a0e0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
2a0f0 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
2a100 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2a110 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
2a120 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
2a130 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
2a140 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
2a150 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
2a160 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
2a170 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
2a180 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
2a190 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
2a1a0 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
2a1b0 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
2a1c0 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
2a1d0 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
2a1e0 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
2a1f0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
2a200 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
2a210 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
2a220 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b  MEM_Frame)==0 ){
2a230 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72  .    /* SubProgr
2a240 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74  am.nMem is set t
2a250 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2a260 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
2a270 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a  d by the .    **
2a280 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20   program stored 
2a290 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f  in SubProgram.aO
2a2a0 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68  p. As well as th
2a2b0 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a  ese, one memory.
2a2c0 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72      ** cell is r
2a2d0 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68  equired for each
2a2e0 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20   cursor used by 
2a2f0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74  the program. Set
2a300 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61   local.    ** va
2a310 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64  riable nMem (and
2a320 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d   later, VdbeFram
2a330 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20  e.nChildMem) to 
2a340 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20  this value..    
2a350 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50  */.    nMem = pP
2a360 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70  rogram->nMem + p
2a370 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2a380 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
2a390 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
2a3a0 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
2a3b0 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
2a3c0 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
2a3d0 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2a3e0 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
2a3f0 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20  VdbeCursor *).  
2a400 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2a410 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20  rogram->nOnce * 
2a420 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20  sizeof(u8);.    
2a430 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
2a440 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
2a450 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
2a460 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
2a470 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2a480 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2a490 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
2a4a0 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
2a4b0 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
2a4c0 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
2a4d0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
2a4e0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
2a4f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
2a500 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
2a510 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
2a520 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
2a530 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
2a540 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
2a550 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
2a560 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
2a570 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
2a580 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2a590 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
2a5a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2a5b0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
2a5c0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
2a5d0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
2a5e0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
2a5f0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
2a600 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
2a610 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
2a620 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c   pFrame->aOnceFl
2a630 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  ag = p->aOnceFla
2a640 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  g;.    pFrame->n
2a650 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f  OnceFlag = p->nO
2a660 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45  nceFlag;..    pE
2a670 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
2a680 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
2a690 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
2a6a0 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
2a6b0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2a6c0 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
2a6d0 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
2a6e0 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  m->flags = MEM_I
2a6f0 6e 76 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d  nvalid;.      pM
2a700 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
2a710 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2a720 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
2a730 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
2a740 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
2a750 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
2a760 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2a770 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
2a780 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
2a790 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2a7a0 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
2a7b0 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
2a7c0 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2a7d0 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2a7e0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2a7f0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2a800 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2a810 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2a820 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2a830 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e  ->nChange;.  p->
2a840 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
2a850 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
2a860 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
2a870 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65  Mem = &VdbeFrame
2a880 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b  Mem(pFrame)[-1];
2a890 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
2a8a0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
2a8b0 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
2a8c0 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
2a8d0 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
2a8e0 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
2a8f0 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
2a900 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20  +1];.  p->aOp = 
2a910 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
2a920 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
2a930 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20  pProgram->nOp;. 
2a940 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20   p->aOnceFlag = 
2a950 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b  (u8 *)&p->apCsr[
2a960 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70  p->nCursor];.  p
2a970 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50  ->nOnceFlag = pP
2a980 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20  rogram->nOnce;. 
2a990 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73   pc = -1;.  mems
2a9a0 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c  et(p->aOnceFlag,
2a9b0 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67   0, p->nOnceFlag
2a9c0 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  );..  break;.}..
2a9d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
2a9e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2a9f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2aa00 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
2aa10 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
2aa20 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
2aa30 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
2aa40 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
2aa50 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
2aa60 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
2aa70 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
2aa80 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
2aa90 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
2aaa0 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
2aab0 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
2aac0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
2aad0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
2aae0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
2aaf0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
2ab00 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
2ab10 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
2ab20 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
2ab30 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
2ab40 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
2ab50 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2ab60 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
2ab70 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2ab80 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2ab90 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2aba0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
2abb0 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
2abc0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2abd0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
2abe0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
2abf0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2ac00 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ase */.  VdbeFra
2ac10 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
2ac20 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65  m *pIn;.  pFrame
2ac30 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2ac40 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
2ac50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
2ac60 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
2ac70 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
2ac80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
2ac90 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
2aca0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
2acb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
2acc0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2acd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2ace0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
2acf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2ad00 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
2ad10 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
2ad20 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
2ad30 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
2ad40 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
2ad50 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
2ad60 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
2ad70 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
2ad80 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2ad90 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2ada0 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
2adb0 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
2adc0 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
2add0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2ade0 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
2adf0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
2ae00 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
2ae10 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2ae20 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
2ae30 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2ae40 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
2ae50 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
2ae60 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
2ae70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
2ae80 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
2ae90 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
2aea0 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
2aeb0 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
2aec0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2aed0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
2aee0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2aef0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2af00 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
2af10 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2af20 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2af30 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
2af40 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
2af50 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2af60 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2af70 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2af80 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
2af90 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
2afa0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2afb0 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
2afc0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
2afd0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2afe0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
2aff0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
2b000 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
2b010 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
2b020 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
2b030 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
2b040 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2b050 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
2b060 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2b070 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
2b080 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2b090 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
2b0a0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
2b0b0 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
2b0c0 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
2b0d0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
2b0e0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20  ->p1 ){.    if( 
2b0f0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2b100 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
2b110 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
2b120 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
2b130 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63  nstraint==0 ) pc
2b140 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2b150 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b160 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2b170 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2b180 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2b190 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2b1a0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2b1b0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2b1c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2b1d0 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2b1e0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2b1f0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2b200 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2b210 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2b220 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2b230 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2b240 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2b250 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2b260 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2b270 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2b280 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2b290 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2b2a0 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2b2b0 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2b2c0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2b2d0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2b2e0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2b2f0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2b300 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2b310 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2b320 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2b330 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2b340 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2b350 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a  * in2 */.  Mem *
2b360 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d  pIn1;.  VdbeFram
2b370 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
2b380 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
2b390 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2b3a0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
2b3b0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
2b3c0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2b3d0 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
2b3e0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2b3f0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
2b400 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b410 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
2b420 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2b430 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
2b440 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2b450 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
2b460 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2b470 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
2b480 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2b490 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
2b4a0 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
2b4b0 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
2b4c0 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
2b4d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2b4e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2b4f0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2b500 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
2b510 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a   IfPos P1 P2 * *
2b520 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
2b530 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2b540 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
2b550 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ater, jump to P2
2b560 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  ..**.** It is il
2b570 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
2b580 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2b590 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
2b5a0 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
2b5b0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2b5c0 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
2b5d0 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
2b5e0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
2b5f0 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
2b600 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b610 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2b620 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b630 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2b640 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b650 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2b660 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
2b670 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2b680 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2b690 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
2b6a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2b6b0 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
2b6c0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2b6d0 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
2b6e0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
2b6f0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
2b700 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
2b710 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
2b720 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
2b730 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
2b740 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
2b750 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
2b760 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
2b770 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
2b780 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
2b790 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2b7a0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2b7b0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2b7c0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2b7d0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
2b7e0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
2b7f0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2b800 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2b810 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b820 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
2b830 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
2b840 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2b850 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2b860 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2b870 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2b880 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2b890 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2b8a0 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2b8b0 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2b8c0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b8d0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b8e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b8f0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b900 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b910 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b920 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b930 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b940 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b950 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
2b960 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b970 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2b980 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b990 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2b9a0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b9b0 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2b9c0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
2b9d0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
2b9e0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2b9f0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2ba00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ba10 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2ba20 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2ba30 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
2ba40 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2ba50 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
2ba60 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
2ba70 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
2ba80 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2ba90 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
2baa0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
2bab0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
2bac0 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
2bad0 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
2bae0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
2baf0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
2bb00 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
2bb10 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
2bb20 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
2bb30 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
2bb40 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
2bb50 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
2bb60 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2bb70 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
2bb80 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
2bb90 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
2bba0 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
2bbb0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
2bbc0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
2bbd0 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
2bbe0 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
2bbf0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
2bc00 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
2bc10 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
2bc20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
2bc30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
2bc40 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
2bc50 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
2bc60 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
2bc70 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2bc80 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74  pRec);.    sqlit
2bc90 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2bca0 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  pe(pRec);.  }.  
2bcb0 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
2bcc0 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
2bcd0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2bce0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
2bcf0 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
2bd00 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2bd10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2bd20 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
2bd30 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2bd40 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
2bd50 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
2bd60 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
2bd70 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
2bd80 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
2bd90 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
2bda0 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74  .pColl = 0;.  ct
2bdb0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2bdc0 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
2bdd0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2bde0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b  FUNC_NEEDCOLL ){
2bdf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2be00 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  >p->aOp );.    a
2be10 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
2be20 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
2be30 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
2be40 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2be50 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2be60 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
2be70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
2be80 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e  .  }.  (ctx.pFun
2be90 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20  c->xStep)(&ctx, 
2bea0 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
2beb0 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
2bec0 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
2bed0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
2bee0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2bef0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2bf00 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2bf10 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
2bf20 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
2bf30 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66  sError;.  }.  if
2bf40 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29  ( ctx.skipFlag )
2bf50 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2bf60 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2bf70 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2bf80 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
2bf90 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
2bfa0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2bfb0 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
2bfc0 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56  .  }..  sqlite3V
2bfd0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
2bfe0 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  tx.s);..  break;
2bff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2c000 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
2c010 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
2c020 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
2c030 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2c040 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
2c050 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
2c060 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
2c070 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2c080 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
2c090 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
2c0a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
2c0b0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
2c0c0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2c0d0 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
2c0e0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2c0f0 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
2c100 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
2c110 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
2c120 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
2c130 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
2c140 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
2c150 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
2c160 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
2c170 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
2c180 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
2c190 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
2c1a0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
2c1b0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
2c1c0 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
2c1d0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
2c1e0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2c1f0 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
2c200 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
2c210 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
2c220 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
2c230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2c240 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
2c250 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d  ->nMem );.  pMem
2c260 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2c270 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
2c280 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
2c290 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
2c2a0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
2c2b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
2c2c0 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
2c2d0 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
2c2e0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
2c2f0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2c300 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2c310 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2c320 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
2c330 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
2c340 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
2c350 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
2c360 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2c370 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
2c380 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2c390 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
2c3a0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
2c3b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2c3c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c3d0 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63  _OMIT_WAL./* Opc
2c3e0 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20  ode: Checkpoint 
2c3f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2c400 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61  ** Checkpoint da
2c410 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20  tabase P1. This 
2c420 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31  is a no-op if P1
2c430 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
2c440 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65  y in.** WAL mode
2c450 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69  . Parameter P2 i
2c460 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  s one of SQLITE_
2c470 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2c480 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52  VE, FULL.** or R
2c490 45 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31  ESTART.  Write 1
2c4a0 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50   or 0 into mem[P
2c4b0 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70  3] if the checkp
2c4c0 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20  oint returns.** 
2c4d0 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e  SQLITE_BUSY or n
2c4e0 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ot, respectively
2c4f0 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d  .  Write the num
2c500 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
2c510 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72  the.** WAL after
2c520 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20   the checkpoint 
2c530 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  into mem[P3+1] a
2c540 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  nd the number of
2c550 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65   pages.** in the
2c560 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62   WAL that have b
2c570 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64  een checkpointed
2c580 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2c590 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74  point.** complet
2c5a0 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32  es into mem[P3+2
2c5b0 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61  ].  However on a
2c5c0 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b  n error, mem[P3+
2c5d0 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33  1] and.** mem[P3
2c5e0 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69  +2] are initiali
2c5f0 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61  zed to -1..*/.ca
2c600 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74  se OP_Checkpoint
2c610 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20  : {.  int i;    
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2c640 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61  unter */.  int a
2c650 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  Res[3];         
2c660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2c670 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  sults */.  Mem *
2c680 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
2c690 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72             /* Wr
2c6a0 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65  ite results here
2c6b0 20 2a 2f 0a 0a 20 20 61 52 65 73 5b 30 5d 20 3d   */..  aRes[0] =
2c6c0 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2c6d0 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2c6e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2c6f0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2c700 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2c710 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2c720 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c730 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2c740 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2c750 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2c760 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  T.  );.  rc = sq
2c770 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2c780 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2c790 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2c7a0 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2c7b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2c7c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2c7d0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2c7e0 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2c7f0 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2c800 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2c810 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2c820 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2c830 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2c840 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2c850 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2c860 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2c870 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c880 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2c890 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2c8a0 65 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  e P1 P2 P3 * P5.
2c8b0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2c8c0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2c8d0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2c8e0 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
2c8f0 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
2c900 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
2c910 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
2c920 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
2c930 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
2c940 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
2c950 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
2c960 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
2c970 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
2c980 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
2c990 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
2c9a0 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
2c9b0 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
2c9c0 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
2c9d0 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
2c9e0 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
2c9f0 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
2ca00 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
2ca10 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
2ca20 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
2ca30 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
2ca40 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
2ca50 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
2ca60 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2ca70 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f       /* Btree to
2caa0 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20   change journal 
2cab0 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67  mode of */.  Pag
2cac0 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2cae0 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  Pager associated
2caf0 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69   with pBt */.  i
2cb00 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20  nt eNew;        
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cb20 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f  * New journal mo
2cb30 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64  de */.  int eOld
2cb40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2cb50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
2cb60 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ld journal mode 
2cb70 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2cb80 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e  E_OMIT_WAL.  con
2cb90 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2cba0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2cbb0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2cbc0 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2cbd0 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e   */.#endif..  eN
2cbe0 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
2cbf0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
2cc00 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cc10 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
2cc20 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2cc30 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2cc40 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2cc50 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cc60 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
2cc70 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2cc80 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2cc90 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
2cca0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ccb0 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
2ccc0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2ccd0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cce0 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
2ccf0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cd00 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
2cd10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cd20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2cd30 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70  <db->nDb );..  p
2cd40 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2cd50 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
2cd60 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
2cd70 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
2cd80 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2cd90 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
2cda0 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
2cdb0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2cdc0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
2cdd0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2cde0 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
2cdf0 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
2ce00 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
2ce10 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
2ce20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ce30 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
2ce40 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2ce50 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2ce60 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
2ce70 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
2ce80 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
2ce90 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
2cea0 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
2ceb0 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
2cec0 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
2ced0 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
2cee0 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
2cef0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
2cf00 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2cf10 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
2cf20 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2cf30 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
2cf40 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
2cf50 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
2cf60 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
2cf70 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
2cf80 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
2cf90 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
2cfa0 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
2cfb0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
2cfc0 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
2cfd0 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
2cfe0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cff0 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
2d000 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d010 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
2d020 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
2d030 69 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  it || db->active
2d040 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
2d050 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2d060 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
2d070 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2d080 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
2d090 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
2d0a0 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
2d0b0 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
2d0c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
2d0d0 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
2d0e0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d0f0 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
2d100 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
2d110 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b    );.      break
2d120 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20  ;.    }else{. . 
2d130 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50       if( eOld==P
2d140 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d150 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  _WAL ){.        
2d160 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41  /* If leaving WA
2d170 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68  L mode, close th
2d180 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73  e log file. If s
2d190 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63  uccessful, the c
2d1a0 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  all.        ** t
2d1b0 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  o PagerCloseWal(
2d1c0 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e  ) checkpoints an
2d1d0 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72  d deletes the wr
2d1e0 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20  ite-ahead-log . 
2d1f0 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20         ** file. 
2d200 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  An EXCLUSIVE loc
2d210 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68  k may still be h
2d220 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  eld on the datab
2d230 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20  ase file .      
2d240 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63    ** after a suc
2d250 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20  cessful return. 
2d260 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
2d270 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d280 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50  PagerCloseWal(pP
2d290 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69  ager);.        i
2d2a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2d2b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
2d2c0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2d2d0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2d2e0 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20   eNew);.        
2d2f0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
2d300 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2d310 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2d320 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43   ){.        /* C
2d330 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e  annot transition
2d340 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d   directly from M
2d350 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55  EMORY to WAL.  U
2d360 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20  se mode OFF.    
2d370 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74      ** as an int
2d380 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20  ermediate */.   
2d390 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2d3a0 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2d3b0 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f  pPager, PAGER_JO
2d3c0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a  URNALMODE_OFF);.
2d3d0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
2d3e0 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73   /* Open a trans
2d3f0 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61  action on the da
2d400 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67  tabase file. Reg
2d410 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a  ardless of the j
2d420 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ournal.      ** 
2d430 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73  mode, this trans
2d440 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73  action always us
2d450 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
2d460 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  urnal..      */.
2d470 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
2d480 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
2d490 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20  ans(pBt)==0 );. 
2d4a0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2d4b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2d4c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d4d0 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42  reeSetVersion(pB
2d4e0 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f  t, (eNew==PAGER_
2d4f0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2d500 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20  ? 2 : 1));.     
2d510 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e   }.    }.  }.#en
2d520 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51  dif /* ifndef SQ
2d530 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f  LITE_OMIT_WAL */
2d540 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ..  if( rc ){.  
2d550 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2d560 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69   }.  eNew = sqli
2d570 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2d580 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
2d590 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  New);..  pOut = 
2d5a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2d5b0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2d5c0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
2d5d0 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
2d5e0 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Out->z = (char *
2d5f0 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  )sqlite3JournalM
2d600 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20  odename(eNew);. 
2d610 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74   pOut->n = sqlit
2d620 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d  e3Strlen30(pOut-
2d630 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >z);.  pOut->enc
2d640 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
2d650 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2d660 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
2d670 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
2d680 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
2d690 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
2d6a0 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
2d6b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2d6c0 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
2d6d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2d6e0 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
2d6f0 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a  code: Vacuum * *
2d700 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
2d710 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
2d720 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f  atabase.  This o
2d730 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65  pcode will cause
2d740 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a   other virtual.*
2d750 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65  * machines to be
2d760 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e   created and run
2d770 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65  .  It may not be
2d780 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
2d790 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63  hin.** a transac
2d7a0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2d7b0 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20  _Vacuum: {.  rc 
2d7c0 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
2d7d0 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
2d7e0 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  db);.  break;.}.
2d7f0 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
2d800 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2d810 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20  _AUTOVACUUM)./* 
2d820 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75  Opcode: IncrVacu
2d830 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  um P1 P2 * * *.*
2d840 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73  *.** Perform a s
2d850 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68  ingle step of th
2d860 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61  e incremental va
2d870 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f  cuum procedure o
2d880 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61  n.** the P1 data
2d890 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63  base. If the vac
2d8a0 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64  uum has finished
2d8b0 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2d8c0 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68  ction.** P2. Oth
2d8d0 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
2d8e0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2d8f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2d900 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63  .case OP_IncrVac
2d910 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  uum: {        /*
2d920 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65   jump */.  Btree
2d930 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
2d940 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d950 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2d960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
2d970 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
2d980 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
2d990 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
2d9a0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2d9b0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
2d9c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
2d9d0 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
2d9e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
2d9f0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
2da00 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2da10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2da20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2da30 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
2da40 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
2da50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
2da60 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
2da70 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
2da80 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
2da90 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
2daa0 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
2dab0 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
2dac0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
2dad0 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
2dae0 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
2daf0 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
2db00 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
2db10 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
2db20 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
2db30 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
2db40 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
2db50 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
2db60 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
2db70 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
2db80 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
2db90 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
2dba0 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
2dbb0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
2dbc0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2dbd0 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
2dbe0 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
2dbf0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
2dc00 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2dc10 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2dc20 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
2dc30 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
2dc40 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2dc50 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
2dc60 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
2dc70 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
2dc80 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
2dc90 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
2dca0 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
2dcb0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
2dcc0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
2dcd0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
2dce0 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
2dcf0 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
2dd00 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
2dd10 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
2dd20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
2dd30 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
2dd40 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
2dd50 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
2dd60 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
2dd70 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
2dd80 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
2dd90 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
2dda0 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
2ddb0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2ddc0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2ddd0 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
2dde0 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
2ddf0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
2de00 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
2de10 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
2de20 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
2de30 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
2de40 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
2de50 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
2de60 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
2de70 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
2de80 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
2de90 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
2dea0 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74  tted) ){.    int
2deb0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
2dec0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d      assert( p1>=
2ded0 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20  0 && p1<db->nDb 
2dee0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
2def0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
2df00 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31  ((yDbMask)1)<<p1
2df10 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  ))!=0 );.    ass
2df20 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
2df30 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
2df40 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
2df50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
2df60 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
2df70 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
2df80 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
2df90 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
2dfa0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
2dfb0 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
2dfc0 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
2dfd0 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
2dfe0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2dff0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
2e000 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
2e010 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
2e020 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2e030 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e040 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2e050 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
2e060 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e070 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2e080 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
2e090 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2e0a0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
2e0b0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
2e0c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2e0d0 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
2e0e0 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
2e0f0 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
2e100 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
2e110 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2e120 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
2e130 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
2e140 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
2e150 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
2e160 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
2e170 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
2e180 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
2e190 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
2e1a0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
2e1b0 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
2e1c0 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
2e1d0 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
2e1e0 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
2e1f0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
2e200 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
2e210 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
2e220 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
2e230 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74 61  VTab ) importVta
2e240 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61 62  bErrMsg(p, pVTab
2e250 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61  ->pVtab);.  brea
2e260 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e270 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e280 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e290 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e2a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e2b0 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
2e2c0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2e2d0 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2e2e0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2e2f0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2e300 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
2e310 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66  eate method.** f
2e320 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
2e330 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
2e340 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  e: {.  rc = sqli
2e350 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2e360 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2e370 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45  Op->p4.z, &p->zE
2e380 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b  rrMsg);.  break;
2e390 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e3a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e3b0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e3c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e3d0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e3e0 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
2e3f0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e400 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2e410 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2e420 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2e430 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
2e440 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
2e450 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
2e460 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
2e470 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61  oy: {.  p->inVta
2e480 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72  bMethod = 2;.  r
2e490 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
2e4a0 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
2e4b0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2e4c0 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  z);.  p->inVtabM
2e4d0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65  ethod = 0;.  bre
2e4e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e4f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e500 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e510 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e520 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2e530 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
2e540 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e550 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2e560 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
2e570 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
2e580 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2e590 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
2e5a0 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
2e5b0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
2e5c0 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
2e5d0 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
2e5e0 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
2e5f0 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
2e600 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
2e610 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
2e620 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c  sor *pCur;.  sql
2e630 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2e640 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2e650 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2e660 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Vtab;.  sqlite3_
2e670 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2e680 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ..  pCur = 0;.  
2e690 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b  pVtabCursor = 0;
2e6a0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2e6b0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2e6c0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2e6d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2e6e0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e6f0 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
2e700 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20   pModule);.  rc 
2e710 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
2e720 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
2e730 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56  rsor);.  importV
2e740 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2e750 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  ab);.  if( SQLIT
2e760 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK==rc ){.    
2e770 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
2e780 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2e790 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
2e7a0 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d      pVtabCursor-
2e7b0 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
2e7c0 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
2e7d0 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  se vdbe cursor o
2e7e0 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75  bject */.    pCu
2e7f0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
2e800 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  or(p, pOp->p1, 0
2e810 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66  , -1, 0);.    if
2e820 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20  ( pCur ){.      
2e830 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2e840 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b  r = pVtabCursor;
2e850 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f  .      pCur->pMo
2e860 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73  dule = pVtabCurs
2e870 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75  or->pVtab->pModu
2e880 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  le;.    }else{. 
2e890 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
2e8a0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
2e8b0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
2e8c0 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
2e8d0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2e8e0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e8f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e900 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e910 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2e920 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2e930 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
2e940 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
2e950 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
2e960 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
2e970 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
2e980 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
2e990 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
2e9a0 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
2e9b0 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
2e9c0 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
2e9d0 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
2e9e0 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
2e9f0 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
2ea00 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
2ea10 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
2ea20 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
2ea30 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
2ea40 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
2ea50 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
2ea60 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
2ea70 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2ea80 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
2ea90 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
2eaa0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
2eab0 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
2eac0 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
2ead0 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
2eae0 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
2eaf0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2eb00 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
2eb10 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
2eb20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
2eb30 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
2eb40 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
2eb50 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
2eb60 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
2eb70 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
2eb80 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
2eb90 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
2eba0 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
2ebb0 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
2ebc0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
2ebd0 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
2ebe0 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
2ebf0 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
2ec00 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
2ec10 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
2ec20 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
2ec30 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
2ec40 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
2ec50 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
2ec60 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
2ec70 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
2ec80 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
2ec90 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2eca0 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
2ecb0 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a  ;.  Mem *pArgc;.
2ecc0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
2ecd0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
2ece0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
2ecf0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62  ab *pVtab;.  Vdb
2ed00 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2ed10 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
2ed20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  i;.  Mem **apArg
2ed30 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61  ;..  pQuery = &a
2ed40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2ed50 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
2ed60 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
2ed70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2ed80 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2ed90 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a  alid(pQuery) );.
2eda0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2edb0 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
2edc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
2edd0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2ede0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2edf0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2ee00 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  sor;.  pVtab = p
2ee10 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2ee20 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2ee30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
2ee40 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
2ee50 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
2ee60 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
2ee70 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
2ee80 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
2ee90 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
2eea0 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
2eeb0 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74  );.  nArg = (int
2eec0 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69  )pArgc->u.i;.  i
2eed0 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75  Query = (int)pQu
2eee0 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
2eef0 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
2ef00 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b  er method */.  {
2ef10 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
2ef20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
2ef30 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
2ef40 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2ef50 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2ef60 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
2ef70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ef80 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41  MemStoreType(apA
2ef90 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20  rg[i]);.    }.. 
2efa0 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
2efb0 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
2efc0 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
2efd0 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
2efe0 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
2eff0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
2f000 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
2f010 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70  hod = 0;.    imp
2f020 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2f030 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
2f040 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2f050 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d  {.      res = pM
2f060 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61  odule->xEof(pVta
2f070 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
2f080 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
2f090 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
2f0a0 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
2f0b0 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  }.  pCur->nullRo
2f0c0 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b  w = 0;..  break;
2f0d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2f0e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f0f0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2f100 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2f110 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2f120 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
2f130 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2f140 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
2f150 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
2f160 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
2f170 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
2f180 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
2f190 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
2f1a0 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
2f1b0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
2f1c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
2f1d0 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
2f1e0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
2f1f0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2f200 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2f210 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
2f220 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
2f230 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
2f240 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
2f250 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2f260 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2f270 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2f280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f290 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2f2a0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
2f2b0 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
2f2c0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
2f2d0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
2f2e0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2f2f0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
2f300 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2f310 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
2f320 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2f330 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2f340 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2f350 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2f360 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2f370 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
2f380 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
2f390 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
2f3a0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
2f3b0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  );..  /* The out
2f3c0 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
2f3d0 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
2f3e0 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
2f3f0 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72  ve.  ** the curr
2f400 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  ent contents to 
2f410 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e  sContext.s so in
2f420 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
2f430 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61  unction .  ** ca
2f440 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64  n use the alread
2f450 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
2f460 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
2f470 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a  locating a .  **
2f480 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20   new one..  */. 
2f490 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2f4a0 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ove(&sContext.s,
2f4b0 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
2f4c0 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74  tTypeFlag(&sCont
2f4d0 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ext.s, MEM_Null)
2f4e0 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  ;..  rc = pModul
2f4f0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
2f500 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
2f510 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
2f520 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45  );.  importVtabE
2f530 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2f540 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
2f550 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
2f560 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
2f570 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
2f580 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
2f590 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
2f5a0 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
2f5b0 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74  er. We.  ** do t
2f5c0 68 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f  his regardless o
2f5d0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
2f5e0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   an error occurr
2f5f0 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79  ed to ensure any
2f600 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c  .  ** dynamic al
2f610 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e  location in sCon
2f620 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74  text.s (a Mem st
2f630 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73  ruct) is  releas
2f640 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ed..  */.  sqlit
2f650 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2f660 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  ding(&sContext.s
2f670 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73  , encoding);.  s
2f680 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
2f690 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65  e(pDest, &sConte
2f6a0 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45  xt.s);.  REGISTE
2f6b0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
2f6c0 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54   pDest);.  UPDAT
2f6d0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
2f6e0 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71  Dest);..  if( sq
2f6f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2f700 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
2f710 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2f720 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f730 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f740 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f750 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f760 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f770 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f780 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
2f790 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
2f7a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
2f7b0 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
2f7c0 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
2f7d0 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
2f7e0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2f7f0 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
2f800 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
2f810 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
2f820 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
2f830 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
2f840 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2f850 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2f860 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
2f870 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
2f880 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
2f890 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2f8a0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2f8b0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
2f8c0 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
2f8d0 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
2f8e0 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
2f8f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2f900 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2f910 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2f920 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
2f930 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
2f940 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
2f950 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2f960 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
2f970 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
2f980 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
2f990 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
2f9a0 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
2f9b0 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
2f9c0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
2f9d0 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
2f9e0 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
2f9f0 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
2fa00 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
2fa10 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
2fa20 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
2fa30 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
2fa40 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
2fa50 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
2fa60 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
2fa70 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
2fa80 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
2fa90 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
2faa0 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
2fab0 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
2fac0 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
2fad0 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
2fae0 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
2faf0 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
2fb00 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
2fb10 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2fb20 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
2fb30 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
2fb40 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
2fb50 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
2fb60 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72  hod = 0;.  impor
2fb70 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2fb80 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
2fb90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2fba0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
2fbb0 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61  >xEof(pCur->pVta
2fbc0 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20  bCursor);.  }.. 
2fbd0 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20   if( !res ){.   
2fbe0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2fbf0 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32  data, jump to P2
2fc00 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
2fc10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2fc20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2fc30 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2fc40 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2fc50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fc60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fc70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
2fc80 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
2fc90 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2fca0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2fcb0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2fcc0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2fcd0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2fce0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2fcf0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2fd00 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
2fd10 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
2fd20 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
2fd30 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
2fd40 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
2fd50 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
2fd60 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
2fd70 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
2fd80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2fd90 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
2fda0 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
2fdb0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2fdc0 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
2fdd0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2fde0 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
2fdf0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
2fe00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
2fe10 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
2fe20 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2fe30 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
2fe40 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
2fe50 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
2fe60 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
2fe70 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
2fe80 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
2fe90 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
2fea0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
2feb0 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
2fec0 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2fed0 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
2fee0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fef0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2ff00 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
2ff10 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
2ff20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2ff30 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e      rc = pVtab->
2ff40 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2ff50 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
2ff60 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61  );.    importVta
2ff70 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2ff80 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
2ff90 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
2ffa0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2ffb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ffc0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2ffd0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
2ffe0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
2fff0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
30000 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
30010 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
30020 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30030 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
30040 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
30050 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
30060 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
30070 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
30080 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
30090 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
300a0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
300b0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
300c0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
300d0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
300e0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
300f0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
30100 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
30110 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
30120 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
30130 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
30140 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
30150 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
30160 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
30170 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
30180 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
30190 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
301a0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
301b0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
301c0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
301d0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
301e0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
301f0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
30200 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
30210 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
30220 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
30230 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
30240 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
30250 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
30260 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30270 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
30280 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
30290 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
302a0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
302b0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
302c0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
302d0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
302e0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
302f0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
30300 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
30310 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
30320 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
30330 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
30340 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
30350 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
30360 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
30370 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
30380 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
30390 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
303a0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
303b0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
303c0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
303d0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
303e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
303f0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
30400 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
30410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
30420 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
30430 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
30440 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
30450 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
30460 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
30470 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
30480 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
30490 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
304a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
304b0 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
304c0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
304d0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
304e0 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
304f0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
30500 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
30510 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
30520 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
30530 61 63 65 0a 20 20 29 3b 0a 20 20 70 56 74 61 62  ace.  );.  pVtab
30540 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
30550 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
30560 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
30570 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
30580 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
30590 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
305a0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
305b0 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
305c0 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
305d0 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
305e0 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
305f0 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
30600 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
30610 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
30620 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
30630 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
30640 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
30650 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
30660 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
30670 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
30680 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
30690 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
306a0 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
306b0 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67  pX);.      apArg
306c0 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20  [i] = pX;.      
306d0 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  pX++;.    }.    
306e0 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
306f0 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20  ct = pOp->p5;.  
30700 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
30710 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e  xUpdate(pVtab, n
30720 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77  Arg, apArg, &row
30730 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61  id);.    db->vta
30740 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74  bOnConflict = vt
30750 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
30760 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
30770 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
30780 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
30790 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29  _OK && pOp->p1 )
307a0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
307b0 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
307c0 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
307d0 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
307e0 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
307f0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
30800 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
30810 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53   }.    if( rc==S
30820 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
30830 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
30840 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
30850 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
30860 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
30870 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
30880 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
30890 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
308a0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
308b0 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
308c0 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
308d0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
308e0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
308f0 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
30900 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
30910 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30920 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30930 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30940 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
30950 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
30960 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
30970 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
30980 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
30990 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
309a0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
309b0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
309c0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
309d0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
309e0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
309f0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
30a00 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
30a10 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
30a20 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
30a30 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
30a40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
30a50 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
30a60 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
30a70 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
30a80 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
30a90 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
30aa0 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
30ab0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
30ac0 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
30ad0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
30ae0 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
30af0 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
30b00 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
30b10 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
30b20 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
30b30 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
30b40 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
30b50 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
30b60 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
30b70 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
30b80 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
30b90 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
30ba0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
30bb0 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
30bc0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
30bd0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
30be0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
30bf0 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
30c00 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74  ree *pBt;..  pBt
30c10 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
30c20 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61  p1].pBt;.  newMa
30c30 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  x = 0;.  if( pOp
30c40 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d  ->p3 ){.    newM
30c50 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ax = sqlite3Btre
30c60 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a  eLastPage(pBt);.
30c70 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c      if( newMax <
30c80 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
30c90 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75  p3 ) newMax = (u
30ca0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b  nsigned)pOp->p3;
30cb0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
30cc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
30cd0 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c  axPageCount(pBt,
30ce0 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61   newMax);.  brea
30cf0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
30d00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30d10 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64  T_TRACE./* Opcod
30d20 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50  e: Trace * * * P
30d30 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  4 *.**.** If tra
30d40 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
30d50 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
30d60 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
30d70 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
30d80 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
30d90 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
30da0 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
30db0 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
30dc0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a  /.case OP_Trace:
30dd0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63   {.  char *zTrac
30de0 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20  e;.  char *z;.. 
30df0 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a   if( db->xTrace.
30e00 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52     && !p->doingR
30e10 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61  erun.   && (zTra
30e20 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
30e30 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
30e40 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
30e50 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56      z = sqlite3V
30e60 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20  dbeExpandSql(p, 
30e70 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d  zTrace);.    db-
30e80 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
30e90 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73  ceArg, z);.    s
30ea0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
30eb0 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20   z);.  }.#ifdef 
30ec0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
30ed0 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
30ee0 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
30ef0 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63  !=0.   && (zTrac
30f00 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
30f10 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
30f20 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
30f30 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50     sqlite3DebugP
30f40 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65  rintf("SQL-trace
30f50 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29  : %s\n", zTrace)
30f60 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
30f70 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
30f80 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30f90 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  f.../* Opcode: N
30fa0 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
30fb0 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
30fc0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
30fd0 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
30fe0 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
30ff0 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
31000 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
31010 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
31020 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
31030 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
31040 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
31050 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
31060 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
31070 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
31080 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31090 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
310a0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
310b0 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
310c0 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
310d0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
310e0 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
310f0 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
31100 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
31110 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
31120 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
31130 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
31140 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
31150 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
31160 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c  code==OP_Noop ||
31170 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
31180 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72  _Explain );.  br
31190 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
311a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311e0 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
311f0 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
31200 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
31210 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
31220 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
31230 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
31240 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
31250 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
31260 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
31270 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
31280 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
31290 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
312a0 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
312b0 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
312c0 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
312d0 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
312e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31320 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
31330 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
31340 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
31350 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69  4 elapsed = sqli
31360 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74  te3Hwtime() - st
31370 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  art;.      pOp->
31380 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65  cycles += elapse
31390 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  d;.      pOp->cn
313a0 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20  t++;.#if 0.     
313b0 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75     fprintf(stdou
313c0 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c  t, "%10llu ", el
313d0 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20  apsed);.        
313e0 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
313f0 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50  Op(stdout, origP
31400 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29  c, &aOp[origPc])
31410 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23  ;.#endif.    }.#
31420 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68  endif..    /* Th
31430 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
31440 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f   adds nothing to
31450 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63   the actual func
31460 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a  tionality.    **
31470 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
31480 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72    It is only her
31490 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  e for testing an
314a0 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20  d debugging..   
314b0 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72   ** On the other
314c0 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62   hand, it does b
314d0 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65  urn CPU cycles e
314e0 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67  very time throug
314f0 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61  h.    ** the eva
31500 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f  luator loop.  So
31510 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74   we can leave it
31520 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47   out when NDEBUG
31530 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
31540 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42   */.#ifndef NDEB
31550 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  UG.    assert( p
31560 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e  c>=-1 && pc<p->n
31570 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  Op );..#ifdef SQ
31580 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
31590 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
315a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
315b0 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63   fprintf(p->trac
315c0 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b  e,"rc=%d\n",rc);
315d0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
315e0 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
315f0 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
31600 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a  |OPFLG_OUT2) ){.
31610 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
31620 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
31630 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
31640 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
31650 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  }.      if( pOp-
31660 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
31670 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20  _OUT3 ){.       
31680 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
31690 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33  ->trace, pOp->p3
316a0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
316b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
316c0 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
316d0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
316e0 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
316f0 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
31700 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
31710 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
31720 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
31730 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
31740 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
31750 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
31760 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
31770 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
31780 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
31790 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
317a0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
317b0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
317c0 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
317d0 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
317e0 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
317f0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
31800 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
31810 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
31820 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
31830 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c               pc,
31840 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
31850 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
31860 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
31870 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
31880 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
31890 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
318a0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
318b0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
318c0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
318d0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
318e0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
318f0 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  b, resetSchemaOn
31900 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20  Fault-1);.  }.. 
31910 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
31920 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
31930 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
31940 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
31950 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
31960 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
31970 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
31980 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
31990 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
319a0 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  n:.  db->lastRow
319b0 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
319c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61    sqlite3VdbeLea
319d0 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  ve(p);.  return 
319e0 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
319f0 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
31a00 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
31a10 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
31a20 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
31a30 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
31a40 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
31a50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31a60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31a70 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
31a80 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
31a90 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
31aa0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
31ab0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
31ac0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
31ad0 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
31ae0 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
31af0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
31b00 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
31b10 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31b20 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
31b30 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
31b40 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
31b50 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
31b60 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
31b70 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
31b80 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
31b90 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
31ba0 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
31bb0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
31bc0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
31bd0 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
31be0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
31bf0 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
31c00 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
31c10 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
31c20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
31c30 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
31c40 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
31c50 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
31c60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
31c70 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
31c80 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
31c90 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
31ca0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
31cb0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
31cc0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
31cd0 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
31ce0 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
31cf0 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
31d00 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
31d10 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
31d20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
31d30 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
31d40 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
31d50 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
31d60 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
31d70 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
31d80 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
31d90 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
31da0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
31db0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.