/ Hex Artifact Content
Login

Artifact f51eb3207594703d24e91335cb16906e894b48aa:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1670: 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 23  MIT_MERGE_SORT.#
1680: 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72   define isSorter
1690: 28 78 29 20 30 0a 23 65 6c 73 65 0a 23 20 64 65  (x) 0.#else.# de
16a0: 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29  fine isSorter(x)
16b0: 20 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d   ((x)->pSorter!=
16c0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
16d0: 20 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70   Argument pMem p
16e0: 6f 69 6e 74 73 20 61 74 20 61 20 72 65 67 69 73  oints at a regis
16f0: 74 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ter that will be
1700: 20 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20   passed to a.** 
1710: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
1720: 63 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65  ction or returne
1730: 64 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 73  d to the user as
1740: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
1750: 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20   query..** This 
1760: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
1770: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69   pMem->type vari
1780: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 65  able used by the
1790: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
17a0: 28 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e  () .** routines.
17b0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
17c0: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
17d0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
17e0: 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d  nt flags = pMem-
17f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c  >flags;.  if( fl
1800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1810: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1820: 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a   = SQLITE_NULL;.
1830: 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66    }.  else if( f
1840: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1850: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1860: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45   = SQLITE_INTEGE
1870: 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  R;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ( flags & MEM_Re
1890: 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  al ){.    pMem->
18a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c  type = SQLITE_FL
18b0: 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  OAT;.  }.  else 
18c0: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
18d0: 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Str ){.    pMem-
18e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54  >type = SQLITE_T
18f0: 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  EXT;.  }else{.  
1900: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1910: 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a  QLITE_BLOB;.  }.
1920: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
1930: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1940: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1950: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1960: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
1970: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
1980: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
1990: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19a0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19b0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19d0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
19e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a00: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a10: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a20: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a40: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a50: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a60: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1a80: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1a90: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1aa0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ab0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1ac0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1ad0: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1ae0: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1af0: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b00: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b10: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b20: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b30: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b40: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b50: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b60: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1b70: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1b80: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1b90: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1ba0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1bb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bc0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1bd0: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1be0: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c00: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c10: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c20: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c30: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c40: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c50: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c60: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1c70: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1c80: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1c90: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1ca0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1cb0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cc0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1cd0: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1ce0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1cf0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d00: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d10: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d20: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d30: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d40: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d50: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d60: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1d70: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1d80: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1da0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1db0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1dc0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1dd0: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1de0: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1df0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e00: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e10: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e20: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e30: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e40: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e50: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e60: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1e70: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1e80: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1e90: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1eb0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ec0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ed0: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1ee0: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1ef0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f00: 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73  r)) + .      (is
1f10: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1f20: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f30: 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20  ze():0) + .     
1f40: 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66   2*nField*sizeof
1f50: 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74  (u32);..  assert
1f60: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1f70: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1f80: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1f90: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fa0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1fb0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1fc0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1fd0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1fe0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ff0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
2000: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
2010: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2020: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2030: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2040: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2050: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2060: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
2070: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
2080: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
2090: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69  eld;.    if( nFi
20a0: 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78  eld ){.      pCx
20b0: 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a  ->aType = (u32 *
20c0: 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38  )&pMem->z[ROUND8
20d0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
20e0: 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  or))];.    }.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69  or))+2*nField*si
2160: 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20  zeof(u32)];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
22b0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
22c0: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
22d0: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
22e0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
22f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
2300: 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  0 ){.    double 
2310: 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20  rValue;.    i64 
2320: 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65  iValue;.    u8 e
2330: 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a  nc = pRec->enc;.
2340: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2350: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
2360: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2370: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2380: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2390: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
23a0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
23b0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
23c0: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
23d0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
23e0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52  enc) ){.      pR
23f0: 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65  ec->u.i = iValue
2400: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2410: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2430: 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75   pRec->r = rValu
2440: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
2450: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
2460: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2470: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
2480: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
2490: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
24a0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
24b0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
24c0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24d0: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
24e0: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
24f0: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2500: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2510: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2520: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2530: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2540: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
2550: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2560: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
2570: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2580: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2590: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
25a0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
25b0: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
25c0: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
25d0: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
25e0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
25f0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2600: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2610: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2620: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2630: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2640: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
2650: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
2660: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2670: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2680: 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  ONE:.**    No-op
2690: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
26a0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
26b0: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
26c0: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
26d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
26e0: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
26f0: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2700: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2710: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2720: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2730: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2750: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
2760: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
2770: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2780: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2790: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
27a0: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
27b0: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
27c0: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
27d0: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
27e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
27f0: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
2800: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
2810: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
2820: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
2830: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
2840: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
2850: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2860: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2870: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2880: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2890: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
28a0: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29  ngify(pRec, enc)
28b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63  ;.    }.    pRec
28c0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
28d0: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a  _Real|MEM_Int);.
28e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
28f0: 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46  nity!=SQLITE_AFF
2900: 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73  _NONE ){.    ass
2910: 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53  ert( affinity==S
2920: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2930: 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53  R || affinity==S
2940: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20  QLITE_AFF_REAL. 
2950: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61              || a
2960: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2970: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
2980: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2990: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
29a0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
29b0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
29c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29d0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29e0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  y(pRec);.    }. 
29f0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2a00: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2a10: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2a20: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2a30: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2a40: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2a50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2a60: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2a70: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2a80: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2a90: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2aa0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2ab0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2ac0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2ad0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2ae0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2af0: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2b00: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2b10: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2b20: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2b30: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2b40: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2b50: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2b60: 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  Val;.  if( pMem-
2b70: 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  >type==SQLITE_TE
2b80: 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e  XT ){.    applyN
2b90: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ba0: 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Mem);.    sqlite
2bb0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2bc0: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
2bd0: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2be0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2bf0: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2c10: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2c20: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2c30: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2c40: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2c50: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c60: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2c70: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2c80: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2c90: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2ca0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2cb0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2cc0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2cd0: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2ce0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2cf0: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d00: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d10: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2d20: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2d30: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2d40: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2d50: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2d60: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2d70: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2d80: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2d90: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2da0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2db0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2dc0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2dd0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2de0: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2df0: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e00: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2e10: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2e20: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2e30: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2e40: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2e50: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2e60: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2e70: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2e80: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2e90: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2ea0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2eb0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2ec0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2ed0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2ef0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f00: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2f10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2f20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2f30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2f40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2f50: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2f60: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2f70: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2f80: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2f90: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2fa0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2fb0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2fc0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2fd0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2fe0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3010: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3020: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3030: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3040: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3050: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
3060: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3070: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3080: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3090: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
30a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
30b0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
30c0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
30d0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
30e0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
30f0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3100: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3110: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3120: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3130: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3140: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3150: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3160: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3170: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3180: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
3190: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
31a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
31b0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
31c0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
31d0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
31e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
31f0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3200: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3210: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3220: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3230: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
3240: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
3250: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3260: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
3270: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
3280: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3290: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
32a0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
32b0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
32c0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
32d0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
32e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
32f0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3300: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3310: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3320: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3330: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
3340: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3350: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3360: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3370: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3380: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
3390: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
33a0: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
33b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
33c0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
33d0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
33e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
33f0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3400: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3410: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3420: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3430: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3440: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3450: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3460: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3470: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3480: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3490: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34a0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
34b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
34d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34e0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
34f0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3500: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3510: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3520: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3530: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3540: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3550: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3560: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3570: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3580: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3590: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
35a0: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
35b0: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
35c0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
35d0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35e0: 49 6e 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66  Invalid ){.    f
35f0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e  printf(out, " un
3600: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3610: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3620: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3630: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3640: 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65   NULL");.  }else
3650: 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26   if( (p->flags &
3660: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74   (MEM_Int|MEM_St
3670: 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45  r))==(MEM_Int|ME
3680: 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70  M_Str) ){.    fp
3690: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a  rintf(out, " si:
36a0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
36b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
36c0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
36d0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
36e0: 74 2c 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d  t, " i:%lld", p-
36f0: 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53  >u.i);.#ifndef S
3700: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3710: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73  ING_POINT.  }els
3720: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3730: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
3740: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
3750: 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65  r:%g", p->r);.#e
3760: 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28  ndif.  }else if(
3770: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3780: 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70  RowSet ){.    fp
3790: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f  rintf(out, " (ro
37a0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
37b0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
37c0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
37d0: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
37e0: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
37f0: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3800: 20 22 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66   ");.    fprintf
3810: 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66  (out, "%s", zBuf
3820: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3830: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3840: 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e  ce(FILE *out, in
3850: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
3860: 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20  .  fprintf(out, 
3870: 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52  "REG[%d] = ", iR
3880: 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50  eg);.  memTraceP
3890: 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20  rint(out, p);.  
38a0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e  fprintf(out, "\n
38b0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
38c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
38d0: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
38f0: 69 66 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69  if(p->trace)regi
3900: 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
3910: 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce,R,M).#else.# 
3920: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3930: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
3940: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
3950: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
3960: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
3970: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
3980: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
3990: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
39a0: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
39b0: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
39c0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
39d0: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
39e0: 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f  /*.** The CHECK_
39f0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61  FOR_INTERRUPT ma
3a00: 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65  cro defined here
3a10: 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66   looks to see if
3a20: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
3a30: 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f 75 74  interrupt() rout
3a40: 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c  ine has been cal
3a50: 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61 73 20  led.  If it has 
3a60: 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72  been, then.** pr
3a70: 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20  ocessing of the 
3a80: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20  VDBE program is 
3a90: 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a  interrupted..**.
3aa0: 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64  ** This macro ad
3ab0: 64 65 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73  ded to every ins
3ac0: 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f  truction that do
3ad0: 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64  es a jump in ord
3ae0: 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65  er to.** impleme
3af0: 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73  nt a loop.  This
3b00: 20 74 65 73 74 20 75 73 65 64 20 74 6f 20 62 65   test used to be
3b10: 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65   on every single
3b20: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a   instruction,.**
3b30: 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20   but that meant 
3b40: 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20  we more testing 
3b50: 74 68 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20  than we needed. 
3b60: 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67   By only testing
3b70: 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20   the.** flag on 
3b80: 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e  jump instruction
3b90: 73 2c 20 77 65 20 67 65 74 20 61 20 28 73 6d 61  s, we get a (sma
3ba0: 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76  ll) speed improv
3bb0: 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ement..*/.#defin
3bc0: 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45  e CHECK_FOR_INTE
3bd0: 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64  RRUPT \.   if( d
3be0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
3bf0: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
3c00: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
3c10: 74 3b 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  t;...#ifndef NDE
3c20: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3c30: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3c40: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3c50: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3c60: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3c70: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3c80: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3c90: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3ca0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3cb0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3cc0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3cd0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3ce0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3cf0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3d00: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3d10: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3d20: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3d30: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3d40: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
3d50: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
3d60: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
3d70: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
3d80: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
3d90: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
3da0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
3db0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
3dc0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
3dd0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
3de0: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
3df0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
3e00: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
3e10: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
3e20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72  #endif../*.** Tr
3e30: 61 6e 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73  ansfer error mes
3e40: 73 61 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61  sage text from a
3e50: 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a  n sqlite3_vtab.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69  qlite3_malloc) i
3ea0: 6e 74 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d  nto a Vdbe.zErrM
3eb0: 73 67 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a  sg (text stored.
3ec0: 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74  ** in memory obt
3ed0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
3ee0: 65 33 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a  e3DbMalloc)..*/.
3ef0: 73 74 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f  static void impo
3f00: 72 74 56 74 61 62 45 72 72 4d 73 67 28 56 64 62  rtVtabErrMsg(Vdb
3f10: 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74  e *p, sqlite3_vt
3f20: 61 62 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71  ab *pVtab){.  sq
3f30: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
3f40: 62 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  b;.  sqlite3DbFr
3f50: 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
3f60: 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
3f70: 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
3f80: 75 70 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45  up(db, pVtab->zE
3f90: 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65  rrMsg);.  sqlite
3fa0: 33 5f 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45  3_free(pVtab->zE
3fb0: 72 72 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d  rrMsg);.  pVtab-
3fc0: 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a  >zErrMsg = 0;.}.
3fd0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
3fe0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
3ff0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
4000: 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e  can then return.
4010: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64  .**.** sqlite3Vd
4020: 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75  beMakeReady() mu
4030: 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66  st be called bef
4040: 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ore this routine
4050: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
4060: 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61  close the progra
4070: 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f  m with a final O
4080: 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65  P_Halt and to se
4090: 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63  t up the callbac
40a0: 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72  ks.** and the er
40b0: 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e  ror message poin
40c0: 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65  ter..**.** Whene
40d0: 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73  ver a row or res
40e0: 75 6c 74 20 64 61 74 61 20 69 73 20 61 76 61 69  ult data is avai
40f0: 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74  lable, this rout
4100: 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a  ine will either.
4110: 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65  ** invoke the re
4120: 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69  sult callback (i
4130: 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20  f there is one) 
4140: 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a  or return with.*
4150: 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a  * SQLITE_ROW..**
4160: 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70  .** If an attemp
4170: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65  t is made to ope
4180: 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62  n a locked datab
4190: 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ase, then this r
41a0: 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65  outine.** will e
41b0: 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  ither invoke the
41c0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28   busy callback (
41d0: 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29  if there is one)
41e0: 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72   or it will.** r
41f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
4200: 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65  Y..**.** If an e
4210: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20  rror occurs, an 
4220: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
4230: 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f   written to memo
4240: 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66  ry obtained.** f
4250: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
4260: 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72  oc() and p->zErr
4270: 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70  Msg is made to p
4280: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d  oint to that mem
4290: 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f  ory..** The erro
42a0: 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64  r code is stored
42b0: 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68   in p->rc and th
42c0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
42d0: 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  ns SQLITE_ERROR.
42e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61  .**.** If the ca
42f0: 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74 75  llback ever retu
4300: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
4310: 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65  en the program e
4320: 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  xits.** immediat
4330: 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c  ely.  There will
4340: 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73   be no error mes
4350: 73 61 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e  sage but the p->
4360: 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73  rc field is.** s
4370: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f  et to SQLITE_ABO
4380: 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  RT and this rout
4390: 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ine will return 
43a0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a  SQLITE_ERROR..**
43b0: 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c  .** A memory all
43c0: 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61  ocation error ca
43d0: 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65  uses p->rc to be
43e0: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e   set to SQLITE_N
43f0: 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a  OMEM and this.**
4400: 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75   routine to retu
4410: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
4420: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74  .**.** Other fat
4430: 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e  al errors return
4440: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4450: 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20  *.** After this 
4460: 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69  routine has fini
4470: 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62  shed, sqlite3Vdb
4480: 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75  eFinalize() shou
4490: 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ld be.** used to
44a0: 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65   clean up the me
44b0: 73 73 20 74 68 61 74 20 77 61 73 20 6c 65 66 74  ss that was left
44c0: 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20   behind..*/.int 
44d0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
44e0: 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20  .  Vdbe *p      
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4500: 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a   The VDBE */.){.
4510: 20 20 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20    int pc=0;     
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4530: 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  The program coun
4540: 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70  ter */.  Op *aOp
4550: 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20   = p->aOp;      
4560: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
4570: 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70  ->aOp */.  Op *p
4580: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4590: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
45a0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
45b0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
45c0: 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61  OK;        /* Va
45d0: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f  lue to return */
45e0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
45f0: 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a   p->db;       /*
4600: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   The database */
4610: 0a 20 20 75 38 20 72 65 73 65 74 53 63 68 65 6d  .  u8 resetSchem
4620: 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a  aOnFault = 0; /*
4630: 20 52 65 73 65 74 20 73 63 68 65 6d 61 20 61 66   Reset schema af
4640: 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ter an error if 
4650: 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38  positive */.  u8
4660: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
4670: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4680: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4690: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
46a0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
46b0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
46c0: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
46d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
46e0: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
46f0: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
4700: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
4710: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
4720: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
4730: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
4740: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4750: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4760: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4770: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4780: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4790: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
47a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
47b0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
47c0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
47d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
47e0: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
47f0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
4800: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
4810: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
4820: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4830: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
4840: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4850: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4860: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4880: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4890: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
48a0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
48b0: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
48c0: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
48d0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
48e0: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
48f0: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
4900: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
4910: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
4920: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
4930: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
4940: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4950: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4970: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4980: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4990: 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63   */.  int origPc
49a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
49b0: 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e   /* Program coun
49c0: 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20  ter at start of 
49d0: 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
49e0: 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53  .  /*** INSERT S
49f0: 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20  TACK UNION HERE 
4a00: 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  ***/..  assert( 
4a10: 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  p->magic==VDBE_M
4a20: 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20  AGIC_RUN );  /* 
4a30: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76  sqlite3_step() v
4a40: 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a  erifies this */.
4a50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74    sqlite3VdbeEnt
4a60: 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e  er(p);.  if( p->
4a70: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
4a80: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4a90: 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c  happens if a mal
4aa0: 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63  loc() inside a c
4ab0: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4ac0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a  olumn_text() or.
4ad0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
4ae0: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66  olumn_text16() f
4af0: 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67  ailed.  */.    g
4b00: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
4b10: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d    assert( p->rc=
4b20: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
4b30: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  >rc==SQLITE_BUSY
4b40: 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51   );.  p->rc = SQ
4b50: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
4b60: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4b70: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4b80: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4b90: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4ba0: 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   = 0;.  CHECK_FO
4bb0: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73  R_INTERRUPT;.  s
4bc0: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4bd0: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
4be0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4bf0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4c00: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 3d   checkProgress =
4c10: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
4c20: 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  0;.#endif.#ifdef
4c30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4c40: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
4c50: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
4c60: 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28  ( p->pc==0  && (
4c70: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c80: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4c90: 67 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  g)!=0 ){.    int
4ca0: 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   i;.    printf("
4cb0: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4cc0: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73  ting:\n");.    s
4cd0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ce0: 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69  ql(p);.    for(i
4cf0: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4d00: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
4d10: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4d20: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
4d30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
4d40: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
4d50: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
4d60: 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72   for(pc=p->pc; r
4d70: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63  c==SQLITE_OK; pc
4d80: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
4d90: 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e   pc>=0 && pc<p->
4da0: 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp );.    if( d
4db0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4dc0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
4dd0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4de0: 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20  LE.    origPc = 
4df0: 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20  pc;.    start = 
4e00: 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
4e10: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20  .#endif.    pOp 
4e20: 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20  = &aOp[pc];..   
4e30: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
4e40: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
4e50: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
4e60: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4e70: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4e80: 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
4e90: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d  {.      if( pc==
4ea0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69  0 ){.        pri
4eb0: 6e 74 66 28 22 56 44 42 45 20 45 78 65 63 75 74  ntf("VDBE Execut
4ec0: 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a  ion Trace:\n");.
4ed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
4ee0: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4ef0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
4f00: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4f10: 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20 70  (p->trace, pc, p
4f20: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
4f30: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
4f40: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4f50: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
4f60: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
4f70: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
4f80: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
4f90: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
4fa0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
4fb0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4fc0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
4fd0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4fe0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
4ff0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5000: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5010: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5020: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5030: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5040: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5050: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5060: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
5070: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
5080: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
5090: 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  .    /* Call the
50a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
50b0: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
50c0: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
50d0: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
50e0: 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70     ** of VDBE op
50f0: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
5100: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
5110: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
5120: 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c  on of.    ** sql
5130: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
5140: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
5150: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
5160: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
5170: 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ed)..    ** If t
5180: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
5190: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e  back returns non
51a0: 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20  -zero, exit the 
51b0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
51c0: 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65  with.    ** a re
51d0: 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45  turn code SQLITE
51e0: 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20  _ABORT..    */. 
51f0: 20 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67     if( checkProg
5200: 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66  ress ){.      if
5210: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
5220: 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73  ps==nProgressOps
5230: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
5240: 70 72 63 3b 0a 20 20 20 20 20 20 20 20 70 72 63  prc;.        prc
5250: 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73   = db->xProgress
5260: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
5270: 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
5280: 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  prc!=0 ){.      
5290: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
52a0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20  INTERRUPT;.     
52b0: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
52c0: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20  rror_halt;.     
52d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72     }.        nPr
52e0: 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20  ogressOps = 0;. 
52f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72       }.      nPr
5300: 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20  ogressOps++;.   
5310: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5320: 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20  * On any opcode 
5330: 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70  with the "out2-p
5340: 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20  rerelease" tag, 
5350: 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20  free any.    ** 
5360: 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74  external allocat
5370: 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b  ions out of mem[
5380: 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b  p2] and set mem[
5390: 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a  p2] to be.    **
53a0: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   an undefined in
53b0: 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20  teger.  Opcodes 
53c0: 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c  will either fill
53d0: 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a   in the integer.
53e0: 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20      ** value or 
53f0: 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20  convert mem[p2] 
5400: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74  to a different t
5410: 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ype..    */.    
5420: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66  assert( pOp->opf
5430: 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63  lags==sqlite3Opc
5440: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
5450: 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20  >opcode] );.    
5460: 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
5470: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5480: 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  ERELEASE ){.    
5490: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
54a0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
54b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
54c0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
54d0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
54e0: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41  >p2];.      memA
54f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5500: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64 62  pOut);.      Vdb
5510: 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74  eMemRelease(pOut
5520: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
5530: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
5540: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61      }..    /* Sa
5550: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
5560: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
5570: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5580: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
5590: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
55a0: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
55b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
55c0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
55d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
55e0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
55f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5600: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5610: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p1]) );.      R
5620: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5630: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
5640: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p1]);.    }.  
5650: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5660: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  ags & OPFLG_IN2)
5670: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5680: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5690: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
56a0: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
56b0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
56c0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
56d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
56e0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
56f0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61  RACE(pOp->p2, &a
5700: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5710: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5720: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5730: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5740: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5750: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
5760: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5770: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5780: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5790: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
57a0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  3]) );.      REG
57b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
57c0: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
57d0: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
57e0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
57f0: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5800: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5810: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5820: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5830: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5840: 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
5850: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5860: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
5870: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5880: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5890: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
58a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
58b0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
58c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58d0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
58e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
58f0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5900: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  p3]);.    }.#end
5910: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5920: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5930: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5990: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
59a0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
59b0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
59c0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
59d0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
59e0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
59f0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5a00: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5a10: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5a20: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5a30: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5a40: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5a50: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5a60: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5a70: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5a80: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5a90: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5aa0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5ab0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5ac0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5ad0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5ae0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5af0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5b00: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5b10: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5b20: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5b30: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5b40: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5b50: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5b60: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5b70: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5b80: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5b90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5ba0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5bb0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5bc0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5bd0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5be0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5bf0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5c00: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5c10: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5c20: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5c30: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5c40: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5c50: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5c60: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5c70: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5c80: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5c90: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5ca0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5cb0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5cc0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5cd0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5ce0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5cf0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5d00: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5d10: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5d20: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5d30: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5d40: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5d50: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5d60: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5d70: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5d80: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5d90: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5da0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5db0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5dc0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5dd0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5de0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5df0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5e00: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5e10: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5e20: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5e30: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5e40: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5e50: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5e60: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5e70: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
5e80: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
5e90: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
5ea0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
5eb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5ec0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
5ed0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
5ee0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
5ef0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5f00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5f10: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5f20: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5f30: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5f40: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5f50: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5f60: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5f70: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5f80: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5f90: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
5fa0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
5fb0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
5fc0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
5fd0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
5fe0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
5ff0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6000: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6010: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6020: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6030: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6040: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6090: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
60a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
60b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
60c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
60d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
60e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
60f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6100: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6110: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6120: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6130: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6140: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
6150: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6160: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
6170: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
6180: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
6190: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
61a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
61b0: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
61c0: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
61d0: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
61e0: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
61f0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6200: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6210: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
6220: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
6230: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6240: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6250: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
6260: 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d  nMem );.  pIn1 =
6270: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6280: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6290: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
62a0: 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62  n)==0 );.  memAb
62b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
62c0: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  In1);.  pIn1->fl
62d0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
62e0: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
62f0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6300: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6310: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
6320: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6330: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
6340: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6350: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6360: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6370: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6380: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6390: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
63a0: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
63b0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
63c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
63d0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
63e0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
63f0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d  EM_Int );.  pc =
6400: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6410: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6420: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
6430: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6440: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
6450: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
6460: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6470: 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  ter P1..*/.case 
6480: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
6490: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
64a0: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
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 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
64e0: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
64f0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6500: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6510: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
6520: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
6530: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6540: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6550: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
6560: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
6570: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
6580: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
6590: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P3 P4 *.**.** Ch
65a0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
65b0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
65c0: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
65d0: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
65e0: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
65f0: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6600: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6610: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6620: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6630: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
6640: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
6650: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
6660: 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
6670: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
6680: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
6690: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
66a0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
66b0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
66c0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
66d0: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
66e0: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
66f0: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
6700: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
6710: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69  * P4 *.**.** Exi
6720: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
6730: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
6740: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
6750: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
6760: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
6770: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
6780: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
6790: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
67a0: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
67b0: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
67c0: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
67d0: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
67e0: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
67f0: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
6800: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
6810: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
6820: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
6830: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
6840: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
6850: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
6860: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
6870: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
6880: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
6890: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
68a0: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
68b0: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
68c0: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
68d0: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
68e0: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
68f0: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6900: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
6910: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
6920: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
6930: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
6940: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
6950: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
6960: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
6970: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
6980: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
6990: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
69a0: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
69b0: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
69c0: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
69d0: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
69e0: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
69f0: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
6a00: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
6a10: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
6a20: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
6a30: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
6a40: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
6a50: 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  alt: {.  if( pOp
6a60: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
6a70: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
6a80: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
6a90: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
6aa0: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
6ab0: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
6ac0: 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d   */.    VdbeFram
6ad0: 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  e *pFrame = p->p
6ae0: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
6af0: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
6b00: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
6b10: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
6b20: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
6b30: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
6b40: 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c  e);.    pc = sql
6b50: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
6b60: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
6b70: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
6b80: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
6b90: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
6ba0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
6bb0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
6bc0: 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  pc is the OP_Pro
6bd0: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
6be0: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
6bf0: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
6c00: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
6c10: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
6c20: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
6c30: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
6c40: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
6c50: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
6c60: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
6c70: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
6c80: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
6c90: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
6ca0: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
6cb0: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
6cc0: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
6cd0: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
6ce0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
6cf0: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
6d00: 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f        pc = p->aO
6d10: 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20  p[pc].p2-1;.    
6d20: 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61  }.    aOp = p->a
6d30: 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70  Op;.    aMem = p
6d40: 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61  ->aMem;.    brea
6d50: 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20  k;.  }..  p->rc 
6d60: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6d70: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
6d80: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
6d90: 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70  pc = pc;.  if( p
6da0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
6db0: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53  assert( p->rc!=S
6dc0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
6dd0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
6de0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
6df0: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
6e00: 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  z);.    testcase
6e10: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
6e20: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
6e30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6e40: 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74  (pOp->p1, "abort
6e50: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
6e60: 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  %s", pc, p->zSql
6e70: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6e80: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63 20  }else if( p->rc 
6e90: 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  ){.    testcase(
6ea0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6eb0: 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
6ec0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
6ed0: 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74 72  pOp->p1, "constr
6ee0: 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20 25  aint failed at %
6ef0: 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c 20  d in [%s]", pc, 
6f00: 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20  p->zSql);.  }.  
6f10: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
6f20: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
6f30: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
6f40: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
6f50: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
6f60: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
6f70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
6f80: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
6f90: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
6fa0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
6fb0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
6fc0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
6fd0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
6fe0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
6ff0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7000: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
7010: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
7020: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
7030: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
7040: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
7050: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
7060: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
7070: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
7080: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
7090: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
70a0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
70b0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
70c0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
70d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
70e0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
70f0: 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
7100: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
7110: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7120: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
7130: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7140: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7150: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
7160: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
7170: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
7180: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7190: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
71a0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
71b0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
71c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
71d0: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
71e0: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
71f0: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
7200: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
7210: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
7220: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
7230: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
7240: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7250: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7260: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
7270: 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  nt value..** Wri
7280: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
7290: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
72a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a  */.case OP_Real:
72b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
72c0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41   same as TK_FLOA
72d0: 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  T, out2-prerelea
72e0: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
72f0: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
7300: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
7310: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
7320: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
7330: 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  t->r = *pOp->p4.
7340: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
7350: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
7360: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
7370: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
7380: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
7390: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
73a0: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
73b0: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
73c0: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
73d0: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
73e0: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
73f0: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
7400: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
7410: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7420: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7430: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7440: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7450: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7460: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
7470: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
7480: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
7490: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
74a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
74b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
74c0: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
74d0: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
74e0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
74f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7500: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7510: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7520: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7530: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7540: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7550: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7560: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
7570: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
7580: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
7590: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
75a0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
75b0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
75c0: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
75d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
75e0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
75f0: 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  n );.    pOut->z
7600: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
7610: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
7620: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70  EM_Static;.    p
7630: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Out->flags &= ~M
7640: 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20  EM_Dyn;.    if( 
7650: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
7660: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
7670: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
7680: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
7690: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
76a0: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
76b0: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
76c0: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
76d0: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
76e0: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
76f0: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
7700: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
7710: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
7720: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7730: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
7740: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
7750: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
7760: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
7770: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
7780: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7790: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
77a0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
77b0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
77c0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
77d0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
77e0: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
77f0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7800: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7810: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7820: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7830: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
7840: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
7850: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
7860: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
7870: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
7880: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
7890: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
78a0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
78b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
78c0: 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32  code: Null P1 P2
78d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
78e0: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
78f0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
7900: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
7910: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
7920: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
7930: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
7940: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
7950: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
7960: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
7970: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
7980: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
7990: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
79a0: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
79b0: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
79c0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
79d0: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
79e0: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
79f0: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
7a00: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
7a10: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
7a20: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
7a30: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
7a40: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
7a50: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
7a60: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
7a70: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
7a80: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7a90: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
7aa0: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
7ab0: 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70  lFlag;.  cnt = p
7ac0: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
7ad0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7ae0: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
7af0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
7b00: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
7b10: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
7b20: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
7b30: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
7b40: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
7b50: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
7b60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
7b70: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
7b80: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
7b90: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
7ba0: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
7bb0: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
7bc0: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
7bd0: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a  Blob P1 P2 * P4.
7be0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
7bf0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
7c00: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
7c10: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
7c20: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
7c30: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7c40: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
7c50: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7c60: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7c70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
7c80: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
7c90: 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  GTH );.  sqlite3
7ca0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
7cb0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
7cc0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
7cd0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7ce0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7cf0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7d00: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7d10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7d20: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
7d30: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
7d40: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
7d50: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
7d60: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7d70: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
7d80: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
7d90: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
7da0: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20 61   appears in P4 a
7db0: 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65  nd P3==1..** The
7dc0: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
7dd0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
7de0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
7df0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
7e00: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
7e10: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7e20: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
7e30: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
7e40: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
7e50: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
7e60: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
7e70: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
7e80: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
7e90: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
7ea0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
7eb0: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
7ec0: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
7ed0: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
7ee0: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
7ef0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
7f00: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
7f10: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7f20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7f30: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7f40: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7f50: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7f60: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7f70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7f80: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7f90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7fa0: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7fb0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7fc0: 50 31 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f 0a  P1+P3 over into.
7fd0: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
7fe0: 2e 50 32 2b 50 33 2e 20 20 52 65 67 69 73 74 65  .P2+P3.  Registe
7ff0: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 61 72 65  rs P1..P1+P3 are
8000: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
8010: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
8020: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
8030: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
8040: 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50 32  P1..P1+P3 and P2
8050: 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76 65 72 6c  ..P2+P3 to overl
8060: 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ap..*/.case OP_M
8070: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
8080: 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c  Malloc;   /* Hol
8090: 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f  ding variable fo
80a0: 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  r allocated memo
80b0: 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ry */.  int n;  
80c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
80d0: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
80e0: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
80f0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
8100: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
8110: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
8120: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
8130: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
8140: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
8150: 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20 31 3b 0a   = pOp->p3 + 1;.
8160: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
8170: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
8180: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
8190: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
81a0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
81b0: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
81c0: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
81d0: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
81e0: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68   &aMem[p2];.  wh
81f0: 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20  ile( n-- ){.    
8200: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
8210: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
8220: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
8230: 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  <=&aMem[p->nMem]
8240: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8250: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
8260: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
8270: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
8280: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
8290: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
82a0: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
82b0: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
82c0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
82d0: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
82e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
82f0: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
8300: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
8310: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
8320: 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b  pyFrom<&aMem[p1+
8330: 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20  pOp->p3] ){.    
8340: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
8350: 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e  om += p1 - pOp->
8360: 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p2;.    }.#endif
8370: 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c  .    pIn1->zMall
8380: 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  oc = zMalloc;.  
8390: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
83a0: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
83b0: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
83c0: 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ut++;.  }.  brea
83d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
83e0: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
83f0: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8400: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8410: 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f  s P1..P1+P3 into
8420: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
8430: 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  2+P3..**.** This
8440: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
8450: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
8460: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
8470: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
8480: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
8490: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
84a0: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
84b0: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
84c0: 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e   OP_Copy: {.  in
84d0: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
84e0: 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  >p3;.  pIn1 = &a
84f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8500: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8510: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8520: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8530: 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
8540: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8550: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8560: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8570: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
8580: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66  alize(pOut);.#if
8590: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
85a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70  .    pOut->pScop
85b0: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
85c0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
85d0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70  RACE(pOp->p2+pOp
85e0: 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20  ->p3-n, pOut);. 
85f0: 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20     if( (n--)==0 
8600: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75  ) break;.    pOu
8610: 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  t++;.    pIn1++;
8620: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8630: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
8640: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
8650: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
8660: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
8670: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
8680: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
8690: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
86a0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
86b0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
86c0: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
86d0: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
86e0: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
86f0: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
8700: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
8710: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
8720: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
8730: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
8740: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
8750: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
8760: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
8770: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
8780: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
8790: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
87a0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
87b0: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
87c0: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
87d0: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
87e0: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
87f0: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
8800: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
8810: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
8820: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
8830: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
8840: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74       /* in1, out
8850: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
8860: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8870: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8880: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8890: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
88a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
88b0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
88c0: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
88d0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
88e0: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
88f0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
8900: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
8910: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
8920: 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  if.  REGISTER_TR
8930: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8940: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8950: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
8960: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
8970: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
8980: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
8990: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
89a0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
89b0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
89c0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
89d0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
89e0: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
89f0: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8a00: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8a10: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8a20: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8a30: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8a40: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8a50: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8a60: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
8a70: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
8a80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
8a90: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
8aa0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
8ab0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8ac0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8ad0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8ae0: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8af0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8b00: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p2<=p->nMem+1 );
8b10: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
8b20: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
8b30: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
8b40: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
8b50: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
8b60: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
8b70: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
8b80: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
8b90: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
8ba0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
8bb0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
8bc0: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
8bd0: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
8be0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
8bf0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8c00: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
8c10: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
8c20: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8c30: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
8c40: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
8c50: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
8c60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8c70: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
8c80: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
8c90: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
8ca0: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
8cb0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
8cc0: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
8cd0: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
8ce0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8cf0: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
8d00: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
8d10: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
8d20: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
8d30: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
8d40: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
8d50: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
8d60: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
8d70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
8d80: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
8d90: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
8da0: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
8db0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
8dc0: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
8dd0: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
8de0: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
8df0: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
8e00: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
8e10: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
8e20: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
8e30: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
8e40: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
8e50: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
8e60: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
8e70: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
8e80: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
8e90: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
8ea0: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
8eb0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
8ec0: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
8ed0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
8ee0: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
8ef0: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
8f00: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8f10: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
8f20: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
8f30: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
8f40: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
8f50: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
8f60: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
8f70: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
8f80: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
8f90: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
8fa0: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
8fb0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
8fc0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
8fd0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8fe0: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
8ff0: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
9000: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
9010: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
9020: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
9030: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
9040: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
9050: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
9060: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
9070: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
9080: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
9090: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
90a0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
90b0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
90c0: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
90d0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
90e0: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
90f0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
9100: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
9110: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
9120: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
9130: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
9140: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
9150: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
9160: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
9170: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
9180: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
9190: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
91a0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
91b0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
91c0: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
91d0: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
91e0: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
91f0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9200: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
9210: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
9220: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
9230: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
9240: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
9250: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
9260: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
9270: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9280: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
9290: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
92a0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
92b0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
92c0: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
92d0: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
92e0: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
92f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
9300: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
9310: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
9320: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
9330: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
9340: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
9350: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
9360: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
9370: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
9380: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9390: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
93a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
93b0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
93c0: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
93d0: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
93e0: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
93f0: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
9400: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
9410: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
9420: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
9430: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
9440: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
9450: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
9460: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
9470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
9480: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
9490: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
94a0: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
94b0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
94c0: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
94d0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
94e0: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
94f0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9500: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
9510: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
9520: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
9530: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
9540: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
9550: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
9560: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
9570: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
9580: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
9590: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
95a0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
95b0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
95c0: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
95d0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
95e0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
95f0: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
9600: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
9610: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
9620: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
9630: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
9640: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
9650: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
9660: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
9670: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
9680: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
9690: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
96a0: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
96b0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
96c0: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
96d0: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
96e0: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
96f0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
9700: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
9710: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
9720: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
9730: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
9740: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
9750: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
9760: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
9770: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
9780: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9790: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
97a0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
97b0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
97c0: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
97d0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
97e0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
97f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9800: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9810: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
9820: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9830: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
9840: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
9850: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9860: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9870: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
98a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
98b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
98c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
98d0: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
98e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
98f0: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
9900: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9910: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
9920: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9930: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9990: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
99a0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
99b0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
99c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
99d0: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
99e0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
99f0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9a00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9a10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9a20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9a30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9a40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9a50: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
9a60: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
9a70: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
9a80: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
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 20   in register P3 
9ad0: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
9ae0: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
9af0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
9b00: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
9b10: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
9b20: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9b30: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
9b40: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9b50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
9b60: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
9b70: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
9b80: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
9b90: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
9ba0: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
9bb0: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
9bc0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9bd0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9be0: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9bf0: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
9c00: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
9c10: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
9c20: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
9c30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
9c40: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
9c50: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9c60: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
9c70: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9ca0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9cb0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
9cc0: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
9cd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9ce0: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
9cf0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9d00: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
9d10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9d20: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
9d30: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9d40: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9d60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
9d70: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
9d80: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
9d90: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
9da0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9db0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
9dc0: 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20   out3 */.  char 
9dd0: 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74  bIntint;   /* St
9de0: 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f  arted out as two
9df0: 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64   integer operand
9e00: 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  s */.  int flags
9e10: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
9e20: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
9e30: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
9e40: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
9e50: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9e60: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
9e70: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
9e80: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
9e90: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
9ea0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
9eb0: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
9ec0: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
9ed0: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9ee0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
9ef0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9f00: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
9f10: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
9f20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9f30: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9f40: 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20  ffinity(pIn1);. 
9f50: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
9f60: 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p2];.  applyN
9f70: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
9f80: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
9f90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9fa0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
9fb0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
9fc0: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
9fd0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
9fe0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9ff0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a000: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
a010: 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61  lags & pIn2->fla
a020: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d  gs & MEM_Int)==M
a030: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41  EM_Int ){.    iA
a040: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
a050: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
a060: 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  ;.    bIntint = 
a070: 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  1;.    switch( p
a080: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
a090: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
a0a0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
a0b0: 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69  e3AddInt64(&iB,i
a0c0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
a0d0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
a0e0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
a0f0: 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  t:  if( sqlite3S
a100: 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ubInt64(&iB,iA) 
a110: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
a120: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a130: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
a140: 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49   if( sqlite3MulI
a150: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
a160: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
a170: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a180: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
a190: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
a1a0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a1b0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a1c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
a1d0: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
a1e0: 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f  EST_INT64 ) goto
a1f0: 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20   fp_math;.      
a200: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
a210: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a220: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
a230: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a240: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a250: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a260: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a270: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a280: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
a290: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
a2a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a2b0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
a2c0: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
a2d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a2e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
a2f0: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
a300: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
a310: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
a320: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
a330: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
a340: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a350: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
a360: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a370: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a380: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
a390: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
a3a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a3b0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
a3c0: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
a3d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a3e0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a3f0: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
a400: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a410: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
a420: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
a430: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
a440: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
a450: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
a460: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
a470: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
a480: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a490: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a4a0: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
a4b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a4c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
a4d0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
a4e0: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
a4f0: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
a500: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
a510: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a520: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a530: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a540: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a550: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
a560: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
a570: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
a580: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a590: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
a5a0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
a5b0: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
a5c0: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
a5d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a5e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
a5f0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
a600: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
a610: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
a620: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a630: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a640: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a650: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a660: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a670: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a680: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
a690: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
a6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
a6b0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
a6c0: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
a6d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
a6e0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a6f0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
a700: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
a710: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
a720: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a730: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
a740: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
a750: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
a760: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
a770: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
a780: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a790: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
a7a0: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
a7b0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
a7c0: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
a7d0: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
a7e0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
a7f0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
a800: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
a810: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
a820: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
a830: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
a840: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
a850: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
a860: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
a870: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
a880: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
a890: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
a8a0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
a8b0: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
a8c0: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
a8d0: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
a8e0: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
a8f0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
a900: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
a910: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
a920: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
a930: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
a940: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
a950: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
a960: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
a970: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a980: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
a990: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
a9a0: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
a9b0: 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66  , only to user f
a9c0: 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64  unctions defined
a9d0: 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63   in func.c..*/.c
a9e0: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
a9f0: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
aa00: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
aa10: 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  SEQ );.  if( pOp
aa20: 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
aa30: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
aa40: 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  64(&aMem[pOp->p1
aa50: 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ], 0);.  }.  bre
aa60: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
aa70: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
aa80: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
aa90: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
aaa0: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
aab0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
aac0: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
aad0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
aae0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
aaf0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
ab00: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
ab10: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
ab20: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
ab30: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
ab40: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
ab50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
ab60: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
ab70: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
ab80: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
ab90: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
aba0: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
abb0: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
abc0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
abd0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
abe0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
abf0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
ac00: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
ac10: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
ac20: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
ac30: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
ac40: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
ac50: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
ac60: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
ac70: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
ac80: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
ac90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
aca0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
acb0: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
acc0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
acd0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
ace0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
acf0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
ad00: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
ad10: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
ad20: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
ad30: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
ad40: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
ad50: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
ad60: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
ad70: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
ad80: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
ad90: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
ada0: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
adb0: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
adc0: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
add0: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
ade0: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
adf0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
ae00: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
ae10: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
ae20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
ae30: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
ae40: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61  e(p, pOut);..  a
ae50: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
ae60: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
ae70: 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  ->p2+n<=p->nMem+
ae80: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
ae90: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
aea0: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
aeb0: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20  >p2+n );.  pArg 
aec0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
aed0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
aee0: 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a  ; i++, pArg++){.
aef0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
af00: 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a  sValid(pArg) );.
af10: 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
af20: 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  Arg;.    Deephem
af30: 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20  eralize(pArg);. 
af40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
af50: 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72 67 29  mStoreType(pArg)
af60: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
af70: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
af80: 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  pArg);.  }..  as
af90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
afa0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c  e==P4_FUNCDEF ||
afb0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
afc0: 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69  _VDBEFUNC );.  i
afd0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
afe0: 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20  P4_FUNCDEF ){.  
aff0: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
b000: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20  p->p4.pFunc;.   
b010: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
b020: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
b030: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
b040: 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d   (VdbeFunc*)pOp-
b050: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  >p4.pVdbeFunc;. 
b060: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63     ctx.pFunc = c
b070: 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46  tx.pVdbeFunc->pF
b080: 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63 74 78 2e  unc;.  }..  ctx.
b090: 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
b0a0: 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d  ll;.  ctx.s.db =
b0b0: 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65   db;.  ctx.s.xDe
b0c0: 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  l = 0;.  ctx.s.z
b0d0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f  Malloc = 0;..  /
b0e0: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
b0f0: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
b100: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
b110: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
b120: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
b130: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
b140: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
b150: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
b160: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
b170: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
b180: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
b190: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
b1a0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
b1b0: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
b1c0: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
b1d0: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
b1e0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
b1f0: 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
b200: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
b210: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
b220: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
b230: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
b240: 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
b250: 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
b260: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
b270: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
b280: 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
b290: 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
b2a0: 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
b2b0: 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
b2c0: 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
b2d0: 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
b2e0: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
b2f0: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
b300: 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
b310: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
b320: 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
b330: 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20 2f 2a  lastRowid;..  /*
b340: 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72   If any auxiliar
b350: 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73  y data functions
b360: 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65   have been calle
b370: 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66  d by this user f
b380: 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d  unction,.  ** im
b390: 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74  mediately call t
b3a0: 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f  he destructor fo
b3b0: 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63  r any non-static
b3c0: 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20   values..  */.  
b3d0: 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e  if( ctx.pVdbeFun
b3e0: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
b3f0: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
b400: 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c  a(ctx.pVdbeFunc,
b410: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70   pOp->p1);.    p
b420: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
b430: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
b440: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  ;.    pOp->p4typ
b450: 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b  e = P4_VDBEFUNC;
b460: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64 62 2d 3e  .  }..  if( db->
b470: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
b480: 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75      /* Even thou
b490: 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61  gh a malloc() ha
b4a0: 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d  s failed, the im
b4b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
b4c0: 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20  the.    ** user 
b4d0: 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  function may hav
b4e0: 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69  e called an sqli
b4f0: 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29  te3_result_XXX()
b500: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a   function.    **
b510: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c   to return a val
b520: 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ue. The followin
b530: 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20  g call releases 
b540: 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20  any resources.  
b550: 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20    ** associated 
b560: 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75  with such a valu
b570: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  e..    */.    sq
b580: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
b590: 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20  ase(&ctx.s);.   
b5a0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b5b0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  }..  /* If the f
b5c0: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
b5d0: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
b5e0: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
b5f0: 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
b600: 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
b610: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
b620: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
b630: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
b640: 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
b650: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
b660: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
b670: 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
b680: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b690: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
b6a0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
b6b0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
b6c0: 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ctx.s, encoding)
b6d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
b6e0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74  emMove(pOut, &ct
b6f0: 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  x.s);.  if( sqli
b700: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
b710: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  (pOut) ){.    go
b720: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b730: 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65 20  .#if 0.  /* The 
b740: 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  app-defined func
b750: 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f  tion has done so
b760: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73 20  mething that as 
b770: 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a 2a  caused this.  **
b780: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
b790: 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73 20  pire.  (Perhaps 
b7a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  the function cal
b7b0: 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65 63  led sqlite3_exec
b7c0: 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 43  ().  ** with a C
b7d0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
b7e0: 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69  ement.).  */.  i
b7f0: 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 20  f( p->expired ) 
b800: 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
b810: 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45 47  T;.#endif..  REG
b820: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b830: 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
b840: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
b850: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
b860: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b870: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
b880: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
b890: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
b8a0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b8b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b8c0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b8d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8e0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b8f0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b900: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b910: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b920: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
b930: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b940: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
b950: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
b960: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b970: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b980: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b990: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b9a0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b9b0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b9c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b9d0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b9e0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
b9f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
ba00: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
ba10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ba20: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
ba30: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
ba40: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
ba50: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
ba60: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
ba70: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
ba80: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
ba90: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
baa0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
bab0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
bac0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
bad0: 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74  code: ShiftRight
bae0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
baf0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
bb00: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
bb10: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
bb20: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
bb30: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
bb40: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
bb50: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
bb60: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
bb70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
bb80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
bb90: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
bba0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
bbb0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
bbc0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
bbf0: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
bc00: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
bc10: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
bc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bc30: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
bc40: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bc50: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
bc60: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
bc70: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
bc80: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
bc90: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
bca0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
bcb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bcc0: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
bcd0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bce0: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
bcf0: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
bd00: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
bd10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
bd20: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
bd30: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
bd40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
bd50: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
bd60: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
bd70: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
bd80: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
bd90: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
bda0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
bdb0: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
bdc0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
bdd0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
bde0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
bdf0: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
be00: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
be10: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
be20: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
be30: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
be40: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
be50: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
be60: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
be70: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
be80: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
be90: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
bea0: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
beb0: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
bec0: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
bed0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
bee0: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
bef0: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
bf00: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
bf10: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
bf20: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
bf30: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
bf40: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
bf50: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
bf60: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
bf70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
bf80: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
bf90: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
bfa0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
bfb0: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
bfc0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
bfd0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
bfe0: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
bff0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
c000: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
c010: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
c020: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
c030: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
c040: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
c050: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
c060: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
c070: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
c080: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
c090: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
c0a0: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
c0b0: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
c0c0: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
c0d0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
c0e0: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
c0f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
c100: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
c110: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c120: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
c130: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c140: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
c150: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
c160: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
c170: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
c180: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
c190: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
c1a0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
c1b0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
c1c0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
c1d0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
c1e0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
c1f0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
c200: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
c210: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
c220: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c230: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
c240: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
c250: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
c260: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
c270: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
c280: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
c290: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c2a0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
c2b0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
c2c0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c2d0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c2e0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
c2f0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
c300: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
c310: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
c320: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
c330: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
c340: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
c350: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
c360: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
c370: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
c380: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
c390: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
c3a0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
c3b0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
c3c0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
c3d0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c3e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c3f0: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
c400: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c410: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
c420: 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ing);.  if( (pIn
c430: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c440: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  nt)==0 ){.    if
c450: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
c460: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
c470: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
c480: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
c490: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
c4a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d  else{.      pc =
c4b0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
c4c0: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
c4d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c4e0: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
c4f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c500: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c510: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
c520: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
c530: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
c540: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
c550: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
c560: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
c570: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
c580: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
c590: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
c5a0: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
c5b0: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
c5c0: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
c5d0: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
c5e0: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
c5f0: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
c600: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
c610: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
c620: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
c630: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
c640: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
c650: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
c660: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
c670: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
c680: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6a0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
c6b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c6c0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
c6d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
c6e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c6f0: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
c700: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
c710: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
c720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
c730: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
c740: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
c750: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c760: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c770: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
c780: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c790: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c7a0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c7b0: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
c7c0: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c7d0: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
c7e0: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
c7f0: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
c800: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
c810: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
c820: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
c830: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
c840: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
c850: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
c860: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
c870: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c8a0: 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a  TO_TEXT, in1 */.
c8b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c8c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
c8d0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
c8e0: 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In1);.  if( pIn1
c8f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c900: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73  ll ) break;.  as
c910: 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28  sert( MEM_Str==(
c920: 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a  MEM_Blob>>3) );.
c930: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d    pIn1->flags |=
c940: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45   (pIn1->flags&ME
c950: 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70  M_Blob)>>3;.  ap
c960: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
c970: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
c980: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
c990: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
c9a0: 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28  pIn1);.  assert(
c9b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c9c0: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
c9d0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
c9e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c9f0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
ca00: 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a  l|MEM_Blob|MEM_Z
ca10: 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ero);.  UPDATE_M
ca20: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
ca30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ca40: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62  * Opcode: ToBlob
ca50: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
ca60: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
ca70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
ca80: 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a   to be a BLOB..*
ca90: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
caa0: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
cab0: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
cac0: 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69  g first..** Stri
cad0: 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72  ngs are simply r
cae0: 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20  einterpreted as 
caf0: 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68  blobs with no ch
cb00: 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75  ange.** to the u
cb10: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a  nderlying data..
cb20: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
cb30: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
cb40: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
cb50: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
cb60: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
cb70: 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  ToBlob: {       
cb80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cb90: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42  me as TK_TO_BLOB
cba0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
cbb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cbc0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
cbd0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
cbe0: 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70   break;.  if( (p
cbf0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cc00: 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
cc10: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
cc20: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
cc30: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
cc40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
cc50: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
cc60: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
cc70: 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65  Failed );.    Me
cc80: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
cc90: 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  1, MEM_Blob);.  
cca0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d  }else{.    pIn1-
ccb0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
ccc0: 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c  TypeMask&~MEM_Bl
ccd0: 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ob);.  }.  UPDAT
cce0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
ccf0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
cd00: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e  ../* Opcode: ToN
cd10: 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20  umeric P1 * * * 
cd20: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
cd30: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cd40: 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d  ter P1 to be num
cd50: 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a  eric (either an.
cd60: 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  ** integer or a 
cd70: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e  floating-point n
cd80: 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68  umber.).** If th
cd90: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
cda0: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
cdb0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
cdc0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
cdd0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
cde0: 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64  () or atof() and
cdf0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
ce00: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a  uch conversion .
ce10: 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  ** is possible..
ce20: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
ce30: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
ce40: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
ce50: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
ce60: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
ce70: 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20  ToNumeric: {    
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e   same as TK_TO_N
cea0: 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20  UMERIC, in1 */. 
ceb0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cec0: 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p1];.  sqlite
ced0: 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79  3VdbeMemNumerify
cee0: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
cef0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
cf00: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
cf10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49  ../* Opcode: ToI
cf20: 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nt P1 * * * *.**
cf30: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
cf40: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cf50: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
cf60: 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20  ger.  If.** The 
cf70: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
cf80: 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  ly a real number
cf90: 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74  , drop its fract
cfa0: 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49  ional part..** I
cfb0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
cfc0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
cfd0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
cfe0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
cff0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
d000: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
d010: 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f  nd store 0 if no
d020: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
d030: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
d040: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d050: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d060: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d070: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d080: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d090: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
d0a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d0b0: 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e  as TK_TO_INT, in
d0c0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d0d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d0e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d0f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
d100: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d110: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d120: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
d130: 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ak;.}..#if !defi
d140: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
d150: 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  CAST) && !define
d160: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
d170: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a  OATING_POINT)./*
d180: 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20   Opcode: ToReal 
d190: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d1a0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d1b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d1c0: 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  to be a floating
d1d0: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a   point number..*
d1e0: 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69  * If The value i
d1f0: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69  s currently an i
d200: 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20  nteger, convert 
d210: 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  it..** If the va
d220: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
d230: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
d240: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
d250: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
d260: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
d270: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
d280: 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20   0.0 if no such 
d290: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
d2a0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
d2b0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d2c0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d2d0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d2e0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d2f0: 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20  case OP_ToReal: 
d300: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d310: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d320: 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f  _TO_REAL, in1 */
d330: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d340: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d350: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d360: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49  pIn1);.  if( (pI
d370: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d380: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
d390: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
d3a0: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
d3b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
d3c0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
d3d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29  QLITE_OMIT_CAST)
d3e0: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
d3f0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d400: 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20  G_POINT) */../* 
d410: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
d420: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d430: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
d440: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
d450: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
d460: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
d470: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
d480: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
d490: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
d4a0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
d4b0: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
d4c0: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
d4d0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
d4e0: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
d4f0: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
d500: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
d510: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
d520: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
d530: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
d540: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
d550: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
d560: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
d570: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
d580: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
d590: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
d5a0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
d5b0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
d5c0: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
d5d0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
d5e0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
d5f0: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
d600: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
d610: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
d620: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
d630: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
d640: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
d650: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
d660: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
d670: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
d680: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
d690: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
d6a0: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
d6b0: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
d6c0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d6d0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
d6e0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
d6f0: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
d700: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
d710: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
d720: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
d730: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
d740: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
d750: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
d760: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
d770: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
d780: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
d790: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
d7a0: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
d7b0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
d7c0: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
d7d0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
d7e0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
d7f0: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
d800: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
d810: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
d820: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
d830: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
d840: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
d850: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
d860: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
d870: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
d880: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
d890: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
d8a0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
d8b0: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
d8c0: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
d8d0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
d8e0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
d8f0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
d900: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
d910: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
d920: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
d930: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
d940: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d950: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
d960: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
d970: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
d980: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
d990: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
d9a0: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
d9b0: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
d9c0: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
d9d0: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
d9e0: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
d9f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
da00: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e   If the SQLITE_N
da10: 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65 74  ULLEQ bit is set
da20: 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c   in P5, then NUL
da30: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
da40: 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c  sidered.** equal
da50: 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c   to one another,
da60: 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74   provided that t
da70: 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hey do not have 
da80: 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65  their MEM_Cleare
da90: 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f  d.** bit set..*/
daa0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
dab0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
dac0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
dad0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
dae0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
daf0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
db00: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
db10: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
db20: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
db30: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
db40: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
db50: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
db60: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
db70: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
db80: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
db90: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
dba0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
dbb0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
dbc0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
dbd0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
dbe0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
dbf0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
dc00: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
dc10: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
dc20: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
dc30: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
dc40: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
dc50: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
dc60: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
dc70: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dc80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
dc90: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
dca0: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
dcb0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
dcc0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
dcd0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
dce0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
dcf0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
dd00: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
dd10: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
dd20: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
dd30: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
dd40: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
dd50: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
dd60: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
dd70: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
dd80: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
dd90: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
dda0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
ddb0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
ddc0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
ddd0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
dde0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
ddf0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
de00: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
de10: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
de20: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
de30: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
de40: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
de50: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
de60: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
de70: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
de80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
de90: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
dea0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
deb0: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
dec0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
ded0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
dee0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
def0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
df00: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
df10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
df20: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
df30: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
df40: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
df50: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
df60: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
df70: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
df80: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
df90: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
dfa0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
dfb0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
dfc0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
dfd0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
dfe0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
dff0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
e000: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
e010: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
e020: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e030: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e040: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e050: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e060: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
e070: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
e080: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
e090: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
e0a0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e0b0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e0c0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e0d0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e0e0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e0f0: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
e100: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
e110: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e120: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e130: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e140: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e150: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e160: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
e170: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
e180: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
e190: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
e1a0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
e1b0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e1c0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e1d0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
e1e0: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
e1f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
e200: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
e210: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e230: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
e240: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e250: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e270: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
e280: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e290: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
e2a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e2b0: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
e2c0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e2d0: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
e2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e2f0: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
e300: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e310: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
e320: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e330: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
e340: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
e350: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
e360: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
e370: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
e380: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
e390: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
e3a0: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
e3b0: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
e3c0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
e3d0: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
e3e0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
e3f0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
e400: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
e410: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
e420: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
e430: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
e440: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
e450: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
e460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
e470: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
e480: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  p3];.  flags1 = 
e490: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66  pIn1->flags;.  f
e4a0: 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
e4b0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
e4c0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
e4d0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
e4e0: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
e4f0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
e500: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
e510: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
e520: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
e530: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e540: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
e550: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
e560: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
e570: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
e580: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
e590: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
e5a0: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
e5b0: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
e5c0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
e5d0: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
e5e0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
e5f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
e600: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
e610: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
e620: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
e630: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43   (flags1 & MEM_C
e640: 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20  leared)==0 );.  
e650: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
e660: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
e670: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
e680: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
e690: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
e6a0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20  M_Cleared)==0.  
e6b0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
e6c0: 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75  es = 0;  /* Resu
e6d0: 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  lts are equal */
e6e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e6f0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
e700: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e  /* Results are n
e710: 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
e720: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
e730: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
e740: 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61  ULLEQ is clear a
e750: 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  nd at least one 
e760: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
e770: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74  .      ** then t
e780: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
e790: 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20  ays NULL..      
e7a0: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
e7b0: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
e7c0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
e7d0: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20  t is set..      
e7e0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  */.      if( pOp
e7f0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
e800: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20  OREP2 ){.       
e810: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
e820: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
e830: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e840: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
e850: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
e860: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
e870: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
e880: 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  se if( pOp->p5 &
e890: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e8a0: 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  LL ){.        pc
e8b0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
e8c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
e8d0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
e8e0: 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
e8f0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e900: 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
e910: 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
e920: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
e930: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
e940: 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
e950: 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  y ){.      apply
e960: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
e970: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
e980: 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  g);.      applyA
e990: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66  ffinity(pIn3, af
e9a0: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e9b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  );.      if( db-
e9c0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
e9d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
e9e0: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
e9f0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
ea00: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
ea10: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
ea20: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
ea30: 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  n1);.    ExpandB
ea40: 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72  lob(pIn3);.    r
ea50: 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
ea60: 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
ea70: 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
ea80: 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28  );.  }.  switch(
ea90: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
eaa0: 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
eab0: 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b     res = res==0;
eac0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ead0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72  case OP_Ne:    r
eae0: 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20  es = res!=0;    
eaf0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
eb00: 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d   OP_Lt:    res =
eb10: 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65   res<0;      bre
eb20: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
eb30: 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Le:    res = res
eb40: 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  <=0;     break;.
eb50: 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20      case OP_Gt: 
eb60: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20     res = res>0; 
eb70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
eb80: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
eb90: 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  es = res>=0;    
eba0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
ebb0: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
ebc0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
ebd0: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
ebe0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65  pOp->p2];.    me
ebf0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
ec00: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d  , pOut);.    Mem
ec10: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
ec20: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
ec30: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b  pOut->u.i = res;
ec40: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
ec50: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
ec60: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
ec70: 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
ec80: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a  pOp->p2-1;.  }..
ec90: 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
eca0: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
ecb0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
ecc0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
ecd0: 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d  ters. */.  pIn1-
ece0: 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e  >flags = (pIn1->
ecf0: 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d  flags&~MEM_TypeM
ed00: 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d  ask) | (flags1&M
ed10: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
ed20: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn3->flags = (p
ed30: 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In3->flags&~MEM_
ed40: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
ed50: 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs3&MEM_TypeMask
ed60: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ed70: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
ed80: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
ed90: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
eda0: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
edb0: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
edc0: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
edd0: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
ede0: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
edf0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
ee00: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
ee10: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
ee20: 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
ee30: 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
ee40: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
ee50: 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
ee60: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
ee70: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
ee80: 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
ee90: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
eea0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
eeb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
eec0: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
eed0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
eee0: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
eef0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
ef00: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
ef10: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
ef20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ef30: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
ef40: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ef50: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
ef60: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
ef70: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
ef80: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
ef90: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
efa0: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
efb0: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
efc0: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
efd0: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
efe0: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
eff0: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
f000: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
f010: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
f020: 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
f030: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f040: 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
f050: 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
f060: 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
f070: 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
f080: 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
f090: 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
f0a0: 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
f0b0: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
f0c0: 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
f0d0: 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
f0e0: 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
f0f0: 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
f100: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
f110: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
f120: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
f130: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
f140: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
f150: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
f160: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
f170: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
f180: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
f190: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
f1a0: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
f1b0: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
f1c0: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
f1d0: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
f1e0: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
f1f0: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
f200: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
f210: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
f220: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
f230: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
f240: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
f250: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
f260: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
f270: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
f280: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
f290: 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
f2a0: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
f2b0: 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
f2c0: 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
f2d0: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
f2e0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f2f0: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
f300: 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
f310: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
f320: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
f330: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
f340: 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
f350: 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
f360: 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
f370: 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
f380: 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
f390: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
f3a0: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
f3b0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
f3c0: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
f3d0: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
f3e0: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
f3f0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
f400: 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
f410: 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
f420: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
f430: 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
f440: 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
f450: 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
f460: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
f470: 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d  1>0 && p1+mx<=p-
f480: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61  >nMem+1 );.    a
f490: 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
f4a0: 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  2+mx<=p->nMem+1 
f4b0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f4c0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
f4d0: 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p1+n<=p->nMem+1 
f4e0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
f4f0: 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e  2>0 && p2+n<=p->
f500: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  nMem+1 );.  }.#e
f510: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
f520: 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
f530: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
f540: 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
f550: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
f560: 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
f570: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
f580: 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
f590: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
f5a0: 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
f5b0: 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
f5c0: 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
f5d0: 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
f5e0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
f5f0: 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
f600: 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
f610: 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
f620: 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
f630: 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
f640: 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
f650: 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
f660: 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
f670: 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
f680: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
f690: 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
f6a0: 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
f6b0: 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
f6c0: 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
f6d0: 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
f6e0: 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
f6f0: 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
f700: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
f710: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
f720: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f730: 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
f740: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
f750: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
f760: 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
f770: 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
f780: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
f790: 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
f7a0: 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
f7b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
f7c0: 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
f7d0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
f7e0: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
f7f0: 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
f800: 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
f810: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
f820: 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
f830: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
f840: 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
f850: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
f860: 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69  1 - 1;.  }else i
f870: 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
f880: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
f890: 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
f8a0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
f8b0: 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  3 - 1;.  }.  bre
f8c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f8d0: 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
f8e0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
f8f0: 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
f900: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
f910: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f920: 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
f930: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
f940: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
f950: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
f960: 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
f970: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
f980: 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
f990: 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
f9a0: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
f9b0: 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
f9c0: 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
f9d0: 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
f9e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
f9f0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
fa00: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
fa10: 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
fa20: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
fa30: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
fa40: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
fa50: 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
fa60: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
fa70: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
fa80: 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
fa90: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
faa0: 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
fab0: 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
fac0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
fad0: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
fae0: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
faf0: 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
fb00: 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
fb10: 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
fb20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fb30: 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
fb40: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
fb50: 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
fb60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fb70: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
fb80: 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
fb90: 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
fba0: 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
fbb0: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
fbc0: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
fbd0: 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
fbe0: 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
fbf0: 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
fc00: 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
fc10: 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  LL */..  pIn1 = 
fc20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
fc30: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
fc40: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
fc50: 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
fc60: 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
fc70: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
fc80: 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
fc90: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
fca0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
fcb0: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
fcc0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
fcd0: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
fce0: 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
fcf0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
fd00: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
fd10: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
fd20: 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
fd30: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
fd40: 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
fd50: 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
fd60: 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
fd70: 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
fd80: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
fd90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
fda0: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
fdb0: 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
fdc0: 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
fdd0: 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
fde0: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
fdf0: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
fe00: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
fe10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
fe20: 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
fe30: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
fe40: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
fe50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
fe60: 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
fe70: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
fe80: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
fe90: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
fea0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
feb0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
fec0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
fed0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fee0: 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
fef0: 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
ff00: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
ff10: 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
ff20: 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
ff30: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ff40: 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
ff50: 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
ff60: 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
ff70: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
ffa0: 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
ffb0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ffc0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
ffd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
ffe0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
fff0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10000 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
10010 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
10020 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10030 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10040 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
10050 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10060 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
10070 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10080 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
10090 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
100a0 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
100b0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
100c0 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
100d0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
100e0 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
100f0 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
10100 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
10110 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
10120 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
10130 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
10140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
10150 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10160 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10170 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
10180 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
10190 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
101a0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
101b0 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
101c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
101d0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
101e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
101f0 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
10200 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
10210 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
10220 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49  t, ~sqlite3VdbeI
10230 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
10240 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10250 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
10260 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
10270 2a 20 43 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e  * Check if OP_On
10280 63 65 20 66 6c 61 67 20 50 31 20 69 73 20 73 65  ce flag P1 is se
10290 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  t. If so, jump t
102a0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
102b0 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20  . Otherwise,.** 
102c0 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
102d0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
102e0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
102f0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
10300 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
10310 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
10320 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10330 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  p1<p->nOnceFlag 
10340 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63  );.  if( p->aOnc
10350 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29  eFlag[pOp->p1] )
10360 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10370 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
10380 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
10390 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
103a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
103b0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
103c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
103d0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
103e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
103f0 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
10400 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10410 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
10420 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
10430 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
10440 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10450 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10460 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10470 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
10480 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
10490 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
104a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
104b0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
104c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
104d0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
104e0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
104f0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
10500 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
10510 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
10520 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
10530 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
10540 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
10550 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f  mp if P3 is zero
10560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
10590 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
105a0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
105b0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
105c0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
105d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
105e0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
105f0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10600 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
10610 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
10620 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
10630 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
10640 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10650 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
10660 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
10670 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
10680 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
10690 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
106a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
106b0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
106c0 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
106d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
106e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
106f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
10700 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
10710 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10720 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10730 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10740 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
10750 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
10760 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10770 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
10780 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
10790 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
107a0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
107b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
107c0 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
107d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
107e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
107f0 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
10800 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
10810 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
10820 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10830 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
10840 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
10850 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
10860 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10870 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
10880 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
10890 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
108a0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
108b0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
108c0 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
108d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
108e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
108f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
10900 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
10910 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  5.**.** Interpre
10920 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
10930 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
10940 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
10950 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
10960 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
10970 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
10980 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
10990 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
109a0 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
109b0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
109c0 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
109d0 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
109e0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
109f0 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
10a00 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
10a10 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
10a20 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
10a30 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
10a40 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
10a50 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
10a60 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
10a70 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
10a80 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
10a90 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
10aa0 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
10ab0 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
10ac0 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
10ad0 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
10ae0 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
10af0 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
10b00 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
10b10 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
10b20 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
10b30 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
10b40 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
10b50 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
10b60 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
10b70 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
10b80 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
10b90 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
10ba0 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
10bb0 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
10bc0 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
10bd0 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
10be0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
10bf0 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
10c00 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
10c10 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
10c20 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
10c30 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
10c40 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
10c50 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
10c60 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
10c70 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
10c80 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 when.** the 
10c90 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
10ca0 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
10cb0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
10cc0 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
10cd0 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
10ce0 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
10cf0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
10d00 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
10d10 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
10d20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
10d30 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
10d40 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
10d50 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
10d60 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
10d70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
10d80 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65   u32 payloadSize
10d90 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
10da0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
10db0 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61  cord */.  i64 pa
10dc0 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20  yloadSize64; /* 
10dd0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
10de0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
10df0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
10e00 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75        /* P1 valu
10e10 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20  e of the opcode 
10e20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
10e30 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
10e40 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
10e50 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
10e60 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
10e70 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
10e80 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b  */.  char *zRec;
10e90 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
10ea0 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72  er to complete r
10eb0 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20  ecord-data */.  
10ec0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
10ed0 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
10ee0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
10ef0 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f  *aType;        /
10f00 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73  * aType[i] holds
10f10 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
10f20 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f  e of the i-th co
10f30 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61  lumn */.  u32 *a
10f40 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
10f50 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
10f60 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
10f70 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
10f80 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  olumn */.  int n
10f90 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
10fa0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
10fb0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
10fc0 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
10fd0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
10fe0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
10ff0 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
11000 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
11010 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
11020 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
11030 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ter */.  char *z
11040 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50  Data;       /* P
11050 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
11060 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
11070 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
11080 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
11090 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
110a0 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
110b0 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
110c0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
110d0 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
110e0 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
110f0 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20  .  u8 *zIdx;    
11100 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
11110 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  nto header */.  
11120 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20  u8 *zEndHdr;    
11130 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
11140 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
11150 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
11160 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
11170 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
11180 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
11190 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20    u32 szField;  
111a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
111b0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63  f bytes in the c
111c0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c  ontent of a fiel
111d0 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72  d */.  int szHdr
111e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  ;         /* Siz
111f0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
11200 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74  size field at st
11210 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f  art of record */
11220 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20  .  int avail;   
11230 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11240 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69  of bytes of avai
11250 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20  lable data */.  
11260 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
11270 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
11280 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
11290 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
112a0 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
112b0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
112c0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
112d0 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  /...  p1 = pOp->
112e0 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
112f0 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20  p2;.  pC = 0;.  
11300 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
11310 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
11320 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e    assert( p1<p->
11330 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
11340 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
11350 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
11360 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
11370 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
11380 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
11390 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
113a0 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20  zRec = 0;..  /* 
113b0 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20  This block sets 
113c0 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79  the variable pay
113d0 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74  loadSize to be t
113e0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
113f0 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e  of.  ** bytes in
11400 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a   the record..  *
11410 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73  *.  ** zRec is s
11420 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d  et to be the com
11430 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68  plete text of th
11440 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69  e record if it i
11450 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a  s available..  *
11460 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  * The complete r
11470 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c  ecord text is al
11480 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ways available f
11490 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  or pseudo-tables
114a0 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63  .  ** If the rec
114b0 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
114c0 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63   a cursor, the c
114d0 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
114e0 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62  ext.  ** might b
114f0 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
11500 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  he  pC->aRow cac
11510 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74  he.  Or it might
11520 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66   not be..  ** If
11530 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61   the data is una
11540 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20  vailable,  zRec 
11550 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  is set to NULL..
11560 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73    **.  ** We als
11570 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  o compute the nu
11580 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11590 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  in the record.  
115a0 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a  For cursors,.  *
115b0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
115c0 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65  columns is store
115d0 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72  d in the VdbeCur
115e0 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65  sor.nField eleme
115f0 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20  nt..  */.  pC = 
11600 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20  p->apCsr[p1];.  
11610 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
11620 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11630 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
11640 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
11650 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
11660 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72  ;.#endif.  pCrsr
11670 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
11680 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
11690 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  {.    /* The rec
116a0 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
116b0 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20   a B-Tree */.   
116c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
116d0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
116e0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
116f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
11700 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
11710 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
11720 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
11730 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
11740 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
11750 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
11760 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  r ){.      paylo
11770 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79  adSize = pC->pay
11780 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
11790 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43  zRec = (char*)pC
117a0 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73  ->aRow;.    }els
117b0 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65  e if( pC->isInde
117c0 78 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  x ){.      asser
117d0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
117e0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
117f0 73 72 29 20 29 3b 0a 20 20 20 20 20 20 56 56 41  sr) );.      VVA
11800 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
11810 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
11820 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
11830 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73  ize64);.      as
11840 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
11850 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65  _OK );   /* True
11860 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
11870 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
11880 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f  above */.      /
11890 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  * sqlite3BtreePa
118a0 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65  rseCellPtr() use
118b0 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20  s getVarint32() 
118c0 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20  to extract the. 
118d0 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20       ** payload 
118e0 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69  size, so it is i
118f0 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61  mpossible for pa
11900 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62  yloadSize64 to b
11910 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
11920 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
11930 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
11940 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
11950 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
11960 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
11970 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70  ize64 );.      p
11980 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
11990 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
119a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
119b0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
119c0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
119d0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
119e0 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
119f0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
11a00 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
11a10 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
11a20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
11a30 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
11a40 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
11a50 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
11a60 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 41 4c  }.  }else if( AL
11a70 57 41 59 53 28 70 43 2d 3e 70 73 65 75 64 6f 54  WAYS(pC->pseudoT
11a80 61 62 6c 65 52 65 67 3e 30 29 20 29 7b 0a 20 20  ableReg>0) ){.  
11a90 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
11aa0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
11ab0 67 5d 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  g];.    if( pC->
11ac0 6d 75 6c 74 69 50 73 65 75 64 6f 20 29 7b 0a 20  multiPseudo ){. 
11ad0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11ae0 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
11af0 44 65 73 74 2c 20 70 52 65 67 2b 70 32 2c 20 4d  Dest, pReg+p2, M
11b00 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 20  EM_Ephem);.     
11b10 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
11b20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 67 6f  pDest);.      go
11b30 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
11b40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
11b50 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
11b60 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
11b70 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11b80 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
11b90 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
11ba0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65  pReg->n;.    zRe
11bb0 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  c = pReg->z;.   
11bc0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
11bd0 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c   = (pOp->p5&OPFL
11be0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f  AG_CLEARCACHE) ?
11bf0 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70   CACHE_STALE : p
11c00 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
11c10 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53  assert( payloadS
11c20 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d  ize==0 || zRec!=
11c30 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0 );.  }else{.  
11c40 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68    /* Consider th
11c50 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c  e row to be NULL
11c60 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53   */.    payloadS
11c70 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20  ize = 0;.  }..  
11c80 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a  /* If payloadSiz
11c90 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73  e is 0, then jus
11ca0 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20  t store a NULL. 
11cb0 20 54 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e   This can happen
11cc0 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a   because of.  **
11cd0 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61   nullRow or beca
11ce0 75 73 65 20 6f 66 20 61 20 63 6f 72 72 75 70 74  use of a corrupt
11cf0 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20   database. */.  
11d00 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  if( payloadSize=
11d10 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =0 ){.    MemSet
11d20 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
11d30 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67  MEM_Null);.    g
11d40 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
11d50 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  t;.  }.  assert(
11d60 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
11d70 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
11d80 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79  >=0 );.  if( pay
11d90 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
11da0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
11db0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
11dc0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
11dd0 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  big;.  }..  nFie
11de0 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  ld = pC->nField;
11df0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
11e00 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
11e10 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
11e20 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
11e30 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
11e40 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
11e50 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
11e60 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
11e70 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
11e80 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
11e90 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
11ea0 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
11eb0 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
11ec0 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
11ed0 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
11ee0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11ef0 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20  ssert(aType);.  
11f00 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20    avail = 0;.   
11f10 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61   pC->aOffset = a
11f20 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b  Offset = &aType[
11f30 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d  nField];.    pC-
11f40 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
11f50 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
11f60 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
11f70 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a  = p->cacheCtr;..
11f80 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75      /* Figure ou
11f90 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73  t how many bytes
11fa0 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61 64   are in the head
11fb0 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52  er */.    if( zR
11fc0 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74  ec ){.      zDat
11fd0 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65  a = zRec;.    }e
11fe0 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70  lse{.      if( p
11ff0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
12000 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
12010 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
12020 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
12030 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
12040 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
12050 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
12060 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
12070 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
12080 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
12090 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68    /* If KeyFetch
120a0 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d  ()/DataFetch() m
120b0 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74 68  anaged to get th
120c0 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
120d0 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20  ,.      ** save 
120e0 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74  the payload in t
120f0 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68  he pC->aRow cach
12100 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61  e.  That will sa
12110 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20  ve us from.     
12120 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61   ** having to ma
12130 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61  ke additional ca
12140 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68 65  lls to fetch the
12150 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e   content portion
12160 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
12170 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
12180 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
12190 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20  avail>=0 );.    
121a0 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
121b0 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
121c0 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20  ){.        zRec 
121d0 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20  = zData;.       
121e0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
121f0 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65  )zData;.      }e
12200 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
12210 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
12220 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
12230 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  The following as
12240 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20  sert is true in 
12250 61 6c 6c 20 63 61 73 65 73 20 65 78 63 65 70 74  all cases except
12260 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65   when.    ** the
12270 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
12280 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65  as been corrupte
12290 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d externally..  
122a0 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20    **    assert( 
122b0 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c  zRec!=0 || avail
122c0 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c  >=payloadSize ||
122d0 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a   avail>=9 ); */.
122e0 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56      szHdr = getV
122f0 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61  arint32((u8*)zDa
12300 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20  ta, offset);..  
12310 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
12320 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12330 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
12340 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
12350 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
12360 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
12370 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
12380 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12390 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
123a0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
123b0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
123c0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
123d0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
123e0 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
123f0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
12400 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
12410 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
12420 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
12430 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
12440 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
12450 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
12460 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
12470 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
12480 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
12490 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
124a0 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
124b0 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
124c0 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
124d0 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
124e0 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
124f0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
12500 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
12510 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
12520 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
12530 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12540 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
12550 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12560 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75   }..    /* Compu
12570 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75  te in len the nu
12580 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
12590 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f   data we need to
125a0 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20   read in order. 
125b0 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69     ** to get nFi
125c0 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e  eld type values.
125d0 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75    offset is an u
125e0 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
125f0 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20  is.  But.    ** 
12600 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20  nField might be 
12610 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65  significantly le
12620 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65  ss than the true
12630 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
12640 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ns.    ** in the
12650 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74   table, and in t
12660 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65  hat case, 5*nFie
12670 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d  ld+3 might be sm
12680 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65  aller than offse
12690 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e  t..    ** We wan
126a0 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65  t to minimize le
126b0 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69  n in order to li
126c0 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20  mit the size of 
126d0 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  the memory.    *
126e0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73  * allocation, es
126f0 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f  pecially if a co
12700 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
12710 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20 6f  ile has caused o
12720 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20  ffset.    ** to 
12730 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66  be oversized. Of
12740 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20  fset is limited 
12750 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20  to 98307 above. 
12760 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68 74   But 98307 might
12770 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78  .    ** still ex
12780 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f  ceed Robson memo
12790 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69  ry allocation li
127a0 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e  mits on some con
127b0 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20  figurations..   
127c0 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74   ** On systems t
127d0 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72  hat cannot toler
127e0 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  ate large memory
127f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46   allocations, nF
12800 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20  ield*5+3.    ** 
12810 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d  will likely be m
12820 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63  uch smaller sinc
12830 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69  e nField will li
12840 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61  kely be less tha
12850 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73  n.    ** 20 or s
12860 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65 73  o.  This insures
12870 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d   that Robson mem
12880 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
12890 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a  imits are.    **
128a0 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65 76   not exceeded ev
128b0 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64  en for corrupt d
128c0 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20  atabase files.. 
128d0 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20     */.    len = 
128e0 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20  nField*5 + 3;.  
128f0 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74    if( len > (int
12900 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20  )offset ) len = 
12910 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20  (int)offset;..  
12920 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63    /* The KeyFetc
12930 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68  h() or DataFetch
12940 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73  () above are fas
12950 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74  t and will get t
12960 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a  he entire.    **
12970 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
12980 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42  n most cases.  B
12990 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69  ut they will fai
129a0 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d  l to get the com
129b0 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63  plete.    ** rec
129c0 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68  ord header if th
129d0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
129e0 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20  does not fit on 
129f0 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20  a single page.  
12a00 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72    ** in the B-Tr
12a10 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68  ee.  When that h
12a20 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69  appens, use sqli
12a30 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
12a40 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20  ree() to.    ** 
12a50 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70  acquire the comp
12a60 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74  lete header text
12a70 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
12a80 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c   !zRec && avail<
12a90 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65  len ){.      sMe
12aa0 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  m.flags = 0;.   
12ab0 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a     sMem.db = 0;.
12ac0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12ad0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12ae0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e  ee(pCrsr, 0, len
12af0 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
12b00 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
12b10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
12b20 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
12b30 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
12b40 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
12b50 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
12b60 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
12b70 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e  (u8 *)&zData[len
12b80 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75  ];.    zIdx = (u
12b90 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72  8 *)&zData[szHdr
12ba0 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20  ];..    /* Scan 
12bb0 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75  the header and u
12bc0 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e  se it to fill in
12bd0 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64   the aType[] and
12be0 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a   aOffset[].    *
12bf0 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65  * arrays.  aType
12c00 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
12c10 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65   the type intege
12c20 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20  r for the i-th. 
12c30 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64     ** column and
12c40 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c   aOffset[i] will
12c50 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66   contain the off
12c60 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
12c70 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66  inning.    ** of
12c80 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74   the record to t
12c90 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
12ca0 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74  data for the i-t
12cb0 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a  h column.    */.
12cc0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
12cd0 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  Field; i++){.   
12ce0 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64     if( zIdx<zEnd
12cf0 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Hdr ){.        a
12d00 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73  Offset[i] = offs
12d10 65 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  et;.        if( 
12d20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a  zIdx[0]<0x80 ){.
12d30 20 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a 49            t = zI
12d40 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20  dx[0];.         
12d50 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20   zIdx++;.       
12d60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12d70 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74 65    zIdx += sqlite
12d80 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64  3GetVarint32(zId
12d90 78 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  x, &t);.        
12da0 7d 0a 20 20 20 20 20 20 20 20 61 54 79 70 65 5b  }.        aType[
12db0 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20  i] = t;.        
12dc0 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65  szField = sqlite
12dd0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
12de0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f  en(t);.        o
12df0 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64  ffset += szField
12e00 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66  ;.        if( of
12e10 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20  fset<szField ){ 
12e20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73   /* True if offs
12e30 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a  et overflows */.
12e40 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d            zIdx =
12e50 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f   &zEndHdr[1];  /
12e60 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f  * Forces SQLITE_
12e70 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62  CORRUPT return b
12e80 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20  elow */.        
12e90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
12ea0 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
12eb0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
12ec0 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
12ed0 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
12ee0 61 72 65 20 66 65 77 65 72 20 66 69 65 6c 64 73  are fewer fields
12ef0 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
12f00 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
12f10 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
12f20 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
12f30 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
12f40 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
12f50 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
12f60 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
12f70 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
12f80 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
12f90 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
12fa0 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
12fb0 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
12fc0 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  e the default va
12fd0 6c 75 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  lue.        ** f
12fe0 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
12ff0 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61  stead of deseria
13000 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66  lizing a value f
13010 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a  rom the record..
13020 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
13030 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
13040 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
13050 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13060 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
13070 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  );.    sMem.flag
13080 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20  s = MEM_Null;.. 
13090 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
130a0 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
130b0 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
130c0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
130d0 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20   header,.    ** 
130e0 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
130f0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
13100 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
13110 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
13120 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c  e.    ** record,
13130 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
13140 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
13150 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
13160 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
13170 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
13180 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
13190 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
131a0 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
131b0 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69  aling .    ** wi
131c0 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
131d0 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  abase..    */.  
131e0 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45    if( (zIdx > zE
131f0 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65  ndHdr) || (offse
13200 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29  t > payloadSize)
13210 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49  .         || (zI
13220 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dx==zEndHdr && o
13230 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69  ffset!=payloadSi
13240 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ze) ){.      rc 
13250 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
13260 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
13270 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13280 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13290 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
132a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20  information. If 
132b0 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e  aOffset[p2] is n
132c0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20  on-zero, then . 
132d0 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20   ** deserialize 
132e0 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  the value from t
132f0 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f  he record. If aO
13300 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72  ffset[p2] is zer
13310 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65  o,.  ** then the
13320 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
13330 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  h fields in the 
13340 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66  record to satisf
13350 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65  y the.  ** reque
13360 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  st.  In this cas
13370 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  e, set the value
13380 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69   NULL or to P4 i
13390 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70  f P4 is.  ** a p
133a0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20  ointer to a Mem 
133b0 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69  object..  */.  i
133c0 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29  f( aOffset[p2] )
133d0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
133e0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
133f0 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
13400 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
13410 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
13420 77 68 65 72 65 20 74 68 65 20 77 68 6f 6c 65 20  where the whole 
13430 72 6f 77 20 66 69 74 73 20 6f 6e 20 61 20 73 69  row fits on a si
13440 6e 67 6c 65 20 70 61 67 65 20 2a 2f 0a 20 20 20  ngle page */.   
13450 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73     VdbeMemReleas
13460 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  e(pDest);.      
13470 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13480 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63  lGet((u8 *)&zRec
13490 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61  [aOffset[p2]], a
134a0 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
134b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
134c0 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
134d0 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77  h happens only w
134e0 68 65 6e 20 74 68 65 20 72 6f 77 20 6f 76 65 72  hen the row over
134f0 66 6c 6f 77 73 20 6f 6e 74 6f 20 6d 75 6c 74 69  flows onto multi
13500 70 6c 65 20 70 61 67 65 73 20 2a 2f 0a 20 20 20  ple pages */.   
13510 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d     t = aType[p2]
13520 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
13530 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
13540 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
13550 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
13560 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32        && ((t>=12
13570 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c   && (t&1)==0) ||
13580 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
13590 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30  AG_TYPEOFARG)!=0
135a0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
135b0 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73     /* Content is
135c0 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20   irrelevant for 
135d0 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
135e0 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20  ction and for.  
135f0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e        ** the len
13600 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
13610 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20  if X is a blob. 
13620 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
13630 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 20  well use.       
13640 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   ** bogus conten
13650 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
13660 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72  ading content fr
13670 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77  om disk.  NULL w
13680 6f 72 6b 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  orks.        ** 
13690 66 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f  for text and blo
136a0 62 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69  b and whatever i
136b0 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64  s in the payload
136c0 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a  Size64 variable.
136d0 20 20 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20          ** will 
136e0 77 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68  work for everyth
136f0 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20  ing else. */.   
13700 20 20 20 20 20 7a 44 61 74 61 20 3d 20 74 3c 31       zData = t<1
13710 32 20 3f 20 28 63 68 61 72 2a 29 26 70 61 79 6c  2 ? (char*)&payl
13720 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20  oadSize64 : 0;. 
13730 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13740 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
13750 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
13760 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 73  en(t);.        s
13770 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
13780 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b  e(&sMem, pDest);
13790 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
137a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
137b0 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
137c0 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 20  fset[p2], len,  
137d0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 0a 20 20 20  pC->isIndex,.   
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20    &sMem);.      
13810 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
13820 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13830 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13840 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
13850 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73         zData = s
13860 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20  Mem.z;.      }. 
13870 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13880 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a  SerialGet((u8*)z
13890 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
138a0 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74  .    }.    pDest
138b0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
138c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
138d0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
138e0 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
138f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
13900 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
13910 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
13920 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
13930 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d  }else{.      Mem
13940 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
13950 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
13960 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66    }.  }..  /* If
13970 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
13980 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
13990 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
139a0 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71   (in the.  ** sq
139b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
139c0 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
139d0 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
139e0 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
139f0 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c  t.  ** dynamical
13a00 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
13a10 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70  ce over to the p
13a20 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a  Dest structure..
13a30 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e    ** This preven
13a40 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79  ts a memory copy
13a50 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65  ..  */.  if( sMe
13a60 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20  m.zMalloc ){.   
13a70 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
13a80 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
13a90 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
13aa0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
13ab0 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73  M_Dyn) );.    as
13ac0 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
13ad0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
13ae0 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44  |MEM_Str)) || pD
13af0 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
13b00 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
13b10 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65  gs &= ~(MEM_Ephe
13b20 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  m|MEM_Static);. 
13b30 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
13b40 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20  |= MEM_Term;.   
13b50 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d   pDest->z = sMem
13b60 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  .z;.    pDest->z
13b70 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d  Malloc = sMem.zM
13b80 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63  alloc;.  }..  rc
13b90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13ba0 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
13bb0 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  Dest);..op_colum
13bc0 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
13bd0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
13be0 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
13bf0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
13c00 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
13c10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
13c20 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
13c30 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  4 *.**.** Apply 
13c40 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
13c50 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
13c60 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
13c70 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
13c80 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
13c90 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
13ca0 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
13cb0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
13cc0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
13cd0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
13ce0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
13cf0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
13d00 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
13d10 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
13d20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
13d30 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
13d40 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
13d50 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
13d60 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
13d70 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
13d80 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
13d90 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
13da0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
13db0 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
13dc0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
13dd0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
13de0 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
13df0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
13e00 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
13e10 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13e20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
13e30 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
13e40 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
13e50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
13e60 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  1 <= &p->aMem[p-
13e70 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
13e80 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
13e90 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78  (pIn1) );.    Ex
13ea0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
13eb0 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
13ec0 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
13ed0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
13ee0 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
13ef0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
13f00 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
13f10 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
13f20 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
13f30 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
13f40 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
13f50 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
13f60 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
13f70 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
13f80 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
13f90 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
13fa0 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
13fb0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
13fc0 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
13fd0 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
13fe0 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
13ff0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
14000 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
14010 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
14020 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
14030 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
14040 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14050 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
14060 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
14070 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
14080 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
14090 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
140a0 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
140b0 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
140c0 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
140d0 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
140e0 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
140f0 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
14100 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
14110 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
14120 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
14130 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
14140 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
14150 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
14160 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
14170 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
14180 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
14190 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
141a0 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
141b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
141c0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
141d0 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
141e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
141f0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
14200 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
14210 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
14220 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14230 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
14240 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
14250 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
14260 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
14270 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
14280 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14290 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
142a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
142b0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
142c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
142d0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
142e0 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
142f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14300 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
14310 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
14320 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
14330 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
14340 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
14350 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
14360 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
14370 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
14380 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
14390 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
143a0 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
143b0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
143c0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
143d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
143e0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
143f0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
14400 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
14410 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
14420 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
14430 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14440 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
14450 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
14460 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
14470 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
14480 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
14490 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
144a0 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
144b0 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  rd[] */.  int le
144c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
144d0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
144e0 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
144f0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
14500 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
14510 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
14520 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
14530 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
14540 2a 2a 0a 20 20 2a 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14590 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
145a0 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
145b0 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
145c0 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
145d0 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
145e0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
145f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14630 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
14640 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
14650 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
14660 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
14670 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
14680 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
14690 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
146a0 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
146b0 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
146c0 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
146d0 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
146e0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
146f0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
14700 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14710 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
14720 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
14730 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
14740 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
14750 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
14760 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
14770 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14780 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
14790 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
147a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
147b0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
147c0 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
147d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
147e0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
147f0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
14800 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20    nZero = 0;    
14810 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14820 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
14830 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14840 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c  ecord */.  nFiel
14850 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  d = pOp->p1;.  z
14860 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
14870 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
14880 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d  nField>0 && pOp-
14890 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
148a0 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d  +nField<=p->nMem
148b0 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
148c0 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
148d0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
148e0 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
148f0 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
14900 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
14910 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
14920 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
14930 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
14940 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
14950 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
14960 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
14970 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
14980 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
14990 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
149a0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
149b0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
149c0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
149d0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
149e0 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
149f0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
14a00 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
14a10 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
14a20 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
14a30 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
14a40 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
14a50 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
14a60 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73   pRec++){.    as
14a70 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
14a80 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66  (pRec) );.    if
14a90 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
14aa0 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
14ab0 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69  ty(pRec, zAffini
14ac0 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c  ty[pRec-pData0],
14ad0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
14ae0 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  }.    if( pRec->
14af0 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26  flags&MEM_Zero &
14b00 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20  & pRec->n>0 ){. 
14b10 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14b20 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52  MemExpandBlob(pR
14b30 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ec);.    }.    s
14b40 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
14b50 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14b60 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
14b70 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d  rmat);.    len =
14b80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14b90 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c  alTypeLen(serial
14ba0 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74  _type);.    nDat
14bb0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48  a += len;.    nH
14bc0 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72  dr += sqlite3Var
14bd0 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
14be0 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
14bf0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
14c00 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ero ){.      /* 
14c10 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66  Only pure zero-f
14c20 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20  illed BLOBs can 
14c30 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73  be input to this
14c40 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a   Opcode..      *
14c50 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f  * We do not allo
14c60 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70  w blobs with a p
14c70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f  refix and a zero
14c80 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f  -filled tail. */
14c90 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20  .      nZero += 
14ca0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
14cb0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e     }else if( len
14cc0 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   ){.      nZero 
14cd0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  = 0;.    }.  }..
14ce0 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69    /* Add the ini
14cf0 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69  tial header vari
14d00 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65  nt and total the
14d10 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20   size */.  nHdr 
14d20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c  += nVarint = sql
14d30 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
14d40 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69  dr);.  if( nVari
14d50 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
14d60 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20  Len(nHdr) ){.   
14d70 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
14d80 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
14d90 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e  a-nZero;.  if( n
14da0 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
14db0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
14dc0 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
14dd0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
14de0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
14df0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14e00 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
14e10 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
14e20 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
14e30 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
14e40 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
14e50 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
14e60 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
14e70 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
14e80 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
14e90 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
14ea0 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
14eb0 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
14ec0 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f  Grow() could clo
14ed0 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
14ee0 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
14ef0 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  )..  */.  if( sq
14f00 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
14f10 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
14f20 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  e, 0) ){.    got
14f30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
14f40 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
14f50 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
14f60 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
14f70 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
14f80 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
14f90 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72  rd, nHdr);.  for
14fa0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
14fb0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
14fc0 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  +){.    serial_t
14fd0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
14fe0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
14ff0 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
15000 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
15010 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
15020 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
15030 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61  );      /* seria
15040 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20  l type */.  }.  
15050 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
15060 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
15070 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61  ec++){  /* seria
15080 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20  l data */.    i 
15090 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
150a0 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
150b0 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42  ord[i], (int)(nB
150c0 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c  yte-i), pRec,fil
150d0 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20  e_format);.  }. 
150e0 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74   assert( i==nByt
150f0 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  e );..  assert( 
15100 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
15110 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
15120 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
15130 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
15140 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
15150 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70  b | MEM_Dyn;.  p
15160 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20  Out->xDel = 0;. 
15170 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
15180 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
15190 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
151a0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
151b0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
151c0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
151d0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
151e0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
151f0 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
15200 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
15210 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
15220 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
15230 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
15240 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
15250 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
15260 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
15270 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
15280 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15290 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
152a0 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
152b0 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
152c0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
152d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
152e0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
152f0 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15300 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15310 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15320 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15330 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15340 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15350 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15360 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15370 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41  pCursor;.  if( A
15380 4c 57 41 59 53 28 70 43 72 73 72 29 20 29 7b 0a  LWAYS(pCrsr) ){.
15390 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
153a0 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
153b0 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65  , &nEntry);.  }e
153c0 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20  lse{.    nEntry 
153d0 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  = 0;.  }.  pOut-
153e0 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
153f0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
15400 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
15410 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
15420 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
15430 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
15440 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
15450 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
15460 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
15470 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
15480 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
15490 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
154a0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
154b0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
154c0 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
154d0 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
154e0 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
154f0 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15500 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
15510 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
15520 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
15550 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
15560 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
15590 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
155a0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
155b0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
155c0 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
155d0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
155e0 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
155f0 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
15600 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
15610 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
15620 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
15630 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
15640 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
15650 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
15660 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
15670 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
15680 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
15690 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
156a0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
156b0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
156c0 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
156d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
156e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
156f0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
15700 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
15710 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
15720 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
15730 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15740 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
15750 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
15760 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
15770 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
15780 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
15790 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
157a0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
157b0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72  {.    if( db->wr
157c0 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a  iteVdbeCnt>0 ){.
157d0 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
157e0 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
157f0 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
15800 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
15810 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
15820 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
15830 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
15840 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
15850 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
15860 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
15870 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
15880 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
15890 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
158a0 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  nt - ".        "
158b0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
158c0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
158d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
158e0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
158f0 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
15900 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
15910 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
15920 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
15930 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
15940 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
15950 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
15960 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
15970 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
15980 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
15990 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
159a0 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
159b0 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
159c0 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
159d0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
159e0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
159f0 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
15a00 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
15a10 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
15a20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
15a30 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
15a40 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
15a50 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
15a60 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
15a70 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
15a80 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
15a90 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
15aa0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
15ab0 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
15ae0 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
15af0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
15b00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15b10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
15b20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
15b30 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
15b40 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
15b50 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
15b60 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
15b70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
15b80 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  w(db, sizeof(Sav
15b90 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
15ba0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
15bb0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
15bc0 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
15bd0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
15be0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
15bf0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
15c00 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
15c10 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
15c20 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
15c30 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
15c40 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
15c50 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
15c60 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
15c70 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
15c80 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
15c90 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
15ca0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15cb0 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
15cc0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
15cd0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
15ce0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
15cf0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15d00 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
15d10 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20        }.    .   
15d20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
15d30 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
15d40 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
15d50 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
15d60 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
15d70 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
15d80 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
15d90 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
15da0 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
15db0 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
15dc0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
15dd0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  redCons;.      }
15de0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
15df0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
15e00 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
15e10 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
15e20 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
15e30 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
15e40 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
15e50 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
15e60 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
15e70 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
15e80 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
15e90 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
15ea0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
15eb0 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
15ec0 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
15ed0 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
15ee0 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
15ef0 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
15f00 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
15f10 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
15f20 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
15f30 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
15f40 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
15f50 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
15f60 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75  rMsg, db, "no su
15f70 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
15f80 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
15f90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
15fa0 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
15fb0 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43  ( db->writeVdbeC
15fc0 6e 74 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  nt>0 && p1==SAVE
15fd0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
15fe0 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
15ff0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
16000 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
16010 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
16020 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
16030 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
16040 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
16050 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
16060 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16070 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
16080 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72         "cannot r
16090 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
160a0 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
160b0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20  s in progress". 
160c0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
160d0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
160e0 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
160f0 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
16100 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
16110 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
16120 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
16130 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
16140 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
16150 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
16160 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
16170 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
16180 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
16190 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
161a0 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
161b0 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
161c0 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
161d0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
161e0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
161f0 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
16200 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
16210 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
16220 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
16230 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
16240 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
16250 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
16260 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
16270 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
16280 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
16290 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
162a0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
162b0 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
162c0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
162d0 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
162e0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
162f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
16300 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
16310 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16320 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
16330 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16340 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16350 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16360 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
16370 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
16380 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
16390 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
163a0 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
163b0 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
163c0 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
163d0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
163e0 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
163f0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
16400 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
16410 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
16420 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
16430 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
16440 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49  Db[ii].pBt, SQLI
16450 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20  TE_ABORT);.     
16460 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
16470 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
16480 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
16490 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
164a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
164b0 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
164c0 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
164d0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
164e0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
164f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
16500 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
16510 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
16520 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
16530 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
16540 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
16550 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62  _ROLLBACK && (db
16560 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49  ->flags&SQLITE_I
16570 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
16580 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
16590 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
165a0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
165b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
165c0 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
165d0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
165e0 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
165f0 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
16600 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
16610 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
16620 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
16630 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
16640 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
16650 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
16660 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
16670 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
16680 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
16690 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
166a0 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
166b0 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
166c0 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
166d0 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
166e0 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
166f0 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
16700 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16710 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
16720 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
16730 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
16740 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
16750 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
16760 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
16770 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
16780 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
16790 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
167a0 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
167b0 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
167c0 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
167d0 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
167e0 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
167f0 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
16800 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
16810 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
16820 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
16830 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
16840 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
16850 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
16860 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
16870 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
16880 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
16890 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
168a0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
168b0 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
168c0 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
168d0 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
168e0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
168f0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
16900 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
16910 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
16920 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
16930 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
16940 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
16950 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16960 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
16970 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16980 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
16990 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
169a0 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
169b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
169c0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
169d0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
169e0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
169f0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
16a00 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
16a10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16a20 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16a30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16a40 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
16a50 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
16a60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
16a70 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
16a80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
16a90 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
16aa0 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
16ab0 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
16ac0 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
16ad0 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
16ae0 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
16af0 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
16b00 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
16b10 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
16b20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
16b30 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
16b40 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
16b50 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
16b60 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
16b70 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
16b80 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
16b90 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
16ba0 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
16bb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
16bc0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
16bd0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
16be0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
16bf0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
16c00 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
16c10 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
16c20 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
16c30 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
16c40 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
16c50 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
16c60 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
16c70 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
16c80 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
16c90 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
16ca0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
16cb0 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
16cc0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
16cd0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
16ce0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
16cf0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
16d00 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76  ssert( db->activ
16d10 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f  eVdbeCnt>0 );  /
16d20 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
16d30 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
16d40 20 2a 2f 0a 0a 23 69 66 20 30 0a 20 20 69 66 28   */..#if 0.  if(
16d50 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f   turnOnAC && iRo
16d60 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63  llback && db->ac
16d70 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
16d80 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
16d90 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
16da0 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43  ements a ROLLBAC
16db0 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  K and other VMs 
16dc0 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  are.    ** still
16dd0 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20   running, and a 
16de0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
16df0 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e  ctive, return an
16e00 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
16e10 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  g.    ** that th
16e20 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
16e30 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
16e40 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
16e50 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16e60 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
16e70 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
16e80 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
16e90 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
16ea0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
16eb0 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
16ec0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
16ed0 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66  else.#endif.  if
16ee0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69  ( turnOnAC && !i
16ef0 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
16f00 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
16f10 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
16f20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
16f30 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
16f40 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
16f50 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
16f60 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
16f70 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
16f80 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
16f90 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
16fa0 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
16fb0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
16fc0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16fd0 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
16fe0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
16ff0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17000 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17010 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17020 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17030 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
17040 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
17050 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
17060 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
17070 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
17080 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17090 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
170a0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
170b0 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
170c0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
170d0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
170e0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
170f0 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
17100 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
17110 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
17120 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
17130 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17140 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
17150 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17160 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
17170 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
17180 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
17190 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
171a0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
171b0 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
171c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
171d0 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
171e0 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
171f0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
17200 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17210 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17220 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
17230 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
17240 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
17250 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
17260 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
17270 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
17280 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
17290 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
172a0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
172b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
172c0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
172d0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
172e0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
172f0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
17300 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
17310 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
17320 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
17330 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
17340 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
17350 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
17360 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
17370 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
17380 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
17390 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
173a0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
173d0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
173e0 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
173f0 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
17400 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
17410 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
17420 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
17430 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20  ction P1 P2 * * 
17440 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  *.**.** Begin a 
17450 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
17460 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e  e transaction en
17470 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74  ds when a Commit
17480 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   or Rollback.** 
17490 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e  opcode is encoun
174a0 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e  tered.  Dependin
174b0 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46  g on the ON CONF
174c0 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68  LICT setting, th
174d0 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  e.** transaction
174e0 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72   might also be r
174f0 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e  olled back if an
17500 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
17510 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  tered..**.** P1 
17520 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
17530 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17540 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
17550 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
17560 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
17570 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
17580 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
17590 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
175a0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
175b0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
175c0 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
175d0 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
175e0 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
175f0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
17600 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
17610 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
17620 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
17630 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45  s started.  A RE
17640 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a  SERVED lock is.*
17650 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  * obtained on th
17660 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17670 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  when a write-tra
17680 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
17690 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65  ted.  No.** othe
176a0 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74  r process can st
176b0 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74  art another writ
176c0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  e transaction wh
176d0 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63  ile this transac
176e0 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72  tion is.** under
176f0 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61  way.  Starting a
17700 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
17710 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20  on also creates 
17720 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
17730 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74  al. A.** write t
17740 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
17750 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
17760 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61  e any changes ca
17770 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65  n be made to the
17780 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49  .** database.  I
17790 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65  f P2 is 2 or gre
177a0 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43  ater then an EXC
177b0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61  LUSIVE lock is a
177c0 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  lso obtained.** 
177d0 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a  on the file..**.
177e0 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
177f0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
17800 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
17810 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
17820 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
17830 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
17840 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
17850 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
17860 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
17870 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
17880 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
17890 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
178a0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
178b0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
178c0 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
178d0 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
178e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
178f0 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
17900 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
17910 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
17920 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
17930 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
17940 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
17950 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
17960 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
17970 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
17980 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
17990 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
179a0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
179b0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
179c0 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
179d0 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
179e0 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
179f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
17a00 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
17a10 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
17a20 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17a30 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
17a40 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
17a50 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
17a60 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
17a70 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
17a80 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20   a read-lock is 
17a90 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
17aa0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
17ab0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
17ac0 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
17ad0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
17ae0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17af0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17b00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17b10 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17b20 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
17b30 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
17b40 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
17b50 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
17b60 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
17b70 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
17b80 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
17b90 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
17ba0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
17bb0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
17bc0 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
17bd0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
17be0 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
17bf0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17c00 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
17c10 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17c20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17c30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
17c40 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
17c50 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
17c60 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
17c70 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
17c80 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
17c90 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
17ca0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
17cb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
17cc0 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
17cd0 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
17ce0 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
17cf0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17d00 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
17d10 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
17d20 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
17d30 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
17d40 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
17d50 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
17d60 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
17d70 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
17d80 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
17d90 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
17da0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17db0 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
17dc0 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
17dd0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
17de0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
17df0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
17e00 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
17e10 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
17e20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
17e30 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
17e40 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
17e50 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
17e60 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
17e70 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
17e80 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
17e90 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17ea0 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
17eb0 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
17ec0 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
17ed0 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
17ee0 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
17ef0 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
17f00 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
17f10 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17f20 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20  edCons;.    }.  
17f30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17f40 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
17f50 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
17f60 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
17f70 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
17f80 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
17f90 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
17fa0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
17fb0 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
17fc0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
17fd0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
17fe0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
17ff0 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
18000 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
18010 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
18020 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
18030 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
18040 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
18050 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
18060 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
18070 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
18080 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
18090 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
180a0 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
180b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
180c0 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
180d0 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
180e0 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
180f0 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
18100 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
18110 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
18120 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
18130 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
18140 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
18150 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
18160 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
18170 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
18180 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
18190 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ;..  iDb = pOp->
181a0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
181b0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
181c0 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
181d0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
181e0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
181f0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
18200 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
18210 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
18220 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18230 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
18240 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
18250 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71  Db))!=0 );..  sq
18260 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
18270 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
18280 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
18290 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
182a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
182b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
182c0 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
182d0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
182e0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
182f0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
18300 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
18310 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
18320 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
18330 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
18340 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
18350 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
18360 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
18370 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
18380 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
18390 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
183a0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
183b0 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
183c0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
183d0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
183e0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
183f0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
18400 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
18410 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
18420 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
18430 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
18440 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
18450 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
18460 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
18470 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
18480 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
18490 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
184a0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
184b0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
184c0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
184d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
184e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
184f0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
18500 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
18510 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
18520 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
18530 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
18540 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
18550 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
18560 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
18570 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
18580 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
18590 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d  , 0) );.  pIn3 =
185a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
185b0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
185c0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
185d0 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
185e0 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
185f0 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
18600 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
18610 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
18620 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
18630 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
18640 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
18650 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
18660 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
18670 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
18680 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
18690 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
186a0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
186b0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
186c0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
186d0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
186e0 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
186f0 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
18700 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18710 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
18720 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
18730 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
18740 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
18750 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
18760 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
18770 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
18780 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
18790 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
187a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
187b0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
187c0 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
187d0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
187e0 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
187f0 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
18800 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
18810 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
18820 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
18830 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
18840 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
18850 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
18860 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
18880 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  fyCookie P1 P2 P
18890 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
188a0 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67  k the value of g
188b0 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70  lobal database p
188c0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
188d0 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  0 (the.** schema
188e0 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61   version) and ma
188f0 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71  ke sure it is eq
18900 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74 68  ual to P2 and th
18910 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61  at the.** genera
18920 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20  tion counter on 
18930 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61  the local schema
18940 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50 33   parse equals P3
18950 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
18960 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
18970 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
18980 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
18990 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
189a0 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
189b0 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
189c0 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
189d0 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
189e0 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
189f0 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
18a00 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
18a10 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
18a20 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
18a30 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
18a40 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
18a50 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
18a60 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
18a70 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
18a80 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
18a90 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
18aa0 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
18ab0 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
18ac0 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
18ad0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
18ae0 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
18af0 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
18b00 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
18b10 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
18b20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
18b30 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
18b40 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
18b50 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
18b60 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
18b70 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
18b80 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
18b90 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
18ba0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18bb0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
18bc0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
18bd0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
18be0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
18bf0 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
18c00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
18c10 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
18c20 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
18c30 2c 20 30 29 20 29 3b 0a 20 20 70 42 74 20 3d 20  , 0) );.  pBt = 
18c40 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18c50 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
18c60 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
18c70 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
18c80 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
18c90 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
18ca0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
18cb0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18cc0 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
18cd0 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
18ce0 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
18cf0 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
18d00 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20   iMeta!=pOp->p2 
18d10 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33  || iGen!=pOp->p3
18d20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
18d30 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
18d40 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
18d50 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
18d60 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
18d70 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
18d80 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
18d90 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
18da0 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
18db0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
18dc0 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
18dd0 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
18de0 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
18df0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
18e00 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
18e10 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
18e20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
18e30 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
18e40 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
18e50 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
18e60 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
18e70 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
18e80 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
18e90 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
18ea0 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
18eb0 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
18ec0 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
18ed0 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
18ee0 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
18ef0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
18f00 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
18f10 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
18f20 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
18f30 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
18f40 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
18f50 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
18f60 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
18f70 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
18f80 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18f90 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
18fa0 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
18fb0 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
18fc0 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
18fd0 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
18fe0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
18ff0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
19000 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
19010 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
19020 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
19030 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
19040 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
19050 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
19060 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
19070 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
19080 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
19090 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
190a0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
190b0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
190c0 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
190d0 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78 70 69    }..    p->expi
190e0 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
190f0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
19100 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
19110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19120 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
19130 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
19140 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
19150 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
19160 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
19170 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
19180 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
19190 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
191a0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
191b0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
191c0 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
191d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
191e0 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
191f0 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
19200 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
19210 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
19220 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
19230 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
19240 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
19250 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
19260 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
19270 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
19280 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
19290 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
192a0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
192b0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
192c0 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
192d0 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
192e0 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
192f0 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
19300 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19310 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
19320 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19330 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
19340 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
19350 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
19360 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
19370 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
19380 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
19390 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
193a0 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
193b0 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
193c0 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
193d0 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
193e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
193f0 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
19400 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
19410 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
19420 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
19430 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
19440 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
19450 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
19460 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
19470 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
19480 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
19490 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
194a0 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
194b0 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
194c0 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
194d0 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
194e0 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
194f0 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
19500 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
19510 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
19520 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
19530 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
19540 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
19550 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
19560 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
19570 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
19580 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
19590 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
195a0 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
195b0 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
195c0 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
195d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
195e0 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
195f0 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
19600 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
19610 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
19620 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
19630 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
19640 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
19650 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
19660 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
19670 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
19680 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
19690 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
196a0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
196b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
196c0 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
196d0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
196e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
196f0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
19700 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
19710 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
19720 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
19730 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
19740 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
19750 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
19760 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
19770 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
19780 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
19790 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
197a0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
197b0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
197c0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
197d0 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
197e0 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
197f0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
19800 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
19810 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
19820 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
19830 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
19840 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
19850 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
19860 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
19870 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
19880 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
19890 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
198a0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
198b0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
198c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
198d0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ns in the table,
198e0 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61   or to the.** la
198f0 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61  rgest index of a
19900 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ny column of the
19910 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61   table that is a
19920 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a  ctually used..**
19930 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
19940 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20  tion works just 
19950 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
19960 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
19970 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
19980 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
19990 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65  ode.  For a give
199a0 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63  n table, there c
199b0 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  an be one or mor
199c0 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63  e read-only.** c
199d0 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67  ursors or a sing
199e0 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75  le read/write cu
199f0 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74  rsor but not bot
19a00 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
19a10 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63  o OpenRead..*/.c
19a20 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
19a30 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
19a40 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  te: {.  int nFie
19a50 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
19a60 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
19a70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
19a80 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
19a90 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
19aa0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
19ab0 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72  b *pDb;..  asser
19ac0 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46  t( (pOp->p5&(OPF
19ad0 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c  LAG_P2ISREG|OPFL
19ae0 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f  AG_BULKCSR))==pO
19af0 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72  p->p5 );.  asser
19b00 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
19b10 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20  OP_OpenWrite || 
19b20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 0a 20  pOp->p5==0 );.. 
19b30 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
19b40 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
19b50 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72  TE_ABORT;.    br
19b60 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  eak;.  }..  nFie
19b70 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
19b80 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
19b90 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
19ba0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
19bb0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
19bc0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
19bd0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
19be0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
19bf0 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
19c00 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
19c10 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
19c20 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
19c30 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
19c40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
19c50 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
19c60 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
19c70 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
19c80 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
19c90 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
19ca0 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
19cb0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
19cc0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
19cd0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
19ce0 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
19cf0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
19d00 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
19d10 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
19d20 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
19d30 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
19d40 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
19d50 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20  _P2ISREG ){.    
19d60 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
19d70 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
19d80 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70  p->nMem );.    p
19d90 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
19da0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
19db0 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
19dc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
19dd0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
19de0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
19df0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
19e00 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
19e10 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
19e20 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
19e30 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
19e40 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
19e50 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
19e60 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
19e70 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
19e80 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
19e90 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
19ea0 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
19eb0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
19ec0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
19ed0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
19ee0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
19ef0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
19f00 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
19f10 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
19f20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
19f30 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32      if( NEVER(p2
19f40 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63  <2) ) {.      rc
19f50 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
19f60 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
19f70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19f80 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
19f90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
19fa0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
19fb0 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
19fc0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
19fd0 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d  o;.    pKeyInfo-
19fe0 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
19ff0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1a000 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1a010 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  +1;.  }else if( 
1a020 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a030 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1a040 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1a050 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1a060 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
1a070 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1a080 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1a090 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1a0a0 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1a0b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1a0c0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1a0d0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1a0e0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  dered = 1;.  rc 
1a0f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1a100 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
1a110 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
1a120 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
1a130 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1a140 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  = pKeyInfo;.  as
1a150 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1a160 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1a170 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65  LOAD );.  sqlite
1a180 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1a190 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1a1a0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1a1b0 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20  AG_BULKCSR));.. 
1a1c0 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
1a1d0 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
1a1e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
1a1f0 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
1a200 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
1a210 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1a220 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
1a230 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
1a240 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1a250 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
1a260 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1a270 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e  isTable and isIn
1a280 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50  dex variables. P
1a290 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1a2a0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1a2b0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1a2c0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1a2d0 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1a2e0 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1a2f0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1a300 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1a310 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1a320 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1a330 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1a340 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1a350 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1a360 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1a370 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1a380 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
1a390 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20  pCur->isIndex = 
1a3a0 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a  !pCur->isTable;.
1a3b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a3c0 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
1a3d0 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
1a3e0 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P5.**.** Open a 
1a3f0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1a400 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1a410 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1a420 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1a430 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1a440 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1a450 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1a460 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1a470 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1a480 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1a490 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1a4a0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1a4b0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1a4c0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1a4d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1a4e0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1a4f0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1a500 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1a510 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1a520 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1a530 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1a540 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1a550 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1a560 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1a570 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1a580 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1a590 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1a5a0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1a5b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1a5c0 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f  as once called O
1a5d0 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68  penTemp.  But th
1a5e0 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f  at created.** co
1a5f0 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20  nfusion because 
1a600 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74  the term "temp t
1a610 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66  able", might ref
1a620 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20  er either.** to 
1a630 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20  a TEMP table at 
1a640 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f  the SQL level, o
1a650 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65  r to a table ope
1a660 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f  ned by.** this o
1a670 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69  pcode.  Then thi
1a680 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c  s opcode was cal
1a690 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20  l OpenVirtual.  
1a6a0 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61  But.** that crea
1a6b0 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69  ted confusion wi
1a6c0 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72  th the whole vir
1a6d0 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e  tual-table idea.
1a6e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1a6f0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1a700 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1a710 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1a720 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1a730 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1a740 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1a750 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1a760 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1a770 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1a780 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1a790 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1a7a0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1a7b0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1a7c0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1a7d0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1a7e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1a7f0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1a800 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1a810 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1a820 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1a830 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1a840 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1a850 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1a860 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1a870 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1a880 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1a890 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1a8a0 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1a8b0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1a8c0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1a8d0 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1a8e0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1a8f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1a900 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
1a910 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1a920 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1a930 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1a940 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1a950 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1a960 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1a970 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1a980 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1a990 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1a9a0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1a9b0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61  ANSIENT_DB;..  a
1a9c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1a9d0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1a9e0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a9f0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1aa00 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1aa10 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1aa20 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1aa30 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
1aa40 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1aa50 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1aa60 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1aa90 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1aaa0 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1aab0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1aac0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1aad0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1aae0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1aaf0 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1ab00 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1ab10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1ab20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1ab30 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1ab40 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1ab50 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1ab60 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1ab70 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1ab80 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1ab90 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1aba0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1abb0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1abc0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1abd0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1abe0 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1abf0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1ac00 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1ac10 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1ac20 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1ac30 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
1ac40 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b  ->p4.pKeyInfo ){
1ac50 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1ac60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1ac70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1ac80 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1ac90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1aca0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1acb0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1acc0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1acd0 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1ace0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1acf0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1ad00 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1ad10 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1ad20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ad30 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1ad40 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20  pBt, pgno, 1, . 
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1ad70 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34  KeyInfo*)pOp->p4
1ad80 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  .z, pCx->pCursor
1ad90 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1ada0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1adb0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1adc0 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
1add0 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
1ade0 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >db);.      }.  
1adf0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1ae00 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1ae10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1ae20 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1ae30 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1ae40 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1ae50 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1ae60 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1ae70 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1ae80 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1ae90 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1aea0 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43  UNORDERED);.  pC
1aeb0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
1aec0 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
1aed0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1aee0 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1aef0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1af00 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1af10 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1af20 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1af30 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1af40 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1af50 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1af60 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1af70 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1af80 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1af90 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1afa0 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1afb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1afc0 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1afd0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 23 69  Cursor *pCx;..#i
1afe0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1aff0 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70  T_MERGE_SORT.  p
1b000 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1b010 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b020 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1b030 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1b040 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1b050 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1b060 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1b070 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1b080 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
1b090 62 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72  b);.  pCx->isSor
1b0a0 74 65 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ter = 1;.  rc = 
1b0b0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1b0c0 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a  rInit(db, pCx);.
1b0d0 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63  #else.  pOp->opc
1b0e0 6f 64 65 20 3d 20 4f 50 5f 4f 70 65 6e 45 70 68  ode = OP_OpenEph
1b0f0 65 6d 65 72 61 6c 3b 0a 20 20 70 63 2d 2d 3b 0a  emeral;.  pc--;.
1b100 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
1b110 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1b120 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1b130 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65  3 * P5.**.** Ope
1b140 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1b150 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1b160 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1b170 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1b180 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1b190 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1b1a0 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1b1b0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
1b1c0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1b1d0 74 65 72 20 50 32 20 77 68 65 6e 20 50 35 3d 3d  ter P2 when P5==
1b1e0 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  0.  In other wor
1b1f0 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1b200 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1b210 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1b220 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1b230 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1b240 72 20 50 32 2e 20 20 57 68 65 6e 20 50 35 3d 3d  r P2.  When P5==
1b250 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 72  1, then the.** r
1b260 6f 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ow is represente
1b270 64 20 62 79 20 50 33 20 63 6f 6e 73 65 63 75 74  d by P3 consecut
1b280 69 76 65 20 72 65 67 69 73 74 65 72 73 20 62 65  ive registers be
1b290 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 32 2e  ginning with P2.
1b2a0 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
1b2b0 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
1b2c0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1b2d0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73  used to hold a s
1b2e0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
1b2f0 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
1b300 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
1b310 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
1b320 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
1b330 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
1b340 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
1b350 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68  lumn opcode.  Th
1b360 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b370 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c  de.** is the onl
1b380 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20  y cursor opcode 
1b390 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20  that works with 
1b3a0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1b3b0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20  **.** P3 is the 
1b3c0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
1b3d0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20   in the records 
1b3e0 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f  that will be sto
1b3f0 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73  red by.** the ps
1b400 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
1b410 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
1b420 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  o: {.  VdbeCurso
1b430 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1b440 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1b450 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1b460 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1b470 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1b480 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1b490 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1b4a0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1b4b0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1b4c0 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1b4d0 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1b4e0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d  able = 1;.  pCx-
1b4f0 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20  >isIndex = 0;.  
1b500 70 43 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f  pCx->multiPseudo
1b510 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62 72   = pOp->p5;.  br
1b520 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b530 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
1b540 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
1b550 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
1b560 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
1b570 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
1b580 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
1b590 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
1b5a0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
1b5b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
1b5c0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
1b5d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b5e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1b5f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
1b600 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1b610 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
1b620 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
1b630 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
1b640 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b650 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33   SeekGe P1 P2 P3
1b660 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
1b670 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1b680 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1b690 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1b6a0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1b6b0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1b6c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1b6d0 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1b6e0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1b6f0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1b700 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1b710 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1b720 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1b730 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1b740 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1b750 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1b760 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1b770 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1b780 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1b790 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1b7a0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1b7b0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1b7c0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1b7d0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1b7e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1b7f0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1b800 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1b810 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1b820 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1b830 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1b840 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1b850 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1b860 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1b870 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1b880 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1b890 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
1b8a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1b8b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1b8c0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1b8d0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1b8e0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1b8f0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1b900 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1b910 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1b920 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1b930 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1b940 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1b950 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1b960 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1b970 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1b980 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1b990 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1b9a0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1b9b0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1b9c0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1b9d0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1b9e0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1b9f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1ba00 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1ba10 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ba20 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1ba30 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1ba40 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1ba50 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1ba60 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1ba70 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ba80 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1ba90 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1baa0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1bab0 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32  de: SeekLt P1 P2
1bac0 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20   P3 P4 * .**.** 
1bad0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1bae0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1baf0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1bb00 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1bb10 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1bb20 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1bb30 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1bb40 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1bb50 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1bb60 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1bb70 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1bb80 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1bb90 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1bba0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1bbb0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1bbc0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1bbd0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1bbe0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1bbf0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1bc00 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1bc10 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1bc20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1bc30 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1bc40 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1bc50 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1bc60 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1bc70 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1bc80 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1bc90 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1bca0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1bcb0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1bcc0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1bcd0 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50  : SeekLe P1 P2 P
1bce0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1bcf0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1bd00 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1bd10 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1bd20 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1bd30 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1bd40 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1bd50 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1bd60 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1bd70 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1bd80 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1bd90 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1bda0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1bdb0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1bdc0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1bdd0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1bde0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1bdf0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1be00 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1be10 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1be20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1be30 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
1be40 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1be50 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1be60 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1be70 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
1be80 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1be90 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1bea0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1beb0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1bec0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1bed0 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1bee0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1bef0 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1bf00 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20  OP_SeekLt:      
1bf10 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1bf20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1bf30 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
1bf40 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1bf50 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20  OP_SeekGe:      
1bf60 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1bf70 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1bf80 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  t: {       /* ju
1bf90 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1bfa0 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a   res;.  int oc;.
1bfb0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1bfc0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1bfd0 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65  rd r;.  int nFie
1bfe0 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20  ld;.  i64 iKey; 
1bff0 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1c000 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1c010 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
1c020 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c030 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1c040 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1c050 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1c060 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1c070 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1c080 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1c090 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1c0a0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1c0b0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1c0c0 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31  e == OP_SeekLt+1
1c0d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1c0e0 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65  _SeekGe == OP_Se
1c0f0 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLt+2 );.  asse
1c100 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d  rt( OP_SeekGt ==
1c110 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a   OP_SeekLt+3 );.
1c120 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1c130 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28  Ordered );.  if(
1c140 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1c150 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 6f  sor!=0) ){.    o
1c160 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
1c170 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1c180 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43   = 0;.    if( pC
1c190 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
1c1a0 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
1c1b0 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
1c1c0 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
1c1d0 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
1c1e0 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a   string,.      *
1c1f0 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1c200 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1c210 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1c220 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1c230 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65  .      ** the se
1c240 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74  ek, so covert it
1c250 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33 20  . */.      pIn3 
1c260 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1c270 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  ;.      applyNum
1c280 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
1c290 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d  3);.      iKey =
1c2a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1c2b0 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20  alue(pIn3);.    
1c2c0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1c2d0 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  id = 0;..      /
1c2e0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1c2f0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
1c300 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1c310 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
1c320 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  .      ** loss o
1c330 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
1c340 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
1c350 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
1c360 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ed... */.      i
1c370 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1c380 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1c390 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70 49  .        if( (pI
1c3a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1c3b0 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
1c3c0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c3d0 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1c3e0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1c3f0 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1c400 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1c410 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
1c420 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
1c430 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
1c440 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70  2 */.          p
1c450 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c460 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
1c470 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1c480 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61      /* If we rea
1c490 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74  ch this point, t
1c4a0 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65  hen the P3 value
1c4b0 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74   must be a float
1c4c0 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70  ing.        ** p
1c4d0 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a  oint number. */.
1c4e0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1c4f0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1c500 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a  EM_Real)!=0 );..
1c510 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
1c520 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
1c530 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f   && (pIn3->r<(do
1c540 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e  uble)iKey || pIn
1c550 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20  3->r>0) ){.     
1c560 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76       /* The P3 v
1c570 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67  alue is too larg
1c580 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74  e in magnitude t
1c590 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20 61  o be expressed a
1c5a0 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a  s an.          *
1c5b0 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20  * integer. */.  
1c5c0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
1c5d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1c5e0 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20  In3->r<0 ){.    
1c5f0 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d          if( oc>=
1c600 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73  OP_SeekGe ){  as
1c610 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1c620 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGe || oc==OP_Se
1c630 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ekGt );.        
1c640 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1c650 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d  e3BtreeFirst(pC-
1c660 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1c670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1c680 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1c690 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1c6a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1c6b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c6c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c6d0 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f         if( oc<=O
1c6e0 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73 73  P_SeekLe ){  ass
1c6f0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1c700 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1c710 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kLe );.         
1c720 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1c730 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1c740 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
1c760 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1c770 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c780 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1c790 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c7a0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
1c7b0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
1c7c0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1c7d0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1c7e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
1c7f0 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ak;.        }els
1c800 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  e if( oc==OP_See
1c810 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1c820 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekGe ){.        
1c830 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69    /* Use the cei
1c840 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20  ling() function 
1c850 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d  to convert real-
1c860 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  >int */.        
1c870 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20    if( pIn3->r > 
1c880 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
1c890 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Key++;.        }
1c8a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1c8b0 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72  /* Use the floor
1c8c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  () function to c
1c8d0 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74  onvert real->int
1c8e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1c8f0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1c900 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLe || oc==OP_Se
1c910 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ekGt );.        
1c920 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20    if( pIn3->r < 
1c930 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
1c940 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  Key--;.        }
1c950 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20  .      } .      
1c960 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c970 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1c980 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1c990 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1c9a0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1c9b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1c9c0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1c9d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c9e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1c9f0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
1ca00 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1ca10 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1ca20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
1ca30 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d   = iKey;.      }
1ca40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1ca50 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1ca60 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65  p4.i;.      asse
1ca70 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1ca80 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1ca90 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1caa0 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70  d>0 );.      r.p
1cab0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1cac0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e  eyInfo;.      r.
1cad0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1cae0 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ield;..      /* 
1caf0 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
1cb00 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
1cb10 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
1cb20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a  faster:.      **
1cb30 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1cb40 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGt || oc==OP_S
1cb50 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a  eekLe ){.      *
1cb60 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20  *     r.flags = 
1cb70 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1cb80 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c  ;.      **   }el
1cb90 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  se{.      **    
1cba0 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
1cbb0 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20      **   }.     
1cbc0 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   */.      r.flag
1cbd0 73 20 3d 20 28 75 31 36 29 28 55 4e 50 41 43 4b  s = (u16)(UNPACK
1cbe0 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31 20  ED_INCRKEY * (1 
1cbf0 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
1cc00 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73 65  t)));.      asse
1cc10 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1cc20 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e  t || r.flags==UN
1cc30 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29  PACKED_INCRKEY )
1cc40 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1cc50 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc!=OP_SeekLe ||
1cc60 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b   r.flags==UNPACK
1cc70 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20  ED_INCRKEY );.  
1cc80 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1cc90 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66  OP_SeekGe || r.f
1cca0 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  lags==0 );.     
1ccb0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1ccc0 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67  SeekLt || r.flag
1ccd0 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 72  s==0 );..      r
1cce0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1ccf0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1cd00 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1cd10 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1cd20 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1cd30 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1cd40 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1cd50 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1cd60 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1cd70 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20  (r.aMem);.      
1cd80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1cd90 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1cda0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c  pC->pCursor, &r,
1cdb0 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1cdc0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1cdd0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1cde0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1cdf0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1ce00 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  }.      pC->rowi
1ce10 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1ce20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
1ce30 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1ce40 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1ce50 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1ce60 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
1ce70 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
1ce80 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
1ce90 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
1cea0 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc>=OP_SeekGe )
1ceb0 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1cec0 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d  P_SeekGe || oc==
1ced0 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
1cee0 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1cef0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1cf00 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20  P_SeekGt) ){.   
1cf10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1cf20 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1cf30 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1cf40 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1cf50 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1cf60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1cf70 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1cf80 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1cf90 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1cfa0 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
1cfb0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1cfc0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
1cfd0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1cfe0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1cff0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1d000 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1d010 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20   oc==OP_SeekLt) 
1d020 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1d030 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1d040 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1d050 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1d060 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1d070 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1d080 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d090 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1d0a0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d0b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1d0c0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
1d0d0 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
1d0e0 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
1d0f0 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
1d100 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69          ** see i
1d110 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1d120 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
1d130 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c         res = sql
1d140 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1d150 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1d160 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
1d170 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1d180 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
1d190 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1d1a0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
1d1b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
1d1c0 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
1d1d0 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f   attempting to o
1d1e0 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f  pen the sqlite3_
1d1f0 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20  master table.   
1d200 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63   ** for read acc
1d210 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ess returns SQLI
1d220 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69  TE_EMPTY. In thi
1d230 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20  s case always.  
1d240 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75    ** take the ju
1d250 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20  mp (since there 
1d260 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69  are no records i
1d270 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20  n the table)..  
1d280 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1d290 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1d2a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d2b0 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1d2c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
1d2d0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1d2e0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1d2f0 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1d300 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1d310 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1d320 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1d330 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1d340 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1d350 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1d360 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1d370 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1d380 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1d390 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1d3a0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1d3b0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1d3c0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1d3d0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1d3e0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1d3f0 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1d400 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1d410 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1d420 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1d430 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d440 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d450 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1d460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d480 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  0 );.  if( ALWAY
1d490 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1d4a0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
1d4b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1d4c0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1d4d0 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  = 0;.    pIn2 = 
1d4e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1d4f0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
1d500 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64  rget = sqlite3Vd
1d510 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
1d520 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
1d530 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d540 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d550 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  to = 1;.  }.  br
1d560 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70  eak;.}.  ../* Op
1d570 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50  code: Found P1 P
1d580 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1d590 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1d5a0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1d5b0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1d5c0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1d5d0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1d5e0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1d5f0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1d600 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1d610 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1d620 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
1d630 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1d640 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1d650 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1d660 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1d670 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
1d680 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  a prefix of any 
1d690 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1d6a0 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1d6b0 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20  to P2 and.** P1 
1d6c0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1d6d0 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
1d6e0 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70   entry..*/./* Op
1d6f0 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1d700 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1d710 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1d720 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1d730 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1d740 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1d750 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1d760 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1d770 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1d780 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1d790 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1d7a0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1d7b0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1d7c0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1d7d0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1d7e0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1d7f0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1d800 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
1d810 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1d820 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1d830 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
1d840 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
1d850 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
1d860 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
1d870 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
1d880 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
1d890 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
1d8a0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1d8b0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
1d8c0 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
1d8d0 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
1d8e0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1d8f0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d900 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1d910 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
1d920 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
1d930 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1d940 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
1d950 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
1d960 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1d970 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
1d980 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
1d990 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1d9a0 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
1d9b0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1d9c0 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
1d9d0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1d9e0 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
1d9f0 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
1da00 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
1da10 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37  izeof(Mem)*3 + 7
1da20 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
1da30 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1da40 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
1da50 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61 64  #endif..  alread
1da60 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61  yExists = 0;.  a
1da70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1da80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1da90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1daa0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1dab0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1dac0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1dad0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1dae0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e  ( pC!=0 );.  pIn
1daf0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1db00 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  3];.  if( ALWAYS
1db10 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29  (pC->pCursor!=0)
1db20 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74 28   ){..    assert(
1db30 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1db40 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
1db50 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 20  p4.i>0 ){.      
1db60 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1db70 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  >pKeyInfo;.     
1db80 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1db90 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
1dba0 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
1dbb0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1dbc0 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74  EBUG.      { int
1dbd0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1dbe0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1dbf0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1dc00 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1dc10 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 72  }.#endif.      r
1dc20 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1dc30 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1dc40 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20        pIdxKey = 
1dc50 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  &r;.    }else{. 
1dc60 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73       pIdxKey = s
1dc70 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
1dc80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20  npackedRecord(. 
1dc90 20 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65           pC->pKe
1dca0 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c  yInfo, aTempRec,
1dcb0 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1dcc0 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 20 20  ), &pFree.      
1dcd0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 70 49  ); .      if( pI
1dce0 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
1dcf0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 61 73  no_mem;.      as
1dd00 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1dd10 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1dd20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1dd30 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1dd40 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a  _Zero)==0 );  /*
1dd50 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61   zeroblobs alrea
1dd60 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20  dy expanded */. 
1dd70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1dd80 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
1dd90 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
1dda0 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
1ddb0 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 70 49 64  xKey);.      pId
1ddc0 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55  xKey->flags |= U
1ddd0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
1dde0 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ATCH;.    }.    
1ddf0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1de00 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1de10 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64  pC->pCursor, pId
1de20 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1de30 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
1de40 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  p4.i==0 ){.     
1de50 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1de60 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 20 20 7d  b, pFree);.    }
1de70 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1de80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1de90 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
1dea0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1deb0 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70   (res==0);.    p
1dec0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1ded0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
1dee0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1def0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
1df00 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1df10 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
1df20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
1df30 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1df40 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
1df50 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64 79      if( !already
1df60 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1df70 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1df80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1df90 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50  code: IsUnique P
1dfa0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1dfb0 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1dfc0 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78  open on an index
1dfd0 20 62 2d 74 72 65 65 20 2d 20 74 68 61 74 20 69   b-tree - that i
1dfe0 73 20 74 6f 20 73 61 79 2c 20 61 20 62 74 72 65  s to say, a btre
1dff0 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61  e which.** no da
1e000 74 61 20 61 6e 64 20 77 68 65 72 65 20 74 68 65  ta and where the
1e010 20 6b 65 79 20 61 72 65 20 72 65 63 6f 72 64 73   key are records
1e020 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50   generated by OP
1e030 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68  _MakeRecord with
1e040 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20 66 69 65  .** the list fie
1e050 6c 64 20 62 65 69 6e 67 20 74 68 65 20 69 6e 74  ld being the int
1e060 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68  eger ROWID of th
1e070 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
1e080 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20   index.** entry 
1e090 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a  refers to..**.**
1e0a0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1e0b0 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74   contains an int
1e0c0 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
1e0d0 65 72 2e 20 43 61 6c 6c 20 74 68 69 73 20 72 65  er. Call this re
1e0e0 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  cord .** number 
1e0f0 52 2e 20 52 65 67 69 73 74 65 72 20 50 34 20 69  R. Register P4 i
1e100 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1e110 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67   set of N contig
1e120 75 6f 75 73 20 72 65 67 69 73 74 65 72 73 0a 2a  uous registers.*
1e130 2a 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 61  * that make up a
1e140 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e150 20 6b 65 79 20 74 68 61 74 20 63 61 6e 20 62 65   key that can be
1e160 20 75 73 65 64 20 77 69 74 68 20 63 75 72 73 6f   used with curso
1e170 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  r P1..** The val
1e180 75 65 20 6f 66 20 4e 20 63 61 6e 20 62 65 20 69  ue of N can be i
1e190 6e 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65  nferred from the
1e1a0 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75   cursor. N inclu
1e1b0 64 65 73 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a  des the rowid.**
1e1c0 20 76 61 6c 75 65 20 61 70 70 65 6e 64 65 64 20   value appended 
1e1d0 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1e1e0 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20  e index record. 
1e1f0 54 68 69 73 20 72 6f 77 69 64 20 76 61 6c 75 65  This rowid value
1e200 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e   may.** or may n
1e210 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  ot be the same a
1e220 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  s R..**.** If an
1e230 79 20 6f 66 20 74 68 65 20 4e 20 72 65 67 69 73  y of the N regis
1e240 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
1e250 69 74 68 20 72 65 67 69 73 74 65 72 20 50 34 20  ith register P4 
1e260 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a  contains a NULL.
1e270 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69  ** value, jump i
1e280 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1e290 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73  ..**.** Otherwis
1e2a0 65 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  e, this instruct
1e2b0 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 63 75  ion checks if cu
1e2c0 72 73 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e 73  rsor P1 contains
1e2d0 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65   an entry.** whe
1e2e0 72 65 20 74 68 65 20 66 69 72 73 74 20 28 4e 2d  re the first (N-
1e2f0 31 29 20 66 69 65 6c 64 73 20 6d 61 74 63 68 20  1) fields match 
1e300 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 76 61  but the rowid va
1e310 6c 75 65 20 61 74 20 74 68 65 20 65 6e 64 0a 2a  lue at the end.*
1e320 2a 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 65  * of the index e
1e330 6e 74 72 79 20 69 73 20 6e 6f 74 20 52 2e 20 49  ntry is not R. I
1e340 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
1e350 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f  ch entry, contro
1e360 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e  l jumps.** to in
1e370 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
1e380 68 65 72 77 69 73 65 2c 20 74 68 65 20 72 6f 77  herwise, the row
1e390 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69  id of the confli
1e3a0 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65  cting index.** e
1e3b0 6e 74 72 79 20 69 73 20 63 6f 70 69 65 64 20 74  ntry is copied t
1e3c0 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
1e3d0 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20  d control falls 
1e3e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1e3f0 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
1e400 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1e410 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1e420 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a  tExists, Found.*
1e430 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71  /.case OP_IsUniq
1e440 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ue: {        /* 
1e450 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75  jump, in3 */.  u
1e460 31 36 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  16 ii;.  VdbeCur
1e470 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75  sor *pCx;.  BtCu
1e480 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
1e490 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d  16 nField;.  Mem
1e4a0 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65   *aMx;.  Unpacke
1e4b0 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20  dRecord r;      
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
1e4d0 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65 61 72  -Tree index sear
1e4e0 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  ch key */.  i64 
1e4f0 52 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R;              
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e510 2a 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69  * Rowid stored i
1e520 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  n register P3 */
1e530 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
1e540 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78  [pOp->p3];.  aMx
1e550 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34   = &aMem[pOp->p4
1e560 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74  .i];.  /* Assert
1e570 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
1e580 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 50   of parameters P
1e590 31 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20  1 and P4 are in 
1e5a0 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65  range. */.  asse
1e5b0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1e5c0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
1e5d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69  ssert( pOp->p4.i
1e5e0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c  >0 && pOp->p4.i<
1e5f0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73  =p->nMem );.  as
1e600 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e610 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e620 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20  Cursor );..  /* 
1e630 46 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63  Find the index c
1e640 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20  ursor. */.  pCx 
1e650 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1e660 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1e670 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  Cx->deferredMove
1e680 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e  to==0 );.  pCx->
1e690 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1e6a0 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74    pCx->cacheStat
1e6b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1e6c0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d  ;.  pCrsr = pCx-
1e6d0 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
1e6e0 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61  If any of the va
1e6f0 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  lues are NULL, t
1e700 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f  ake the jump. */
1e710 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d  .  nField = pCx-
1e720 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  >pKeyInfo->nFiel
1e730 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  d;.  for(ii=0; i
1e740 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  i<nField; ii++){
1e750 0a 20 20 20 20 69 66 28 20 61 4d 78 5b 69 69 5d  .    if( aMx[ii]
1e760 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
1e770 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  l ){.      pc = 
1e780 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1e790 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20     pCrsr = 0;.  
1e7a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1e7b0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28  .  }.  assert( (
1e7c0 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67  aMx[nField].flag
1e7d0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
1e7e0 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73 72   );..  if( pCrsr
1e7f0 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f  !=0 ){.    /* Po
1e800 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65 78  pulate the index
1e810 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a   search key. */.
1e820 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1e830 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a   pCx->pKeyInfo;.
1e840 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e      r.nField = n
1e850 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72  Field + 1;.    r
1e860 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1e870 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 3b  D_PREFIX_SEARCH;
1e880 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d  .    r.aMem = aM
1e890 78 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  x;.#ifdef SQLITE
1e8a0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
1e8b0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1e8c0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1e8d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1e8e0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1e8f0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
1e900 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61 6c   Extract the val
1e910 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67  ue of R from reg
1e920 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20  ister P3. */.   
1e930 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1e940 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
1e950 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75  .    R = pIn3->u
1e960 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72  .i;..    /* Sear
1e970 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e  ch the B-Tree in
1e980 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c  dex. If no confl
1e990 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73  icting record is
1e9a0 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20   found, jump.   
1e9b0 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72   ** to P2. Other
1e9c0 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72  wise, copy the r
1e9d0 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66  owid of the conf
1e9e0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74  licting record t
1e9f0 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65  o.    ** registe
1ea00 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68  r P3 and fall th
1ea10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1ea20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
1ea30 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
1ea40 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1ea50 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
1ea60 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65  , 0, 0, &pCx->se
1ea70 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69  ekResult);.    i
1ea80 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e  f( (r.flags & UN
1ea90 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
1eaa0 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64  ARCH) || r.rowid
1eab0 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20  ==R ){.      pc 
1eac0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1ead0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1eae0 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f  pIn3->u.i = r.ro
1eaf0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  wid;.    }.  }. 
1eb00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1eb10 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
1eb20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1eb30 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65  ** Use the conte
1eb40 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1eb50 33 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 as an integer 
1eb60 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72  key.  If a recor
1eb70 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  d .** with that 
1eb80 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  key does not exi
1eb90 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50  st in table of P
1eba0 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  1, then jump to 
1ebb0 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
1ebc0 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74  ecord does exist
1ebd0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1ebe0 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72  ugh.  The cursor
1ebf0 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69   is left .** poi
1ec00 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63  nting to the rec
1ec10 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74 73  ord if it exists
1ec20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  ..**.** The diff
1ec30 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
1ec40 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  his operation an
1ec50 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68  d NotFound is th
1ec60 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  at this.** opera
1ec70 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65  tion assumes the
1ec80 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67   key is an integ
1ec90 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20 69  er and that P1 i
1eca0 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61  s a table wherea
1ecb0 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73  s.** NotFound as
1ecc0 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62  sumes key is a b
1ecd0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1ece0 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20  from MakeRecord 
1ecf0 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  and.** P1 is an 
1ed00 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  index..**.** See
1ed10 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ed20 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65  tFound, IsUnique
1ed30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45  .*/.case OP_NotE
1ed40 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20  xists: {        
1ed50 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ed60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ed70 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1ed80 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1ed90 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
1eda0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1edb0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
1edc0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1edd0 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1ede0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1edf0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1ee00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1ee10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1ee20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1ee30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1ee40 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
1ee50 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1ee60 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1ee70 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1ee80 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
1ee90 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
1eea0 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
1eeb0 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
1eec0 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
1eed0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1eee0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
1eef0 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
1ef00 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f  ;.    pC->lastRo
1ef10 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1ef20 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1ef30 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1ef40 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  1:0;.    pC->nul
1ef50 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1ef60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1ef70 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
1ef80 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ef90 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  eto = 0;.    if(
1efa0 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20   res!=0 ){.     
1efb0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1efc0 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
1efd0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1efe0 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  d==0 );.    }.  
1eff0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1f000 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b   = res;.  }else{
1f010 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1f020 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74  pens when an att
1f030 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72  empt to open a r
1f040 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  ead cursor on th
1f050 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  e .    ** sqlite
1f060 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65  _master table re
1f070 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1f080 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  TY..    */.    p
1f090 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1f0a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1f0b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1f0c0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
1f0d0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a  Result = 0;.  }.
1f0e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f0f0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
1f100 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1f110 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1f120 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1f130 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1f140 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1f150 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1f160 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1f170 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1f180 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1f190 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1f1a0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1f1b0 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1f1c0 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1f1d0 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1f1e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1f1f0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1f200 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f210 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f220 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f230 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1f240 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1f250 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1f260 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1f270 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
1f280 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
1f290 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
1f2a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1f2b0 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
1f2c0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1f2d0 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
1f2e0 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
1f2f0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
1f300 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
1f310 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
1f320 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
1f330 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1f340 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
1f350 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
1f360 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
1f370 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
1f380 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
1f390 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
1f3a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
1f3b0 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
1f3c0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
1f3d0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
1f3e0 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
1f3f0 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
1f400 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
1f410 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1f420 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
1f430 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
1f440 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
1f450 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
1f460 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
1f470 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
1f480 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
1f490 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
1f4a0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1f4b0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1f4c0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1f4d0 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
1f4e0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1f4f0 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
1f500 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1f510 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1f520 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1f530 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1f540 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1f550 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1f560 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1f570 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f590 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
1f5a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f5b0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
1f5c0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
1f5d0 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
1f5e0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f600 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
1f610 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
1f620 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f640 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
1f650 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1f660 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
1f670 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
1f680 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1f690 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
1f6a0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
1f6b0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
1f6c0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
1f6d0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
1f6e0 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
1f6f0 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
1f700 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f710 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f720 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f730 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f740 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f750 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1f760 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
1f770 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
1f780 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1f790 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1f7a0 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1f7b0 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1f7c0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1f7d0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1f7e0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1f7f0 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1f800 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1f810 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1f820 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1f830 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1f840 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1f850 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1f860 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1f870 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1f880 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1f890 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1f8a0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1f8b0 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1f8c0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1f8d0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1f8e0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1f8f0 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1f900 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1f910 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1f920 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1f930 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1f940 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1f950 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1f960 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1f970 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1f980 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1f990 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1f9a0 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1f9b0 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1f9c0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1f9d0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1f9e0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1f9f0 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1fa00 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1fa10 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1fa20 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
1fa30 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1fa40 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1fa50 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
1fa60 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
1fa70 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1fa80 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
1fa90 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
1faa0 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
1fab0 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
1fac0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
1fad0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1fae0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
1faf0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1fb00 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1fb10 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
1fb20 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
1fb30 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
1fb40 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
1fb50 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
1fb60 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
1fb70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
1fb80 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1fb90 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
1fba0 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
1fbb0 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
1fbc0 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
1fbd0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
1fbe0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1fbf0 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
1fc00 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eGetCachedRowid(
1fc10 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1fc20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a      if( v==0 ){.
1fc30 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1fc40 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1fc50 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1fc60 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1fc70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1fc80 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1fc90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fca0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1fcb0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1fcc0 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20           v = 1; 
1fcd0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
1fce0 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
1fcf0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fd00 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1fd10 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
1fd20 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Valid(pC->pCurso
1fd30 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r) );.          
1fd40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fd50 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1fd60 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1fd70 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
1fd80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
1fd90 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66  /* Cannot fail f
1fda0 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61  ollowing BtreeLa
1fdb0 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  st() */.        
1fdc0 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
1fdd0 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
1fde0 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
1fdf0 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
1fe00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fe10 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
1fe20 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
1fe30 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  987 */.         
1fe40 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1fe50 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
1fe60 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1fe70 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66  CREMENT.      if
1fe80 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1fe90 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
1fea0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
1feb0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
1fec0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1fed0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
1fee0 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46         if( p->pF
1fef0 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
1ff00 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
1ff10 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
1ff20 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
1ff30 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
1ff40 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;.          /* A
1ff50 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1ff60 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1ff70 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1ff80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ff90 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
1ffa0 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d   );.          pM
1ffb0 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
1ffc0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1ffd0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ffe0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1fff0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
20000 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
20010 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
20020 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
20030 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
20040 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
20050 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
20060 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
20070 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
20080 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20090 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
200a0 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
200b0 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
200c0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
200d0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  em);.        sql
200e0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
200f0 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  erify(pMem);.   
20100 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
20110 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
20120 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
20130 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
20140 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
20150 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
20160 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
20170 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20180 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  d ){.          r
20190 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
201a0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32     /* IMP: R-122
201b0 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20  75-61338 */.    
201c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
201d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
201e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
201f0 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
20200 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  +1 ){.          
20210 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
20220 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
20230 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
20240 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   v;.      }.#end
20250 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65  if..      sqlite
20260 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
20270 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
20280 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20  , v<MAX_ROWID ? 
20290 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a  v+1 : 0);.    }.
202a0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
202b0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
202c0 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
202d0 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
202e0 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
202f0 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
20300 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
20310 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
20320 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
20330 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
20340 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
20350 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
20360 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
20370 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
20380 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
20390 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
203a0 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
203b0 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
203c0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
203d0 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
203e0 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
203f0 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
20400 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
20410 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
20420 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20440 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
20450 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
20460 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69      /* on the fi
20470 72 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d  rst attempt, sim
20480 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20  ply do one more 
20490 74 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f  than previous */
204a0 0a 20 20 20 20 20 20 76 20 3d 20 6c 61 73 74 52  .      v = lastR
204b0 6f 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26 3d  owid;.      v &=
204c0 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
204d0 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e   /* ensure doesn
204e0 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a  't go negative *
204f0 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20  /.      v++; /* 
20500 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20  ensure non-zero 
20510 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30  */.      cnt = 0
20520 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 20  ;.      while(  
20530 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
20540 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20550 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
20560 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
205a0 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
205b0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
205c0 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
205d0 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
205e0 31 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f  100)){.        /
205f0 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72  * collision - tr
20600 79 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d  y another random
20610 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20 20   rowid */.      
20620 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
20630 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
20640 26 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  &v);.        if(
20650 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20 20   cnt<5 ){.      
20660 20 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c      /* try "smal
20670 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73  l" random rowids
20680 20 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61 6c   for the initial
20690 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20   attempts */.   
206a0 20 20 20 20 20 20 20 76 20 26 3d 20 30 78 66 66         v &= 0xff
206b0 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 65  ffff;.        }e
206c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
206d0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
206e0 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
206f0 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
20700 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  e */.        }. 
20710 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65         v++; /* e
20720 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a  nsure non-zero *
20730 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  /.      }.      
20740 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
20750 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
20760 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
20770 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
20780 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32  P: R-38219-53002
20790 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
207a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
207b0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
207c0 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29     assert( v>0 )
207d0 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31  ;  /* EV: R-4081
207e0 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d  2-03570 */.    }
207f0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
20800 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70  Valid = 0;.    p
20810 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20820 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
20830 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20840 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
20850 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
20860 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
20870 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
20880 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
20890 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
208a0 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
208b0 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
208c0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
208d0 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
208e0 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
208f0 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
20900 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
20910 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
20920 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
20930 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
20940 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
20950 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
20960 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
20970 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
20980 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
20990 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
209a0 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
209b0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
209c0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
209d0 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
209e0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
209f0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
20a00 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
20a10 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
20a20 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
20a30 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
20a40 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
20a50 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
20a60 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
20a70 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
20a80 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
20a90 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
20aa0 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
20ab0 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
20ac0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
20ad0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
20ae0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
20af0 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73  t and if the res
20b00 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61  ult of.** the la
20b10 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  st seek operatio
20b20 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29  n (OP_NotExists)
20b30 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20   was a success, 
20b40 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65  then this.** ope
20b50 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20  ration will not 
20b60 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
20b70 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
20b80 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  row before doing
20b90 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62  .** the insert b
20ba0 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20  ut will instead 
20bb0 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f  overwrite the ro
20bc0 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  w that the curso
20bd0 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c  r is.** currentl
20be0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  y pointing to.  
20bf0 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20  Presumably, the 
20c00 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73  prior OP_NotExis
20c10 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73  ts opcode.** has
20c20 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f   already positio
20c30 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63  ned the cursor c
20c40 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
20c50 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
20c60 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74  on.** that boost
20c70 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79  s performance by
20c80 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64   avoiding redund
20c90 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a  ant seeks..**.**
20ca0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
20cb0 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
20cc0 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
20cd0 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
20ce0 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
20cf0 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
20d00 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
20d10 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
20d20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
20d30 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
20d40 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
20d50 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
20d60 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
20d70 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
20d80 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
20d90 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
20da0 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
20db0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
20dc0 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
20dd0 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
20de0 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
20df0 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
20e00 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
20e10 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
20e20 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
20e30 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
20e40 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
20e50 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
20e60 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
20e70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
20e80 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
20e90 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
20ea0 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
20eb0 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
20ec0 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
20ed0 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
20ee0 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
20ef0 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
20f00 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
20f10 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
20f20 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
20f30 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
20f40 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
20f50 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
20f60 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
20f70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
20f80 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
20f90 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
20fa0 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
20fb0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
20fc0 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
20fd0 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
20fe0 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
20ff0 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
21000 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
21010 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
21020 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
21030 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
21040 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
21050 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
21060 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
21070 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
21080 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
21090 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
210a0 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
210b0 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
210c0 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
210d0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
210e0 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
210f0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21100 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
21110 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
21120 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
21130 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
21140 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
21150 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
21160 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
21170 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
21180 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21190 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
211a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
211b0 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
211c0 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
211d0 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
211e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
211f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21200 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
21210 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
21220 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
21230 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
21240 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
21250 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
21260 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
21270 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
21280 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
21290 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
212a0 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
212b0 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
212c0 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
212d0 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
212e0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
212f0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
21300 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
21310 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
21320 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
21330 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
21340 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
21350 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
21360 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21370 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21380 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
21390 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
213a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
213b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
213c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
213d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
213e0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
213f0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
21400 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
21410 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21420 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
21430 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21440 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
21450 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21460 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
21470 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
21480 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
21490 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
214a0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
214b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
214c0 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
214d0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
214e0 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
214f0 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
21500 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
21510 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
21520 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21530 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
21540 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
21550 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
21560 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
21570 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
21580 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21590 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
215a0 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
215b0 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
215c0 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
215d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
215e0 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
215f0 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
21600 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
21610 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
21620 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
21630 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
21640 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
21650 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
21660 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
21670 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
21680 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
21690 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
216a0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
216b0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
216c0 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
216d0 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
216e0 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
216f0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
21700 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
21710 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
21720 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
21730 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
21740 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
21750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21760 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
21770 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21790 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f       pOp->p5 & O
217a0 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65  PFLAG_APPEND, se
217b0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
217c0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
217d0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
217e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
217f0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21800 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21810 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
21820 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
21830 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
21840 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21850 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
21860 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
21870 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
21880 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
21890 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
218a0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
218b0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
218c0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
218d0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
218e0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
218f0 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
21900 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21910 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
21920 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
21930 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
21940 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
21950 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21960 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
21970 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21980 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
21990 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
219a0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
219b0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
219c0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
219d0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
219e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
219f0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
21a00 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
21a10 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
21a20 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
21a30 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
21a40 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
21a50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
21a60 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
21a70 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
21a80 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
21a90 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
21aa0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
21ab0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
21ac0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
21ad0 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
21ae0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21af0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
21b00 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
21b10 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
21b20 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
21b30 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
21b40 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
21b50 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
21b60 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
21b70 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
21b80 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
21b90 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
21ba0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
21bb0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
21bc0 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
21bd0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
21be0 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
21bf0 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
21c00 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
21c10 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
21c20 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
21c30 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
21c40 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
21c50 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
21c60 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
21c70 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
21c80 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
21c90 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
21ca0 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
21cb0 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  {.  i64 iKey;.  
21cc0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21cd0 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61  .  iKey = 0;.  a
21ce0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21cf0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21d00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21d10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21d20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21d30 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21d40 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
21d50 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
21d60 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
21d70 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
21d80 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
21d90 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21da0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
21db0 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65   set iKey to the
21dc0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20   rowid of the.  
21dd0 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c  ** row being del
21de0 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  eted..  */.  if(
21df0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21e00 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
21e10 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
21e20 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
21e30 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21e40 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20  rowidIsValid ); 
21e50 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65   /* lastRowid se
21e60 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50  t by previous OP
21e70 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20  _NotFound */.   
21e80 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74   iKey = pC->last
21e90 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Rowid;.  }..  /*
21ea0 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
21eb0 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
21ec0 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
21ed0 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
21ee0 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
21ef0 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
21f00 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
21f10 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
21f20 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
21f30 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
21f40 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
21f50 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
21f60 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
21f70 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
21f80 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
21f90 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
21fa0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21fb0 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
21fc0 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
21fd0 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
21fe0 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
21ff0 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
22000 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
22010 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
22020 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
22030 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
22040 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
22050 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
22060 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22070 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22080 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22090 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
220a0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
220b0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
220c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
220d0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
220e0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
220f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
22100 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22110 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
22120 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
22130 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
22140 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
22150 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
22160 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
22170 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
22180 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
22190 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
221a0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
221b0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
221c0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
221d0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
221e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
221f0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
22200 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
22210 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
22220 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
22230 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
22240 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
22250 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
22260 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
22270 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
22280 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
22290 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
222a0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
222b0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
222c0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
222d0 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
222e0 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
222f0 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
22300 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
22310 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
22320 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
22330 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
22340 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
22350 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
22360 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
22370 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
22380 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
22390 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
223a0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
223b0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
223c0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
223d0 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
223e0 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
223f0 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
22400 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22410 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
22420 72 65 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  re P1 P2 P3.**.*
22430 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
22440 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
22450 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
22460 65 73 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c  es the record bl
22470 6f 62 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ob in .** regist
22480 65 72 20 50 33 20 77 69 74 68 20 74 68 65 20 65  er P3 with the e
22490 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 73 6f  ntry that the so
224a0 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
224b0 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
224c0 0a 2a 2a 20 49 66 2c 20 65 78 63 6c 75 64 69 6e  .** If, excludin
224d0 67 20 74 68 65 20 72 6f 77 69 64 20 66 69 65 6c  g the rowid fiel
224e0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2c 20 74  ds at the end, t
224f0 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 61  he two records a
22500 72 65 20 61 20 6d 61 74 63 68 2c 0a 2a 2a 20 66  re a match,.** f
22510 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
22520 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
22530 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ion. Otherwise, 
22540 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
22550 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
22560 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
22570 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
22580 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
22590 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
225a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
225b0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
225c0 43 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  C) );.  pIn3 = &
225d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
225e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
225f0 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
22600 43 2c 20 70 49 6e 33 2c 20 26 72 65 73 29 3b 0a  C, pIn3, &res);.
22610 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
22620 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
22630 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  .  }.  break;.};
22640 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
22650 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a 20  terData P1 P2 * 
22660 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
22670 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22680 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
22690 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
226a0 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
226b0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
226c0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
226d0 72 73 6f 72 20 2a 70 43 3b 0a 0a 23 69 66 6e 64  rsor *pC;..#ifnd
226e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
226f0 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 75 74  ERGE_SORT.  pOut
22700 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
22710 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
22720 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22730 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
22740 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ter );.  rc = sq
22750 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
22760 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
22770 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70  .#else.  pOp->op
22780 63 6f 64 65 20 3d 20 4f 50 5f 52 6f 77 4b 65 79  code = OP_RowKey
22790 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69 66  ;.  pc--;.#endif
227a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
227b0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
227c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
227d0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
227e0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
227f0 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
22800 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
22810 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
22820 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
22830 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
22840 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
22850 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
22860 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
22870 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
22880 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
22890 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
228a0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
228b0 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
228c0 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
228d0 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
228e0 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
228f0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
22900 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
22910 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
22920 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
22930 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
22940 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
22950 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
22960 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
22970 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
22980 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
22990 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
229a0 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
229b0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
229c0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
229d0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
229e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
229f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
22a00 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
22a10 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
22a20 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
22a30 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
22a40 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22a50 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22a60 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
22a70 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
22a80 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
22a90 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22aa0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
22ab0 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
22ac0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
22ad0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
22ae0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
22af0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
22b00 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
22b10 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
22b20 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
22b30 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
22b40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
22b50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22b60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22b70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22b80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22b90 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
22ba0 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  er==0 );.  asser
22bb0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
22bc0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
22bd0 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
22be0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64  ssert( pC->isInd
22bf0 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ex || pOp->opcod
22c00 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
22c10 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22c20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22c30 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
22c40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
22c50 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
22c60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22c70 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
22c80 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22c90 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
22ca0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
22cb0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
22cc0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
22cd0 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
22ce0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
22cf0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
22d00 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
22d10 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
22d20 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
22d30 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
22d40 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
22d50 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
22d60 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
22d70 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
22d80 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22d90 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
22da0 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
22db0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
22dc0 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
22dd0 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
22de0 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
22df0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
22e00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22e10 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
22e20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22e30 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
22e40 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
22e50 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
22e60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22e70 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
22e80 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73  sIndex ){.    as
22e90 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
22ea0 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e  le );.    VVA_ON
22eb0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
22ec0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
22ed0 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
22ee0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22ef0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
22f00 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
22f10 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
22f20 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
22f30 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
22f40 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
22f50 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
22f60 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
22f70 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
22f80 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
22f90 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
22fa0 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
22fb0 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
22fc0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
22fd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
22fe0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
22ff0 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
23000 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64      if( n>(u32)d
23010 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
23020 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
23030 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
23040 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _big;.    }.  }.
23050 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
23060 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e  eMemGrow(pOut, n
23070 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
23080 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
23090 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65  Out->n = n;.  Me
230a0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
230b0 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  t, MEM_Blob);.  
230c0 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
230d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
230e0 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73  te3BtreeKey(pCrs
230f0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
23100 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
23110 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23120 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20  eData(pCrsr, 0, 
23130 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
23140 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
23150 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
23160 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
23170 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f   is ever cast to
23180 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54   text */.  UPDAT
23190 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
231a0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
231b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
231c0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
231d0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
231e0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
231f0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
23200 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
23210 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
23220 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23230 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
23240 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
23250 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
23260 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
23270 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
23280 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
23290 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
232a0 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
232b0 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
232c0 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
232d0 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
232e0 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
232f0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
23300 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
23330 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ase */.  VdbeCur
23340 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
23350 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
23360 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
23370 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
23380 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
23390 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
233a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
233b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
233c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
233d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
233e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
233f0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
23400 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  eg==0 || pC->nul
23410 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
23420 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
23430 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
23440 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
23450 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
23460 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23470 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
23480 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
23490 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
234a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
234b0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
234c0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a  >pVtabCursor ){.
234d0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
234e0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
234f0 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
23500 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
23510 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
23520 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
23530 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
23540 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56  e->xRowid(pC->pV
23550 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  tabCursor, &v);.
23560 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
23570 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
23580 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
23590 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
235a0 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
235b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
235c0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
235d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
235e0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
235f0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
23600 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23610 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
23620 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23630 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70  d ){.      v = p
23640 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
23650 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23660 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23670 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23680 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
23690 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
236a0 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77  TE_OK );  /* Alw
236b0 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f  ays so because o
236c0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
236d0 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a   above */.    }.
236e0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
236f0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
23700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
23710 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
23720 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
23730 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
23740 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
23750 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
23760 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
23770 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
23780 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
23790 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
237a0 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
237b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
237c0 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
237d0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
237e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
237f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23800 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23810 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23820 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23830 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
23840 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77  w = 1;.  pC->row
23850 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
23860 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
23870 72 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61  rsor || pC->pVta
23880 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
23890 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
238a0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
238b0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
238c0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
238d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
238e0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
238f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
23900 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
23910 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
23920 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
23930 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
23940 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
23950 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
23960 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
23970 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
23980 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
23990 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
239a0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
239b0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
239c0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
239d0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
239e0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
239f0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
23a00 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
23a10 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
23a20 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
23a30 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
23a40 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
23a50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23a60 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23a70 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
23a80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23a90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23aa0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23ab0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23ac0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23ad0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
23ae0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23af0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28    res = 0;.  if(
23b00 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
23b10 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
23b20 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
23b30 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d  Crsr, &res);.  }
23b40 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23b50 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
23b60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23b70 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   0;.  pC->rowidI
23b80 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
23b90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23ba0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
23bb0 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  f( pOp->p2>0 && 
23bc0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23bd0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
23be0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
23bf0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
23c00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
23c10 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
23c20 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
23c30 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
23c40 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
23c50 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
23c60 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
23c70 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
23c80 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
23c90 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
23ca0 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
23cb0 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
23cc0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
23cd0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
23ce0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
23cf0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
23d00 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
23d10 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
23d20 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
23d30 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
23d40 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
23d50 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
23d60 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
23d70 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
23d80 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
23d90 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
23da0 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
23db0 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
23dc0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
23dd0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
23de0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
23df0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
23e00 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
23e10 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
23e20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
23e30 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
23e40 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e  RGE_SORT.  pOp->
23e50 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72 74  opcode = OP_Sort
23e60 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f 50  ;.#endif.case OP
23e70 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
23e80 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
23e90 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
23ea0 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
23eb0 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
23ec0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
23ed0 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
23ee0 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
23ef0 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b  STATUS_SORT-1]++
23f00 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
23f10 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
23f20 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
23f30 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
23f40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
23f50 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
23f60 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
23f70 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
23f80 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
23f90 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
23fa0 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
23fb0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23fc0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
23fd0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
23fe0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
23ff0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
24000 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24010 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
24020 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
24030 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24040 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
24050 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24060 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24070 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
24080 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
24090 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
240a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
240b0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
240c0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
240d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
240e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
240f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24100 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24110 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24120 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24130 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
24140 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  er==(pOp->opcode
24150 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
24160 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20   );.  res = 1;. 
24170 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
24180 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
24190 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
241a0 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72  ewind(db, pC, &r
241b0 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
241c0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
241d0 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
241e0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
241f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24200 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
24210 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46  es);.    pC->atF
24220 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31  irst = res==0 ?1
24230 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  :0;.    pC->defe
24240 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
24250 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
24260 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24270 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  E;.    pC->rowid
24280 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  IsValid = 0;.  }
24290 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
242a0 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65   (u8)res;.  asse
242b0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
242c0 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
242d0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
242e0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
242f0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
24300 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24310 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20 50 34   Next P1 P2 * P4
24320 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
24330 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
24340 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
24350 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
24360 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
24370 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
24380 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
24390 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
243a0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
243b0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
243c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
243d0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
243e0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
243f0 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
24400 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
24410 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24420 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
24430 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
24440 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
24450 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24460 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
24470 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
24480 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
24490 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
244a0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
244b0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
244c0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
244d0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
244e0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
244f0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
24500 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
24510 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
24520 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
24530 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
24540 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
24550 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
24560 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  ev P1 P2 * * P5.
24570 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
24580 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
24590 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
245a0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
245b0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
245c0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
245d0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
245e0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
245f0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
24600 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
24610 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
24620 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
24630 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
24640 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
24650 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
24660 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
24670 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
24680 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
24690 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
246a0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
246b0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ble..**.** P4 is
246c0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
246d0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
246e0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
246f0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
24700 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
24710 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
24720 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
24730 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
24740 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
24750 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
24760 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
24770 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
24780 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
24790 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
247a0 65 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75  erNext:    /* ju
247b0 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
247c0 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53  ITE_OMIT_MERGE_S
247d0 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  ORT.  pOp->opcod
247e0 65 20 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65 6e  e = OP_Next;.#en
247f0 64 69 66 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  dif.case OP_Prev
24800 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24810 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
24820 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
24830 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
24840 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
24850 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f  res;..  CHECK_FO
24860 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61  R_INTERRUPT;.  a
24870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24880 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24890 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
248a0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72  ert( pOp->p5<=Ar
248b0 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
248c0 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
248d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
248e0 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b  ;.  if( pC==0 ){
248f0 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20  .    break;  /* 
24900 53 65 65 20 74 69 63 6b 65 74 20 23 32 32 37 33  See ticket #2273
24910 20 2a 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   */.  }.  assert
24920 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d  ( pC->isSorter==
24930 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
24940 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 29 3b 0a  _SorterNext) );.
24950 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
24960 43 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  C) ){.    assert
24970 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
24980 50 5f 53 6f 72 74 65 72 4e 65 78 74 20 29 3b 0a  P_SorterNext );.
24990 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
249a0 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
249b0 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
249c0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d  }else{.    res =
249d0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
249e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
249f0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
24a00 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
24a10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
24a30 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
24a40 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
24a50 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
24a60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
24a70 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
24a80 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
24a90 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
24aa0 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 20 20  Previous );.    
24ab0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
24ac0 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
24ad0 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20  r, &res);.  }.  
24ae0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
24af0 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63  8)res;.  pC->cac
24b00 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
24b10 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65  _STALE;.  if( re
24b20 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  s==0 ){.    pc =
24b30 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
24b40 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20    if( pOp->p5 ) 
24b50 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
24b60 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66  >p5-1]++;.#ifdef
24b70 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
24b80 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
24b90 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
24ba0 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49    }.  pC->rowidI
24bb0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72  sValid = 0;.  br
24bc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24bd0 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
24be0 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
24bf0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
24c00 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  ds an SQL index 
24c10 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
24c20 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
24c30 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
24c40 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
24c50 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
24c60 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
24c70 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
24c80 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
24c90 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
24ca0 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
24cb0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
24cc0 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
24cd0 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
24ce0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
24cf0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
24d00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
24d10 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
24d20 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
24d30 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
24d40 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
24d50 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
24d60 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24d70 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
24d80 2a 20 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66 20  * in2 */.#ifdef 
24d90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47  SQLITE_OMIT_MERG
24da0 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70  E_SORT.  pOp->op
24db0 63 6f 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e 73  code = OP_IdxIns
24dc0 65 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65  ert;.#endif.case
24dd0 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
24de0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
24df0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24e00 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
24e10 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65  pCrsr;.  int nKe
24e20 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
24e30 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
24e40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24e50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24e60 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24e70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24e80 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24e90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24ea0 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d  >isSorter==(pOp-
24eb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
24ec0 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
24ed0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
24ee0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
24ef0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
24f00 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73  M_Blob );.  pCrs
24f10 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24f20 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
24f30 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  rsr!=0) ){.    a
24f40 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
24f50 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  le==0 );.    rc 
24f60 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
24f70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
24f80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
24f90 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28     if( isSorter(
24fa0 70 43 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  pC) ){.        r
24fb0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
24fc0 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20 70  orterWrite(db, p
24fd0 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20  C, pIn2);.      
24fe0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
24ff0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
25000 20 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49         zKey = pI
25010 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20 72  n2->z;.        r
25020 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25030 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
25040 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
25050 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
25060 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
25070 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
25080 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
25090 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
250a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ).            );
250b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
250c0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
250d0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
250e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
250f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25100 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
25110 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25120 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
25130 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
25140 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
25150 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
25160 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
25170 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
25180 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
25190 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
251a0 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
251b0 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
251c0 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
251d0 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
251e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
251f0 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
25200 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25210 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
25220 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
25230 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
25240 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
25250 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25260 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
25270 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  >p2+pOp->p3<=p->
25280 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65  nMem+1 );.  asse
25290 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
252a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
252b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
252c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
252d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
252e0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
252f0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
25300 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
25310 30 29 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  0) ){.    r.pKey
25320 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
25330 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
25340 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
25350 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20  ;.    r.flags = 
25360 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  0;.    r.aMem = 
25370 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
25380 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25390 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
253a0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
253b0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
253c0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
253d0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
253e0 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73  endif.    rc = s
253f0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
25400 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
25410 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
25420 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
25430 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
25440 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
25450 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
25460 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d  te(pCrsr);.    }
25470 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
25480 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25490 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61  =0 );.    pC->ca
254a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
254b0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62  E_STALE;.  }.  b
254c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
254d0 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
254e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
254f0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25500 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
25510 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
25520 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
25530 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
25540 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
25550 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
25560 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
25570 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
25580 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
25590 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
255a0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
255b0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
255c0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
255d0 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
255e0 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
255f0 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
25600 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
25610 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
25620 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  se */.  BtCursor
25630 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43   *pCrsr;.  VdbeC
25640 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
25650 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72   rowid;..  asser
25660 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25670 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25680 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25690 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
256a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
256b0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
256c0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75  ->pCursor;.  pOu
256d0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
256e0 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  ull;.  if( ALWAY
256f0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
25700 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25710 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
25720 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56  pC);.    if( NEV
25730 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
25740 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25750 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
25760 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25770 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
25780 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
25790 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43  0 );.    if( !pC
257a0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
257b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
257c0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
257d0 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
257e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
257f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
25800 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
25810 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
25820 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e    }.      pOut->
25830 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
25840 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
25850 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
25860 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25870 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
25880 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25890 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
258a0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
258b0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
258c0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
258d0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
258e0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
258f0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
25900 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
25910 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
25920 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
25930 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
25940 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
25950 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
25960 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
25970 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
25980 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
25990 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
259a0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
259b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
259c0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
259d0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
259e0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
259f0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
25a00 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
25a10 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
25a20 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
25a30 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69   epsilon .** pri
25a40 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  or to the compar
25a50 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
25a60 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
25a70 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65   like IdxGT exce
25a80 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68  pt.** that if th
25a90 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73  e key from regis
25aa0 74 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66  ter P3 is a pref
25ab0 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e  ix of the key in
25ac0 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20   the cursor,.** 
25ad0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
25ae0 6c 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77  lse whereas it w
25af0 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74  ould be true wit
25b00 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f  h IdxGT..*/./* O
25b10 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
25b20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
25b30 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
25b40 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
25b50 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
25b60 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
25b70 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
25b80 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20  mits the ROWID. 
25b90 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
25ba0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
25bb0 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
25bc0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
25bd0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
25be0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57  ignoring the ROW
25bf0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
25c00 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
25c10 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
25c20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
25c30 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
25c40 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
25c50 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
25c60 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
25c70 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
25c80 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
25c90 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20  n-zero then the 
25ca0 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63  key value is inc
25cb0 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73  reased by an eps
25cc0 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74  ilon prior .** t
25cd0 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
25ce0 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68  .  This makes th
25cf0 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69  e opcode work li
25d00 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73  ke IdxLE..*/.cas
25d10 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20  e OP_IdxLT:     
25d20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25d30 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b  case OP_IdxGE: {
25d40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25d50 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
25d60 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
25d70 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
25d80 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
25d90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25da0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25db0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25dc0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25dd0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25de0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25df0 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28  Ordered );.  if(
25e00 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
25e10 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
25e20 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25e30 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25e40 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25e50 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
25e60 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  5==1 );.    asse
25e70 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
25e80 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
25e90 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
25ea0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
25eb0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25ec0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69  pOp->p4.i;.    i
25ed0 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
25ee0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
25ef0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c  PACKED_INCRKEY |
25f00 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
25f10 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 65 6c 73  _MATCH;.    }els
25f20 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  e{.      r.flags
25f30 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
25f40 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
25f50 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
25f60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
25f70 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25f80 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
25f90 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
25fa0 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
25fb0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
25fc0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
25fd0 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  if.    rc = sqli
25fe0 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
25ff0 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65  pare(pC, &r, &re
26000 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  s);.    if( pOp-
26010 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
26020 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  T ){.      res =
26030 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65   -res;.    }else
26040 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
26050 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26060 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72  IdxGE );.      r
26070 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  es++;.    }.    
26080 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20  if( res>0 ){.   
26090 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
260a0 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  - 1 ;.    }.  }.
260b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
260c0 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
260d0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
260e0 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
260f0 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
26100 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
26110 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
26120 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
26130 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
26140 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
26150 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
26160 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
26170 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
26180 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
26190 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
261a0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
261b0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
261c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
261d0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
261e0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
261f0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
26200 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
26210 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
26220 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
26230 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
26240 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
26250 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
26260 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
26270 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
26280 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
26290 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
262a0 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
262b0 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
262c0 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
262d0 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
262e0 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
262f0 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
26300 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
26310 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
26320 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
26330 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
26340 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
26350 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e  gister P2.  If n
26360 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d  o page .** movem
26370 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
26380 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61   (because the ta
26390 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65  ble being droppe
263a0 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a  d was already .*
263b0 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  * the last one i
263c0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
263d0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
263e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
263f0 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f  r P2..** If AUTO
26400 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
26410 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  ed then a zero i
26420 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
26430 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
26440 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
26450 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
26460 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
26470 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
26480 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
26490 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20  nt iCnt;.  Vdbe 
264a0 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44  *pVdbe;.  int iD
264b0 62 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  b;..#ifndef SQLI
264c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
264d0 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
264e0 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
264f0 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
26500 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
26510 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
26520 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
26530 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
26540 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
26550 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
26560 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e  >=0 ){.      iCn
26570 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
26580 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
26590 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  ->activeVdbeCnt;
265a0 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
265b0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
265c0 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
265d0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
265e0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
265f0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
26600 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
26610 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
26620 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
26630 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
26640 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26650 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
26660 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
26670 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
26680 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
26690 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
266a0 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
266b0 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
266c0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
266d0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
266e0 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
266f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
26700 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
26710 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
26720 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
26730 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
26740 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
26750 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
26760 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
26770 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
26780 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
26790 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
267a0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
267b0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
267c0 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
267d0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
267e0 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
267f0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
26800 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
26810 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
26820 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26830 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
26840 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
26850 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
26860 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
26870 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
26880 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
26890 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
268a0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
268b0 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
268c0 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
268d0 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
268e0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
268f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26900 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
26910 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
26920 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
26930 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
26940 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
26950 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
26960 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
26970 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
26980 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
26990 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
269a0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
269b0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
269c0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
269d0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
269e0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
269f0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
26a00 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
26a10 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
26a20 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
26a30 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
26a40 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
26a50 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
26a60 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
26a70 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
26a80 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
26a90 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
26aa0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
26ab0 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
26ac0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
26ad0 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
26ae0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
26af0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
26b00 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
26b10 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
26b20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
26b30 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
26b40 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26b50 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
26b60 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
26b70 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
26b80 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
26b90 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
26ba0 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
26bb0 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21  k)1)<<pOp->p2))!
26bc0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
26bd0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
26be0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
26bf0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
26c00 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
26c10 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
26c20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
26c30 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
26c40 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
26c50 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
26c60 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
26c70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
26c80 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
26c90 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
26ca0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
26cb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
26cc0 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
26cd0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
26ce0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
26cf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26d00 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
26d10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
26d20 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
26d30 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
26d40 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
26d50 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
26d60 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
26d70 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
26d80 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
26d90 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
26da0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
26db0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
26dc0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
26dd0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
26de0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
26df0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
26e00 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
26e10 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
26e20 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
26e30 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
26e40 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
26e50 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
26e60 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
26e70 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
26e80 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
26e90 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
26ea0 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
26eb0 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
26ec0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
26ed0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
26ee0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
26ef0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
26f00 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
26f10 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
26f20 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
26f30 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
26f40 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
26f50 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
26f60 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
26f70 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
26f80 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
26f90 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
26fa0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
26fb0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
26fc0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
26fd0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
26fe0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
26ff0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
27000 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
27010 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
27020 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27030 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
27040 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
27050 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
27060 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
27070 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
27080 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
27090 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  b;..  pgno = 0;.
270a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
270b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
270c0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
270d0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
270e0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
270f0 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
27100 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
27110 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
27120 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
27130 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  t!=0 );.  if( pO
27140 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72  p->opcode==OP_Cr
27150 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20  eateTable ){.   
27160 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45   /* flags = BTRE
27170 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20  E_INTKEY; */.   
27180 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
27190 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  NTKEY;.  }else{.
271a0 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
271b0 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20  E_BLOBKEY;.  }. 
271c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
271d0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
271e0 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66  b->pBt, &pgno, f
271f0 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  lags);.  pOut->u
27200 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65  .i = pgno;.  bre
27210 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27220 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
27230 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
27240 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
27250 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
27260 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
27270 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
27280 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
27290 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
272a0 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a  lause P4. .**.**
272b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
272c0 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
272d0 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
272e0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
272f0 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
27300 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
27310 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
27320 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
27330 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
27340 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
27350 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
27360 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
27370 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
27380 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
27390 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
273a0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
273b0 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
273c0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
273d0 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
273e0 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
273f0 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
27400 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
27410 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
27420 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
27430 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
27440 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27450 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
27460 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
27470 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
27480 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
27490 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
274a0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
274b0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
274c0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
274d0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
274e0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
274f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
27500 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
27510 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
27520 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65  ded) );.  /* Use
27530 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74  d to be a condit
27540 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a  ional */ {.    z
27550 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
27560 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
27570 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
27580 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
27590 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
275a0 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
275b0 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
275c0 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
275d0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
275e0 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
275f0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
27600 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
27610 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
27620 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
27630 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
27640 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
27650 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
27660 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
27670 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
27680 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
27690 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
276a0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
276b0 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
276c0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
276d0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
276e0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
276f0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
27700 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
27710 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
27720 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
27730 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
27740 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
27750 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
27760 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
27770 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
27780 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
27790 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
277a0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
277b0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
277c0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71   }.  if( rc ) sq
277d0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
277e0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
277f0 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
27800 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
27810 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
27820 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
27830 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
27840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
27850 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
27860 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
27870 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
27880 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
27890 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
278a0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
278b0 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
278c0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
278d0 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
278e0 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
278f0 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
27900 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
27910 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
27920 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
27930 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
27940 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
27950 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
27960 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
27970 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27980 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
27990 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
279a0 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
279b0 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
279c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
279d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
279e0 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
279f0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
27a00 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
27a10 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
27a20 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
27a30 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
27a40 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
27a50 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
27a60 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
27a70 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
27a80 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
27a90 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
27aa0 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27ab0 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27ac0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27ad0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27ae0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27af0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27b00 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27b10 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
27b20 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
27b30 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
27b40 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
27b50 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
27b60 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
27b70 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
27b80 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
27b90 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
27ba0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27bb0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27bc0 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
27bd0 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
27be0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27bf0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
27c00 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
27c10 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
27c20 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
27c30 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
27c40 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
27c50 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
27c60 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
27c70 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
27c80 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
27c90 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27ca0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
27cb0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
27cc0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
27cd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27ce0 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
27cf0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
27d00 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
27d10 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
27d20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
27d30 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
27d40 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
27d50 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
27d60 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
27d70 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
27d80 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
27d90 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
27da0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
27db0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
27dc0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
27dd0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
27de0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
27df0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
27e00 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
27e10 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
27e20 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
27e30 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
27e40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
27e50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27e60 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
27e70 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
27e80 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
27e90 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
27ea0 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
27eb0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
27ec0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
27ed0 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
27ee0 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
27ef0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
27f00 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
27f10 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
27f20 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
27f30 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
27f40 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
27f50 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
27f60 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
27f70 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
27f80 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
27f90 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
27fa0 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
27fb0 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
27fc0 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
27fd0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
27fe0 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
27ff0 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
28000 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
28010 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
28020 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
28030 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
28040 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
28050 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
28060 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
28070 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
28080 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
28090 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
280a0 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
280b0 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
280c0 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
280d0 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
280e0 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
280f0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
28100 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
28110 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
28120 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
28130 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
28140 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
28150 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
28160 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
28170 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
28180 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
28190 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
281a0 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
281b0 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
281c0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
281d0 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
281e0 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
281f0 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
28200 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
28210 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
28220 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
28230 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
28240 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
28250 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
28260 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
28270 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
28280 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
28290 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
282a0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
282b0 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
282c0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
282d0 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
282e0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
282f0 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
28300 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20  emaining */.  . 
28310 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
28320 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
28330 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
28340 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
28350 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
28360 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
28370 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
28380 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
28390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
283a0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
283b0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
283c0 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
283d0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
283e0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
283f0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
28400 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
28410 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
28420 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
28430 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
28440 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
28450 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
28460 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
28470 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
28480 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
28490 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
284a0 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
284b0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
284c0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
284d0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
284e0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
284f0 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
28500 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
28510 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
28520 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
28530 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
28540 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28560 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
28570 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
28580 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
28590 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
285a0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
285b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
285c0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
285d0 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
285e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
285f0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
28600 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
28610 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
28620 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
28630 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
28640 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
28650 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
28660 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
28670 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
28680 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
28690 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
286a0 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
286b0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
286c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
286d0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
286e0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
286f0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
28700 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28710 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
28720 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
28730 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
28740 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
28750 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
28760 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
28770 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
28780 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
28790 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
287a0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
287b0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
287c0 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
287d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
287e0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
287f0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
28800 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
28810 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
28820 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
28830 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
28840 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
28850 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
28860 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
28870 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
28880 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
28890 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
288a0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
288b0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
288c0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
288d0 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
288e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
288f0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
28900 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
28910 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
28920 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
28930 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
28940 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
28950 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
28960 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
28970 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
28980 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
28990 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
289a0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
289b0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
289c0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
289d0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
289e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
289f0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
28a00 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
28a10 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
28a20 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
28a30 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
28a40 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28a50 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
28a60 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
28a70 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
28a80 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
28a90 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
28aa0 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
28ab0 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
28ac0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28ad0 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
28ae0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
28af0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
28b00 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
28b10 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
28b20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
28b30 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
28b40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
28b50 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
28b60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
28b70 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
28b80 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
28b90 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
28ba0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
28bb0 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
28bc0 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
28bd0 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
28be0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
28bf0 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
28c00 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
28c10 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
28c20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
28c30 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
28c40 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
28c50 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
28c60 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
28c70 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
28c80 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
28c90 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
28ca0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
28cb0 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
28cc0 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
28cd0 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
28ce0 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
28cf0 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
28d00 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
28d10 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
28d20 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
28d30 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
28d40 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
28d50 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
28d60 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
28d70 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
28d80 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
28d90 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
28da0 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
28db0 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
28dc0 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
28dd0 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
28de0 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
28df0 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
28e00 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
28e10 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
28e20 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
28e30 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28e40 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
28e50 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
28e60 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
28e70 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
28e80 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
28e90 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
28ea0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28eb0 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
28ec0 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
28ed0 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
28ee0 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
28ef0 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
28f00 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
28f10 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
28f20 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
28f30 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
28f40 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
28f50 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
28f60 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
28f70 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
28f80 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
28f90 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
28fa0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
28fb0 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
28fc0 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
28fd0 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
29000 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
29010 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
29020 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29030 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
29040 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
29050 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
29060 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
29070 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
29080 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
29090 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
290a0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
290b0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
290c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
290d0 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
290e0 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
290f0 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
29100 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
29110 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
29120 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
29130 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
29140 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
29150 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
29160 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
29170 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
29180 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
29190 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
291a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
291b0 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
291c0 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
291d0 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
291e0 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
291f0 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
29200 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
29210 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
29240 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
29250 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
29280 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
29290 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
292a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
292b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
292c0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
292d0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
292e0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
292f0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
29300 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
29310 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
29320 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29330 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
29340 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
29350 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
29360 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
29370 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
29380 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
29390 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
293a0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
293b0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
293c0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
293d0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
293e0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
293f0 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
29400 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
29410 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
29420 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
29430 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
29440 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
29450 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
29460 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
29470 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
29480 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
29490 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
294a0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
294b0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
294c0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
294d0 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
294e0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
294f0 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
29500 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
29510 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
29520 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
29530 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
29540 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
29550 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29560 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
29570 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
29580 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
29590 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
295a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
295b0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
295c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
295d0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
295e0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
295f0 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
29600 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
29610 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
29620 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
29630 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
29640 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
29650 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
29660 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
29670 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
29680 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
29690 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
296a0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
296b0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
296c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
296d0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
296e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
296f0 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
29700 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
29710 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
29720 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
29730 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
29740 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
29750 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
29760 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
29770 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
29780 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
29790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
297a0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
297b0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
297c0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
297d0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
297e0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
297f0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
29800 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
29810 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
29820 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
29830 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
29840 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
29850 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
29860 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
29870 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
29880 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
29890 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
298a0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
298b0 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
298c0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
298d0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
298e0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
298f0 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
29900 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
29910 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
29920 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
29930 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
29940 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
29950 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29960 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
29970 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
29980 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
29990 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
299a0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
299b0 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
299c0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
299d0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
299e0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
299f0 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
29a00 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
29a10 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
29a20 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
29a30 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
29a40 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
29a50 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
29a60 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
29a70 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
29a80 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
29a90 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
29aa0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
29ab0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
29ac0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
29ad0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
29ae0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
29af0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
29b00 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
29b10 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
29b20 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
29b30 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
29b40 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
29b50 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
29b60 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
29b70 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
29b80 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
29b90 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
29ba0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29bb0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29bc0 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
29bd0 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
29be0 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
29bf0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
29c00 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
29c10 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
29c20 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
29c30 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
29c40 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
29c50 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
29c60 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
29c70 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
29c80 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
29c90 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
29ca0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
29cb0 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
29cc0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
29cd0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
29ce0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
29cf0 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
29d00 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
29d10 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
29d20 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
29d30 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
29d40 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
29d50 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
29d60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
29d70 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
29d80 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
29d90 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
29da0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
29db0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
29dc0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
29dd0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
29de0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
29df0 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
29e00 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
29e10 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
29e20 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
29e30 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
29e40 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
29e50 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
29e60 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
29e70 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
29e80 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
29e90 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
29ea0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
29eb0 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
29ec0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
29ed0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
29ee0 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
29ef0 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
29f00 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
29f10 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
29f20 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
29f30 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
29f40 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
29f50 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
29f60 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
29f70 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
29f80 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29f90 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
29fa0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
29fb0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
29fc0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
29fd0 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
29fe0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
29ff0 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2a000 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2a010 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2a020 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2a030 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2a040 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2a050 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
2a060 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
2a070 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
2a080 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
2a090 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
2a0a0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
2a0b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
2a0c0 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
2a0d0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
2a0e0 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
2a0f0 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
2a100 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
2a110 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
2a120 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2a130 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
2a140 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
2a150 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2a160 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
2a170 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
2a180 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2a190 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2a1a0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2a1b0 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2a1c0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2a1d0 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2a1e0 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2a1f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2a200 76 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65  valid;.      pMe
2a210 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
2a220 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
2a230 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
2a240 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
2a250 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
2a260 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
2a270 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2a280 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
2a290 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
2a2a0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2a2b0 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
2a2c0 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e  rt( pc==pFrame->
2a2d0 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
2a2e0 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
2a2f0 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
2a300 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
2a310 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  e->lastRowid = l
2a320 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
2a330 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
2a340 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e  >nChange;.  p->n
2a350 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
2a360 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
2a370 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
2a380 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
2a390 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
2a3a0 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
2a3b0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
2a3c0 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
2a3d0 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
2a3e0 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
2a3f0 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
2a400 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b  *)&aMem[p->nMem+
2a410 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  1];.  p->aOp = a
2a420 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
2a430 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
2a440 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
2a450 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28  p->aOnceFlag = (
2a460 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  u8 *)&p->apCsr[p
2a470 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d  ->nCursor];.  p-
2a480 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72  >nOnceFlag = pPr
2a490 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20  ogram->nOnce;.  
2a4a0 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65  pc = -1;.  memse
2a4b0 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
2a4c0 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
2a4d0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2a4e0 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
2a4f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a500 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2a510 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
2a520 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
2a530 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
2a540 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
2a550 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
2a560 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
2a570 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
2a580 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2a590 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
2a5a0 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
2a5b0 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
2a5c0 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
2a5d0 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
2a5e0 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
2a5f0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
2a600 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
2a610 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
2a620 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
2a630 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
2a640 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
2a650 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
2a660 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2a670 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
2a680 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2a690 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
2a6a0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2a6b0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
2a6c0 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
2a6d0 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2a6e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2a6f0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
2a700 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2a710 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  se */.  VdbeFram
2a720 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
2a730 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20   *pIn;.  pFrame 
2a740 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2a750 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
2a760 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
2a770 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
2a780 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
2a790 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
2a7a0 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
2a7b0 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
2a7c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
2a7d0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2a7e0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2a7f0 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
2a800 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2a810 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
2a820 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
2a830 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63   * * *.**.** Inc
2a840 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2a850 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2a860 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2a870 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2a880 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2a890 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2a8a0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2a8b0 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2a8c0 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2a8d0 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2a8e0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2a8f0 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2a900 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2a910 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2a920 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2a930 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2a940 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a950 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2a960 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2a970 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
2a980 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2a990 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2a9a0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2a9b0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2a9c0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2a9d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2a9e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2a9f0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2aa00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2aa10 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
2aa20 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2aa30 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
2aa40 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
2aa50 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
2aa60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2aa70 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2aa80 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2aa90 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
2aaa0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2aab0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2aac0 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
2aad0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
2aae0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2aaf0 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
2ab00 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
2ab10 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
2ab20 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
2ab30 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
2ab40 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
2ab50 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2ab60 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
2ab70 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2ab80 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
2ab90 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2aba0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
2abb0 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
2abc0 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
2abd0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
2abe0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
2abf0 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64  >p1 ){.    if( d
2ac00 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2ac10 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2ac20 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2ac30 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2ac40 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20  straint==0 ) pc 
2ac50 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
2ac60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2ac70 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2ac80 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2ac90 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
2aca0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2acb0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
2acc0 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
2acd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2ace0 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2acf0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2ad00 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2ad10 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2ad20 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2ad30 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2ad40 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2ad50 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2ad60 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2ad70 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2ad80 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2ad90 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2ada0 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2adb0 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2adc0 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2add0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2ade0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2adf0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2ae00 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2ae10 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2ae20 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2ae30 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2ae40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2ae50 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2ae60 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70   in2 */.  Mem *p
2ae70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65  In1;.  VdbeFrame
2ae80 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2ae90 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2aea0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2aeb0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2aec0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2aed0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2aee0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2aef0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2af00 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2af10 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2af20 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2af30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2af40 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2af50 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2af60 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2af70 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2af80 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2af90 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2afa0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2afb0 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2afc0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2afd0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2afe0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2aff0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2b000 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2b010 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2b020 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2b030 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
2b040 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2b050 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2b060 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2b070 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b080 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b090 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b0a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b0b0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b0c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b0d0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b0e0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b0f0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b100 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2b110 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b120 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b140 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b150 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b160 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b170 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2b180 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b190 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b1a0 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2b1b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2b1c0 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2b1d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
2b1e0 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a  ess than zero, j
2b1f0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2b200 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b210 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b220 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b230 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b240 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b250 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b260 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b270 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b280 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b290 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2b2a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2b2b0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2b2c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b2d0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2b2e0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2b2f0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
2b300 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2b310 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2b320 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b330 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
2b340 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
2b350 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2b360 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b370 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2b380 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2b390 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2b3a0 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2b3b0 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2b3c0 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2b3d0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2b3e0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2b3f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2b400 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2b410 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2b420 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2b430 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2b440 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2b450 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2b460 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
2b470 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b480 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b490 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b4a0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b4b0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b4c0 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
2b4d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70  pOp->p3;.  if( p
2b4e0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
2b4f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b500 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2b510 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b520 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2b530 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2b540 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2b550 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2b560 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2b570 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2b580 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2b590 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2b5a0 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
2b5b0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
2b5c0 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
2b5d0 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
2b5e0 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
2b5f0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
2b600 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
2b610 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
2b620 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
2b630 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
2b640 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
2b650 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
2b660 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
2b670 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
2b680 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
2b690 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2b6a0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2b6b0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2b6c0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2b6d0 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2b6e0 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2b6f0 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2b700 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2b710 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2b720 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2b730 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2b740 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2b750 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2b760 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2b770 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2b780 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2b790 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Rec);.    sqlite
2b7a0 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2b7b0 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  e(pRec);.  }.  c
2b7c0 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
2b7d0 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
2b7e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2b7f0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
2b800 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  m );.  ctx.pMem 
2b810 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2b820 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2b830 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2b840 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2b850 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2b860 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2b870 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2b880 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2b890 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2b8a0 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2b8b0 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2b8c0 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2b8d0 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2b8e0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
2b8f0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2b900 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2b910 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2b920 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2b930 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2b940 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2b950 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2b960 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2b970 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2b980 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2b990 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2b9a0 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2b9b0 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2b9c0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2b9d0 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2b9e0 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2b9f0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2ba00 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2ba10 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2ba20 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2ba30 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2ba40 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  Error;.  }.  if(
2ba50 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b   ctx.skipFlag ){
2ba60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2ba70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2ba80 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2ba90 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2baa0 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2bab0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2bac0 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2bad0 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64    }..  sqlite3Vd
2bae0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
2baf0 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  x.s);..  break;.
2bb00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2bb10 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2bb20 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
2bb30 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2bb40 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2bb50 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2bb60 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2bb70 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2bb80 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2bb90 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2bba0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2bbb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2bbc0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2bbd0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2bbe0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2bbf0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2bc00 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2bc10 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2bc20 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2bc30 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2bc40 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2bc50 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2bc60 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2bc70 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2bc80 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2bc90 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2bca0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2bcb0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2bcc0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2bcd0 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2bce0 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2bcf0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2bd00 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2bd10 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2bd20 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2bd30 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2bd40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bd50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
2bd60 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
2bd70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2bd80 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2bd90 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2bda0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2bdb0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2bdc0 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2bdd0 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2bde0 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2bdf0 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2be00 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2be10 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2be20 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2be30 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2be40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2be50 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2be60 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2be70 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2be80 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2be90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2bea0 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2beb0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2bec0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2bed0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bee0 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2bef0 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2bf00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2bf10 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2bf20 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2bf30 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2bf40 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2bf50 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2bf60 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2bf70 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2bf80 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2bf90 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2bfa0 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2bfb0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2bfc0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2bfd0 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2bfe0 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2bff0 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2c000 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2c010 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2c020 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2c030 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2c040 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2c050 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2c060 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2c070 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2c080 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2c090 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2c0a0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2c0b0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2c0c0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2c0d0 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2c0e0 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2c0f0 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2c100 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2c110 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2c120 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2c150 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2c160 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2c170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2c180 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2c190 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2c1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2c1b0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2c1c0 2a 2f 0a 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20  */..  aRes[0] = 
2c1d0 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61  0;.  aRes[1] = a
2c1e0 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61  Res[2] = -1;.  a
2c1f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
2c200 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2c210 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20  T_PASSIVE.      
2c220 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2c230 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
2c240 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ULL.       || pO
2c250 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2c260 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
2c270 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
2c280 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
2c290 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2c2a0 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
2c2b0 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
2c2c0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
2c2d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2c2e0 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
2c2f0 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
2c300 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
2c310 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
2c320 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
2c330 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2c340 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
2c350 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
2c360 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
2c370 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
2c380 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c390 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
2c3a0 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
2c3b0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
2c3c0 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2c3d0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2c3e0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2c3f0 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2c400 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2c410 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2c420 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2c430 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2c440 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2c450 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2c460 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2c470 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2c480 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2c490 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2c4a0 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2c4b0 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2c4c0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2c4d0 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2c4e0 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2c4f0 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2c500 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2c510 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2c520 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2c530 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2c540 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2c550 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2c560 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2c570 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2c580 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2c5b0 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2c5c0 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2c5d0 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2c5f0 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2c600 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2c610 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c630 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2c640 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2c670 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2c680 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2c690 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
2c6a0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2c6b0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2c6c0 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2c6d0 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2c6e0 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65  */.#endif..  eNe
2c6f0 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2c700 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2c710 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2c720 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2c730 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2c740 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2c750 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2c760 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2c770 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2c780 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c790 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c7a0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2c7b0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c7c0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2c7d0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2c7e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2c7f0 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2c800 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2c810 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2c820 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c830 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2c840 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70 42  db->nDb );..  pB
2c850 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2c860 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
2c870 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
2c880 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
2c890 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
2c8a0 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
2c8b0 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
2c8c0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2c8d0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
2c8e0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
2c8f0 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
2c900 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
2c910 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
2c920 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
2c930 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c940 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
2c950 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
2c960 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
2c970 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
2c980 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
2c990 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
2c9a0 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
2c9b0 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
2c9c0 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
2c9d0 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
2c9e0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
2c9f0 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
2ca00 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
2ca10 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ca20 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
2ca30 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
2ca40 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
2ca50 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
2ca60 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
2ca70 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
2ca80 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
2ca90 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
2caa0 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
2cab0 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
2cac0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
2cad0 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
2cae0 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
2caf0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2cb00 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
2cb10 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cb20 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
2cb30 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
2cb40 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  t || db->activeV
2cb50 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  dbeCnt>1 ){.    
2cb60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2cb70 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
2cb80 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2cb90 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
2cba0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2cbb0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2cbc0 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2cbd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2cbe0 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
2cbf0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cc00 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
2cc10 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
2cc20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
2cc30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
2cc40 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
2cc50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cc60 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
2cc70 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
2cc80 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
2cc90 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
2cca0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
2ccb0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
2ccc0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
2ccd0 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
2cce0 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
2ccf0 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
2cd00 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
2cd10 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
2cd20 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
2cd30 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
2cd40 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
2cd50 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
2cd60 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
2cd70 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2cd80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
2cd90 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
2cda0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
2cdb0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2cdc0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
2cdd0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2cde0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2cdf0 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
2ce00 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2ce10 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2ce20 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
2ce30 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
2ce40 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
2ce50 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
2ce60 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
2ce70 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
2ce80 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
2ce90 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
2cea0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2ceb0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2cec0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2ced0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
2cee0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
2cef0 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
2cf00 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
2cf10 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
2cf20 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
2cf30 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
2cf40 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
2cf50 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
2cf60 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
2cf70 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
2cf80 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
2cf90 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
2cfa0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
2cfb0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2cfc0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2cfd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2cfe0 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
2cff0 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
2d000 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2d010 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
2d020 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
2d030 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
2d040 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
2d050 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2d060 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2d070 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
2d080 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2d090 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2d0a0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  ew);..  pOut = &
2d0b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2d0c0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2d0d0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
2d0e0 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
2d0f0 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
2d100 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2d110 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
2d120 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
2d130 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
2d140 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
2d150 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
2d160 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2d170 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
2d180 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2d190 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
2d1a0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
2d1b0 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
2d1c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2d1d0 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
2d1e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2d1f0 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
2d200 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
2d210 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
2d220 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
2d230 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
2d240 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
2d250 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
2d260 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
2d270 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
2d280 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
2d290 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2d2a0 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
2d2b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2d2c0 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d  Vacuum: {.  rc =
2d2d0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2d2e0 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
2d2f0 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2d300 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
2d310 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2d320 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
2d330 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
2d340 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
2d350 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
2d360 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
2d370 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
2d380 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
2d390 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
2d3a0 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
2d3b0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
2d3c0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2d3d0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
2d3e0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2d3f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2d400 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2d410 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
2d420 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
2d430 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
2d440 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
2d450 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d460 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2d470 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
2d480 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2d490 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
2d4a0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
2d4b0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2d4c0 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2d4d0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2d4e0 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
2d4f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2d500 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2d510 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2d520 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2d530 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2d540 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2d550 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2d560 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2d570 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2d580 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
2d590 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
2d5a0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2d5b0 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
2d5c0 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
2d5d0 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
2d5e0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
2d5f0 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
2d600 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
2d610 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
2d620 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
2d630 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
2d640 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
2d650 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
2d660 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
2d670 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
2d680 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
2d690 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
2d6a0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2d6b0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2d6c0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2d6d0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2d6e0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2d6f0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2d700 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2d710 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2d720 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2d730 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2d740 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2d750 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
2d760 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2d770 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2d780 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2d790 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2d7a0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2d7b0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2d7c0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2d7d0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2d7e0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2d7f0 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2d800 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2d810 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2d820 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2d830 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2d840 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2d850 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2d860 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2d870 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2d880 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2d890 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2d8a0 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2d8b0 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2d8c0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2d8d0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2d8e0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2d8f0 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2d900 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2d910 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2d920 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2d930 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2d940 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2d950 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2d960 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2d970 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2d980 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2d990 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2d9a0 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2d9b0 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2d9c0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2d9d0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2d9e0 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2d9f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
2da00 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2da10 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29  (yDbMask)1)<<p1)
2da20 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
2da30 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
2da40 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
2da50 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
2da60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
2da70 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
2da80 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
2da90 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
2daa0 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
2dab0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
2dac0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2dad0 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
2dae0 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
2daf0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2db00 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
2db10 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
2db20 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
2db30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2db40 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2db50 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2db60 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
2db70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2db80 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2db90 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
2dba0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2dbb0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
2dbc0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
2dbd0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2dbe0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
2dbf0 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
2dc00 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
2dc10 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
2dc20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
2dc30 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
2dc40 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
2dc50 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
2dc60 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
2dc70 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
2dc80 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
2dc90 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
2dca0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
2dcb0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
2dcc0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
2dcd0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
2dce0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
2dcf0 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
2dd00 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2dd10 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
2dd20 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
2dd30 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
2dd40 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62  Tab ) importVtab
2dd50 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d  ErrMsg(p, pVTab-
2dd60 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b  >pVtab);.  break
2dd70 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2dd80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2dd90 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2dda0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2ddb0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2ddc0 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
2ddd0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2dde0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2ddf0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2de00 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2de10 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
2de20 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f  ate method.** fo
2de30 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
2de40 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
2de50 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  : {.  rc = sqlit
2de60 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2de70 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2de80 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72  p->p4.z, &p->zEr
2de90 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  rMsg);.  break;.
2dea0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2deb0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dec0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ded0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2dee0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2def0 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
2df00 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2df10 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
2df20 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
2df30 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
2df40 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
2df50 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
2df60 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
2df70 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
2df80 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  y: {.  p->inVtab
2df90 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63  Method = 2;.  rc
2dfa0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
2dfb0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
2dfc0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2dfd0 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
2dfe0 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  thod = 0;.  brea
2dff0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e000 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e010 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e020 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e030 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e040 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
2e050 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e060 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2e070 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2e080 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2e090 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2e0a0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
2e0b0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
2e0c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
2e0d0 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
2e0e0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
2e0f0 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
2e100 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
2e110 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
2e120 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
2e130 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
2e140 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2e150 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2e160 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2e170 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2e180 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2e190 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
2e1a0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
2e1b0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2e1c0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2e1d0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
2e1e0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
2e1f0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2e200 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
2e210 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d  pModule);.  rc =
2e220 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
2e230 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
2e240 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  sor);.  importVt
2e250 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2e260 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  b);.  if( SQLITE
2e270 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
2e280 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
2e290 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2e2a0 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
2e2b0 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
2e2c0 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
2e2d0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73      /* Initialis
2e2e0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
2e2f0 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
2e300 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
2e310 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
2e320 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
2e330 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
2e340 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e350 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
2e360 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64        pCur->pMod
2e370 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f  ule = pVtabCurso
2e380 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  r->pVtab->pModul
2e390 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
2e3a0 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
2e3b0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
2e3c0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
2e3d0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2e3e0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2e3f0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e400 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e410 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e420 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e430 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e440 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
2e450 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2e460 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
2e470 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
2e480 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
2e490 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2e4a0 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
2e4b0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
2e4c0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
2e4d0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
2e4e0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
2e4f0 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
2e500 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
2e510 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
2e520 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
2e530 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
2e540 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
2e550 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
2e560 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
2e570 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2e580 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2e590 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
2e5a0 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
2e5b0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
2e5c0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
2e5d0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
2e5e0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
2e5f0 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
2e600 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2e610 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
2e620 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
2e630 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
2e640 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
2e650 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
2e660 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
2e670 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
2e680 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
2e690 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
2e6a0 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
2e6b0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
2e6c0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
2e6d0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
2e6e0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
2e6f0 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
2e700 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
2e710 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
2e720 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
2e730 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
2e740 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
2e750 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
2e760 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
2e770 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
2e780 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
2e790 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2e7a0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2e7b0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
2e7c0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
2e7d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2e7e0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2e7f0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2e800 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
2e810 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
2e820 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
2e830 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2e840 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
2e850 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2e860 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
2e870 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
2e880 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2e890 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2e8a0 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
2e8b0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2e8c0 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
2e8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2e8e0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2e8f0 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2e900 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2e910 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  or;.  pVtab = pV
2e920 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2e930 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2e940 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
2e950 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
2e960 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
2e970 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
2e980 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
2e990 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
2e9a0 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
2e9b0 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
2e9c0 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
2e9d0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
2e9e0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
2e9f0 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
2ea00 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
2ea10 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a  r method */.  {.
2ea20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
2ea30 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2ea40 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  g;.    for(i = 0
2ea50 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2ea60 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
2ea70 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
2ea80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ea90 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41 72  emStoreType(apAr
2eaa0 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  g[i]);.    }..  
2eab0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2eac0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
2ead0 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
2eae0 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51  (pVtabCursor, iQ
2eaf0 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
2eb00 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
2eb10 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
2eb20 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f  od = 0;.    impo
2eb30 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2eb40 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2eb50 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2eb60 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2eb70 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2eb80 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a  Cursor);.    }..
2eb90 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
2eba0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2ebb0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
2ebc0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
2ebd0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2ebe0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ebf0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ec00 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ec10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ec20 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ec30 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
2ec40 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2ec50 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
2ec60 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
2ec70 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
2ec80 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
2ec90 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
2eca0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
2ecb0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
2ecc0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
2ecd0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
2ece0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
2ecf0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2ed00 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2ed10 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2ed20 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
2ed30 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
2ed40 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
2ed50 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
2ed60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2ed70 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2ed80 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2ed90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2eda0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
2edb0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
2edc0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2edd0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
2ede0 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
2edf0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2ee00 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
2ee10 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2ee20 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
2ee30 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2ee40 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2ee50 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2ee60 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2ee70 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2ee80 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
2ee90 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
2eea0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
2eeb0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
2eec0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
2eed0 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
2eee0 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
2eef0 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
2ef00 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
2ef10 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
2ef20 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
2ef30 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
2ef40 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
2ef50 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
2ef60 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
2ef70 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
2ef80 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
2ef90 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
2efa0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2efb0 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
2efc0 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
2efd0 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
2efe0 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
2eff0 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ..  rc = pModule
2f000 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
2f010 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
2f020 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
2f030 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72  ;.  importVtabEr
2f040 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2f050 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
2f060 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
2f070 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
2f080 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
2f090 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
2f0a0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
2f0b0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
2f0c0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
2f0d0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
2f0e0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2f0f0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
2f100 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
2f110 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
2f120 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
2f130 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
2f140 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
2f150 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
2f160 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2f170 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
2f180 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
2f190 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2f1a0 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
2f1b0 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52  t.s);.  REGISTER
2f1c0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2f1d0 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
2f1e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
2f1f0 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
2f200 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2f210 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
2f220 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2f230 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f240 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f250 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f260 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f270 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f280 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f290 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
2f2a0 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
2f2b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
2f2c0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
2f2d0 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
2f2e0 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
2f2f0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2f300 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
2f310 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
2f320 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
2f330 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
2f340 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
2f350 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2f360 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2f370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
2f380 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
2f390 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
2f3a0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2f3b0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2f3c0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2f3d0 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
2f3e0 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
2f3f0 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
2f400 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2f410 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2f420 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2f430 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2f440 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
2f450 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2f460 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f470 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2f480 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2f490 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2f4a0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
2f4b0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2f4c0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
2f4d0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2f4e0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
2f4f0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
2f500 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
2f510 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
2f520 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
2f530 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
2f540 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
2f550 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
2f560 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
2f570 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
2f580 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
2f590 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
2f5a0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
2f5b0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
2f5c0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
2f5d0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
2f5e0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
2f5f0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
2f600 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
2f610 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
2f620 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2f630 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
2f640 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
2f650 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2f660 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2f670 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74  od = 0;.  import
2f680 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2f690 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  tab);.  if( rc==
2f6a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f6b0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
2f6c0 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
2f6d0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20  Cursor);.  }..  
2f6e0 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2f6f0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2f700 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2f710 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2f720 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2f730 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2f740 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2f750 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2f760 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f770 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2f780 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
2f790 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
2f7a0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2f7b0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2f7c0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2f7d0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2f7e0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2f7f0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2f800 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2f810 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
2f820 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
2f830 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2f840 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
2f850 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
2f860 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
2f870 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
2f880 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
2f890 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2f8a0 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
2f8b0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2f8c0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2f8d0 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
2f8e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2f8f0 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
2f900 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
2f910 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2f920 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
2f930 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2f940 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
2f950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
2f960 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
2f970 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Str );.  testcas
2f980 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
2f990 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
2f9a0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
2f9b0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
2f9c0 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61  16BE );.  testca
2f9d0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
2f9e0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
2f9f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2fa00 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2fa10 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45  ng(pName, SQLITE
2fa20 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63  _UTF8);.  if( rc
2fa30 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2fa40 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70     rc = pVtab->p
2fa50 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
2fa60 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
2fa70 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62  ;.    importVtab
2fa80 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2fa90 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
2faa0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
2fab0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2fac0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fad0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2fae0 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65   Opcode: VUpdate
2faf0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2fb00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2fb10 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2fb20 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2fb30 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2fb40 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2fb50 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2fb60 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2fb70 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
2fb80 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
2fb90 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
2fba0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
2fbb0 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
2fbc0 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
2fbd0 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
2fbe0 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
2fbf0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
2fc00 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
2fc10 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
2fc20 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
2fc30 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
2fc40 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
2fc50 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
2fc60 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
2fc70 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
2fc80 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
2fc90 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
2fca0 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
2fcb0 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
2fcc0 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
2fcd0 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
2fce0 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
2fcf0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
2fd00 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
2fd10 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
2fd20 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
2fd30 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
2fd40 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
2fd50 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
2fd60 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
2fd70 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2fd80 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
2fd90 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
2fda0 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
2fdb0 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
2fdc0 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
2fdd0 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
2fde0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
2fdf0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
2fe00 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
2fe10 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
2fe20 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
2fe30 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
2fe40 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2fe50 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
2fe60 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
2fe70 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
2fe80 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
2fe90 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
2fea0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
2feb0 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
2fec0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
2fed0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
2fee0 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
2fef0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2ff00 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
2ff10 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
2ff20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
2ff30 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
2ff40 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2ff50 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2ff60 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
2ff70 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
2ff80 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
2ff90 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
2ffa0 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
2ffb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2ffc0 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f  ==1        || pO
2ffd0 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20  p->p5==OE_Fail  
2ffe0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
2fff0 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20  Rollback .      
30000 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
30010 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35  Abort || pOp->p5
30020 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70  ==OE_Ignore || p
30030 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
30040 63 65 0a 20 20 29 3b 0a 20 20 70 56 74 61 62 20  ce.  );.  pVtab 
30050 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
30060 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
30070 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
30080 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
30090 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70  dule;.  nArg = p
300a0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
300b0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
300c0 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
300d0 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e  ALWAYS(pModule->
300e0 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20  xUpdate) ){.    
300f0 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
30100 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f  t = db->vtabOnCo
30110 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72  nflict;.    apAr
30120 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
30130 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
30140 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
30150 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
30160 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
30170 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29  memIsValid(pX) )
30180 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
30190 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b  ToChange(p, pX);
301a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
301b0 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
301c0 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
301d0 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
301e0 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
301f0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
30200 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
30210 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
30220 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
30230 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
30240 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
30250 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
30260 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
30270 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
30280 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30290 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
302a0 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
302b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
302c0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
302d0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
302e0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
302f0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
30300 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
30310 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
30320 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  }.    if( rc==SQ
30330 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
30340 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62  && pOp->p4.pVtab
30350 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b  ->bConstraint ){
30360 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
30370 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p5==OE_Ignore ){
30380 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
30390 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
303a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
303b0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
303c0 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70  (pOp->p5==OE_Rep
303d0 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74  lace) ? OE_Abort
303e0 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20   : pOp->p5);.   
303f0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
30400 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65        p->nChange
30410 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ++;.    }.  }.  
30420 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30430 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30440 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30450 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
30460 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
30470 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
30480 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
30490 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
304a0 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
304b0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
304c0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
304d0 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
304e0 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
304f0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
30500 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
30510 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
30520 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
30530 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
30540 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
30550 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
30560 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
30570 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
30580 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
30590 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
305a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
305b0 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
305c0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
305d0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
305e0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
305f0 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
30600 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
30610 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
30620 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
30630 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
30640 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
30650 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30660 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
30670 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
30680 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
30690 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
306a0 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
306b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
306c0 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
306d0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
306e0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
306f0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
30700 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72  nt newMax;.  Btr
30710 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20  ee *pBt;..  pBt 
30720 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
30730 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
30740 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
30750 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
30760 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
30770 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
30780 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
30790 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
307a0 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
307b0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
307c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
307d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
307e0 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
307f0 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
30800 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
30810 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30820 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65  _TRACE./* Opcode
30830 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34  : Trace * * * P4
30840 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63   *.**.** If trac
30850 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
30860 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
30870 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
30880 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
30890 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
308a0 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
308b0 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
308c0 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  ace callback..*/
308d0 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20  .case OP_Trace: 
308e0 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  {.  char *zTrace
308f0 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
30900 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
30910 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
30920 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
30930 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
30940 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
30950 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
30960 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
30970 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
30980 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
30990 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
309a0 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
309b0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
309c0 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
309d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
309e0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
309f0 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
30a00 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  =0.   && (zTrace
30a10 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
30a20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
30a30 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
30a40 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
30a50 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
30a60 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
30a70 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
30a80 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
30a90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30aa0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  .../* Opcode: No
30ab0 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  op * * * * *.**.
30ac0 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20  ** Do nothing.  
30ad0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
30ae0 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c   is often useful
30af0 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65   as a jump.** de
30b00 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  stination..*/./*
30b10 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78  .** The magic Ex
30b20 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65  plain opcode are
30b30 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77   only inserted w
30b40 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28  hen explain==2 (
30b50 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73  which.** is to s
30b60 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c  ay when the EXPL
30b70 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
30b80 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a  yntax is used.).
30b90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  ** This opcode r
30ba0 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69  ecords informati
30bb0 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69  on from the opti
30bc0 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68  mizer.  It is th
30bd0 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73  e.** the same as
30be0 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20   a no-op.  This 
30bf0 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70  opcodesnever app
30c00 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56  ears in a real V
30c10 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65  M program..*/.de
30c20 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20  fault: {        
30c30 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61    /* This is rea
30c40 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20  lly OP_Noop and 
30c50 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20  OP_Explain */.  
30c60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
30c70 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20  ode==OP_Noop || 
30c80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
30c90 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65  Explain );.  bre
30ca0 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
30cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30cf0 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
30d00 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
30d10 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
30d20 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
30d30 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
30d40 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
30d50 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
30d60 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
30d70 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
30d80 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
30d90 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
30da0 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
30db0 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
30dc0 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
30dd0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
30de0 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
30df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e30 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
30e40 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
30e50 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
30e60 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74   elapsed = sqlit
30e70 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61  e3Hwtime() - sta
30e80 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  rt;.      pOp->c
30e90 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64  ycles += elapsed
30ea0 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
30eb0 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  ++;.#if 0.      
30ec0 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
30ed0 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61  , "%10llu ", ela
30ee0 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73  psed);.        s
30ef0 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
30f00 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63  p(stdout, origPc
30f10 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b  , &aOp[origPc]);
30f20 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65  .#endif.    }.#e
30f30 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
30f40 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
30f50 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
30f60 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
30f70 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
30f80 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
30f90 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
30fa0 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
30fb0 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
30fc0 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
30fd0 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
30fe0 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
30ff0 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
31000 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
31010 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
31020 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
31030 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
31040 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
31050 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
31060 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  G.    assert( pc
31070 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  >=-1 && pc<p->nO
31080 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  p );..#ifdef SQL
31090 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
310a0 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
310b0 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
310c0 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65  fprintf(p->trace
310d0 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ,"rc=%d\n",rc);.
310e0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
310f0 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
31100 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c  OUT2_PRERELEASE|
31110 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20  OPFLG_OUT2) ){. 
31120 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
31130 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70  race(p->trace, p
31140 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
31150 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
31160 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
31170 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
31180 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20  OUT3 ){.        
31190 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
311a0 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c  >trace, pOp->p3,
311b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
311c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
311d0 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54  #endif  /* SQLIT
311e0 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69  E_DEBUG */.#endi
311f0 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a  f  /* NDEBUG */.
31200 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20    }  /* The end 
31210 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c  of the for(;;) l
31220 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68  oop the loops th
31230 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f  rough opcodes */
31240 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61  ..  /* If we rea
31250 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69  ch this point, i
31260 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65  t means that exe
31270 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68  cution is finish
31280 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20  ed with.  ** an 
31290 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69  error of some ki
312a0 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72  nd..  */.vdbe_er
312b0 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65  ror_halt:.  asse
312c0 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72  rt( rc );.  p->r
312d0 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61  c = rc;.  testca
312e0 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
312f0 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
31300 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  );.  sqlite3_log
31310 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20  (rc, "statement 
31320 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25  aborts at %d: [%
31330 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20  s] %s", .       
31340 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20              pc, 
31350 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
31360 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Msg);.  sqlite3V
31370 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
31380 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
31390 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
313a0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
313b0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
313c0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
313d0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30  tSchemaOnFault>0
313e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
313f0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
31400 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
31410 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
31420 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
31430 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
31440 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
31450 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
31460 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
31470 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
31480 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
31490 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
314a0 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
314b0 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
314c0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
314d0 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76   sqlite3VdbeLeav
314e0 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  e(p);.  return r
314f0 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
31500 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
31510 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
31520 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
31530 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
31540 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
31550 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
31560 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
31570 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
31580 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
31590 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
315a0 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
315b0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
315c0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
315d0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
315e0 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
315f0 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
31600 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
31610 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
31620 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
31630 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
31640 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
31650 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
31660 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
31670 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
31680 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
31690 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
316a0 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
316b0 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
316c0 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
316d0 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
316e0 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
316f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
31700 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
31710 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
31720 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
31730 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
31740 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
31750 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
31760 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
31770 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31780 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
31790 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
317a0 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
317b0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
317c0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
317d0 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
317e0 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
317f0 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
31800 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
31810 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
31820 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
31830 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
31840 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
31850 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
31860 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
31870 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
31880 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31890 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
318a0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
318b0 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
318c0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.