/ Hex Artifact Content
Login

Artifact f9622d5b222f7dd929d7f4a4d42278d47d2b24ab:


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 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
6fd0: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
6fe0: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
6ff0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7000: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
7010: 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20  erredCons>0 );. 
7020: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
7030: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
7040: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
7050: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
7060: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
7070: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
7080: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
7090: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
70a0: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
70b0: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
70c0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
70d0: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
70e0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
70f0: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7100: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
7110: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7120: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
7130: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
7140: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7150: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7170: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
7180: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7190: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
71a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
71b0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
71c0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
71d0: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
71e0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
71f0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
7200: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
7210: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
7220: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
7230: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
7240: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
7250: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7260: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
7270: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
7280: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
7290: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
72a0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
72b0: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
72c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
72d0: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
72e0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
72f0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7300: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
7310: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
7320: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
7330: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
7340: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
7350: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
7360: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
7370: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
7380: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
7390: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
73a0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
73b0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
73c0: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
73d0: 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69   into an OP_Stri
73e0: 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ng before it is 
73f0: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
7400: 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a   first time..*/.
7410: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
7420: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
7430: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
7440: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7450: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7460: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
7470: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
7480: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
7490: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
74a0: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
74b0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
74c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
74d0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
74e0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
74f0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
7500: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7510: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
7520: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
7530: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
7540: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
7550: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
7560: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
7570: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
7580: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
7590: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
75a0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
75b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
75c0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
75d0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
75e0: 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  t( pOut->flags &
75f0: 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20   MEM_Dyn );.    
7600: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7610: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
7620: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
7630: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7640: 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
7650: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
7660: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
7670: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
7680: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
7690: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
76a0: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
76b0: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
76c0: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
76d0: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
76e0: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65   pOut->n;.  }.#e
76f0: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
7700: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
7710: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
7720: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
7730: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a  oo_big;.  }.  /*
7740: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
7750: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
7760: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
7770: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
7780: 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ing P1 P2 * P4 *
7790: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
77a0: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
77b0: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
77c0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
77d0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
77e0: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
77f0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7800: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7810: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7820: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
7830: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
7840: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
7850: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
7860: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
7870: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
7880: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7890: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
78a0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
78b0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
78c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
78d0: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
78e0: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c  *.** Write a NUL
78f0: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  L into registers
7900: 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61   P2.  If P3 grea
7910: 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65  ter than P2, the
7920: 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20  n also write.** 
7930: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
7940: 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20  er P3 and every 
7950: 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77  register in betw
7960: 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20  een P2 and P3.  
7970: 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73  If P3.** is less
7980: 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61   than P2 (typica
7990: 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20  lly P3 is zero) 
79a0: 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74  then only regist
79b0: 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20  er P2 is.** set 
79c0: 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49  to NULL..**.** I
79d0: 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
79e0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
79f0: 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45   also set the ME
7a00: 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73  M_Cleared flag s
7a10: 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76  o that.** NULL v
7a20: 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63  alues will not c
7a30: 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65  ompare equal eve
7a40: 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  n if SQLITE_NULL
7a50: 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20  EQ is set on.** 
7a60: 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a  OP_Ne or OP_Eq..
7a70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
7a80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
7a90: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7aa0: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  */.  int cnt;.  
7ab0: 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  u16 nullFlag;.  
7ac0: 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f  cnt = pOp->p3-pO
7ad0: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
7ae0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
7af0: 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  m );.  pOut->fla
7b00: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
7b10: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
7b20: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
7b30: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
7b40: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
7b50: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
7b60: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
7b70: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64  p, pOut);.    Vd
7b80: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75  beMemRelease(pOu
7b90: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  t);.    pOut->fl
7ba0: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a  ags = nullFlag;.
7bb0: 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20      cnt--;.  }. 
7bc0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
7bd0: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
7be0: 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  2 * P4.**.** P4 
7bf0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
7c00: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
7c10: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
7c20: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
7c30: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7c40: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7c60: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7c70: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7c80: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
7c90: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
7ca0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7cb0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7cc0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
7cd0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
7ce0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
7cf0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7d00: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7d10: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7d20: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
7d30: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72   * P4 *.**.** Tr
7d40: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
7d50: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
7d60: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
7d70: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
7d80: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
7d90: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
7da0: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
7db0: 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e  in P4 and P3==1.
7dc0: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
7dd0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
7de0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7df0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
7e00: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
7e10: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
7e20: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7e30: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
7e40: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
7e50: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
7e60: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
7e70: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
7e80: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
7e90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7ea0: 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.z==0 || pOp->p
7eb0: 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f  4.z==p->azVar[pO
7ec0: 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56  p->p1-1] );.  pV
7ed0: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
7ee0: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
7ef0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
7f00: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
7f10: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7f20: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
7f30: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
7f40: 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45  y(pOut, pVar, ME
7f50: 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44  M_Static);.  UPD
7f60: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7f70: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7f80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
7f90: 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ove P1 P2 P3 * *
7fa0: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
7fb0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
7fc0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 20 6f 76 65  er P1..P1+P3 ove
7fd0: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
7fe0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 20 20  ers P2..P2+P3.  
7ff0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
8000: 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  +P3 are.** left 
8010: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
8020: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
8030: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
8040: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
8050: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 20 74   and P2..P2+P3 t
8060: 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61  o overlap..*/.ca
8070: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
8080: 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20  char *zMalloc;  
8090: 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69   /* Holding vari
80a0: 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74  able for allocat
80b0: 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ed memory */.  i
80c0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
80d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
80e0: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
80f0: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
8100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
8110: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
8120: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
8130: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
8140: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
8150: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
8160: 33 20 2b 20 31 3b 0a 20 20 70 31 20 3d 20 70 4f  3 + 1;.  p1 = pO
8170: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
8180: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8190: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
81a0: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
81b0: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
81c0: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
81d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
81e0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
81f0: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
8200: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8210: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  Out<=&aMem[p->nM
8220: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8230: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70  t( pIn1<=&aMem[p
8240: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61  ->nMem] );.    a
8250: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8260: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
8270: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8280: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  p, pOut);.    zM
8290: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
82a0: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
82b0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
82c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
82d0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
82e0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
82f0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
8300: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
8310: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
8320: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
8330: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
8340: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
8350: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
8360: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
8370: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31  .#endif.    pIn1
8380: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
8390: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
83a0: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
83b0: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
83c0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
83d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
83e0: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
83f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8400: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
8410: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
8420: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
8430: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
8440: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
8450: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
8460: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
8470: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
8480: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
8490: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
84a0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
84b0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
84c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
84d0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
84e0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
84f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
8500: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
8510: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
8520: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
8530: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
8540: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
8550: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
8560: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
8570: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
8580: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
8590: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
85a0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
85b0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
85c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
85d0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
85e0: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
85f0: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
8600: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
8610: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
8620: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
8630: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8640: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
8650: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
8660: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8670: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
8680: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8690: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
86a0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
86b0: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
86c0: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
86d0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
86e0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
86f0: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
8700: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
8710: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
8720: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
8730: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
8740: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
8750: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
8760: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
8770: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
8780: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
8790: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
87a0: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
87b0: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
87c0: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
87d0: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
87e0: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
87f0: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
8800: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
8810: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
8820: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
8830: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
8840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
8850: 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
8860: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
8870: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
8880: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
8890: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
88a0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
88b0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
88c0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
88d0: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
88e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
88f0: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
8900: 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e  From==0 ) pOut->
8910: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
8920: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 52 45 47 49  1;.#endif.  REGI
8930: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
8940: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
8950: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8960: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
8970: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
8980: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
8990: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
89a0: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
89b0: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
89c0: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
89d0: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
89e0: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
89f0: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
8a00: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
8a10: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
8a20: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
8a30: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
8a40: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
8a50: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
8a60: 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73  he top P1 values
8a70: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   as the result.*
8a80: 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  * row..*/.case O
8a90: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
8aa0: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
8ab0: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
8ac0: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
8ad0: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
8ae0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
8af0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8b00: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  1+pOp->p2<=p->nM
8b10: 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  em+1 );..  /* If
8b20: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
8b30: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
8b40: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
8b50: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
8b60: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
8b70: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8b80: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
8b90: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
8ba0: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
8bb0: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
8bc0: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
8bd0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
8be0: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
8bf0: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
8c00: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
8c10: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
8c20: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
8c30: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
8c40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
8c50: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
8c60: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
8c70: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
8c80: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8c90: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
8ca0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
8cb0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
8cc0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
8cd0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
8ce0: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
8cf0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
8d00: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
8d10: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
8d20: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
8d30: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
8d40: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
8d50: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
8d60: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
8d70: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
8d80: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
8d90: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
8da0: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
8db0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
8dc0: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
8dd0: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
8de0: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
8df0: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
8e00: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
8e10: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
8e20: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
8e30: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
8e40: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
8e50: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
8e60: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
8e70: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
8e80: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
8e90: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
8ea0: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
8eb0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
8ec0: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
8ed0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
8ee0: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
8ef0: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
8f00: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
8f10: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
8f20: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
8f30: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8f40: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
8f50: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
8f60: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
8f70: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
8f80: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
8f90: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
8fa0: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
8fb0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
8fc0: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
8fd0: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
8fe0: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
8ff0: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
9000: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
9010: 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
9020: 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20  SQLITE_OK) ){.  
9030: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
9040: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
9050: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
9060: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
9070: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
9080: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
9090: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
90a0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
90b0: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
90c0: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
90d0: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
90e0: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
90f0: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
9100: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
9110: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
9120: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
9130: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
9140: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
9150: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9160: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
9170: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
9180: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
9190: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
91a0: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
91b0: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
91c0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
91d0: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
91e0: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
91f0: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
9200: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
9210: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
9220: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9230: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
9240: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
9250: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9260: 74 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69  toreType(&pMem[i
9270: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
9280: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
9290: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
92a0: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
92b0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
92c0: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
92d0: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
92e0: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63   */.  p->pc = pc
92f0: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
9300: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
9310: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
9320: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
9330: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
9340: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78  *.** Add the tex
9350: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  t in register P1
9360: 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66   onto the end of
9370: 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20   the text in.** 
9380: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
9390: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
93a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
93b0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68  .** If either th
93c0: 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20  e P1 or P2 text 
93d0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  are NULL then st
93e0: 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a  ore NULL in P3..
93f0: 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20  **.**   P3 = P2 
9400: 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69  || P1.**.** It i
9410: 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31  s illegal for P1
9420: 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68   and P3 to be th
9430: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e  e same register.
9440: 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69   Sometimes,.** i
9450: 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65  f P3 is the same
9460: 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c   register as P2,
9470: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
9480: 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74  ion is able.** t
9490: 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79  o avoid a memcpy
94a0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
94b0: 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20  oncat: {        
94c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
94d0: 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e  _CONCAT, in1, in
94e0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
94f0: 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20   nByte;..  pIn1 
9500: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9510: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
9520: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
9530: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9540: 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
9550: 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66  n1!=pOut );.  if
9560: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
9570: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
9580: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
9590: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
95a0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
95b0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66   break;.  }.  if
95c0: 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  ( ExpandBlob(pIn
95d0: 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62  1) || ExpandBlob
95e0: 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn2) ) goto no
95f0: 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66  _mem;.  Stringif
9600: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
9610: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
9620: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
9630: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
9640: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
9650: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
9660: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
9670: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
9680: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
9690: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
96a0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
96b0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
96c0: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
96d0: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
96e0: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
96f0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
9700: 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d    }.  if( pOut!=
9710: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
9720: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
9730: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
9740: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
9750: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
9760: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
9770: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
9780: 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  e] = 0;.  pOut->
9790: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
97a0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
97b0: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
97c0: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
97d0: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
97e0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
97f0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9800: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9810: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
9820: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
9830: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
9840: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9850: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
9860: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9870: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9880: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9890: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
98a0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
98b0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
98c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
98d0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
98e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
98f0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
9900: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9910: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9920: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9930: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9940: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9950: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9960: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9970: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9980: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9990: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
99a0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
99b0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
99c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
99d0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
99e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
99f0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9a00: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9a10: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
9a20: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9a30: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9a40: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
9a50: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
9a60: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9a70: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
9a80: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9a90: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9aa0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9ab0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9ac0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9ad0: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
9ae0: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
9af0: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
9b00: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
9b10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9b20: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
9b30: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
9b40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9b50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9b60: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
9b70: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9b80: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
9b90: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
9ba0: 65 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66  eger division of
9bb0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a   the value in.**
9bc0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9bd0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9be0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
9bf0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9c00: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
9c10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9c20: 72 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65  r P2 is zero the
9c30: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9c40: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
9c50: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
9c60: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9c70: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
9c80: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
9c90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9ca0: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
9cb0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9cc0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
9cd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9ce0: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
9cf0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9d00: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
9d10: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
9d20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
9d30: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
9d40: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
9d50: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
9d60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9d70: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
9d80: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9d90: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
9da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
9db0: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
9dc0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9dd0: 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20    char bIntint; 
9de0: 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74    /* Started out
9df0: 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20   as two integer 
9e00: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e  operands */.  in
9e10: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  t flags;      /*
9e20: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
9e30: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
9e40: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20  inputs */.  i64 
9e50: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
9e60: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
9e70: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
9e80: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
9e90: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
9ea0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
9eb0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9ec0: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
9ed0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
9ee0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9ef0: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
9f00: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
9f10: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
9f20: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9f30: 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p1];.  applyN
9f40: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
9f50: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
9f60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9f70: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
9f80: 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70  inity(pIn2);.  p
9f90: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9fa0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
9fb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
9fc0: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
9fd0: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
9fe0: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
9ff0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a000: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
a010: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
a020: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
a030: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
a040: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
a050: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
a060: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
a070: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
a080: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
a090: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
a0a0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
a0b0: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
a0c0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
a0d0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
a0e0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a0f0: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
a100: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
a110: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a120: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a130: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
a140: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
a150: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
a160: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
a170: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
a180: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a190: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a1a0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a1b0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a1c0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a1d0: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
a1e0: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
a1f0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
a200: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
a210: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a220: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a230: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a240: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a250: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a260: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a270: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a280: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
a290: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
a2a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a2b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
a2c0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
a2d0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
a2e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
a2f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62  ;.  }else{.    b
a300: 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d  Intint = 0;.fp_m
a310: 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71  ath:.    rA = sq
a320: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a330: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
a340: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
a350: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
a360: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
a370: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
a380: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
a390: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
a3a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a3b0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
a3c0: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
a3d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a3e0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
a3f0: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
a400: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
a410: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
a420: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
a430: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
a440: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
a450: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
a460: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
a470: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
a480: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
a490: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a4a0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
a4b0: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
a4c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a4d0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
a4e0: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
a4f0: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
a500: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
a510: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a520: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a530: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a540: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a550: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
a560: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
a570: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
a580: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a590: 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20   }.    }.#ifdef 
a5a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a5b0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70  TING_POINT.    p
a5c0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20  Out->u.i = rB;. 
a5d0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
a5e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
a5f0: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20  ;.#else.    if( 
a600: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
a610: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
a620: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a630: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
a640: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
a650: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a660: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
a670: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
a680: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
a690: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
a6a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
a6b0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
a6c0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
a6d0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
a6e0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
a6f0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
a700: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a710: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
a720: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a730: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
a740: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
a750: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
a760: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
a770: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
a780: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
a790: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
a7a0: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
a7b0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
a7c0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
a7d0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
a7e0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
a7f0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
a800: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
a810: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
a820: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
a830: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
a840: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
a850: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
a860: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
a870: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
a880: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
a890: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
a8a0: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
a8b0: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
a8c0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
a8d0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
a8e0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
a8f0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
a900: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
a910: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
a920: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
a930: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
a940: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
a950: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
a960: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
a970: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
a980: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
a990: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
a9a0: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
a9b0: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
a9c0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
a9d0: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
a9e0: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
a9f0: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
aa00: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
aa10: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
aa20: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
aa30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
aa40: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
aa50: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
aa60: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
aa70: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
aa80: 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
aa90: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
aaa0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
aab0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
aac0: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
aad0: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
aae0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
aaf0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
ab00: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
ab10: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
ab20: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
ab30: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
ab40: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
ab50: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
ab60: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
ab70: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
ab80: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
ab90: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
aba0: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
abb0: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
abc0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
abd0: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
abe0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
abf0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
ac00: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
ac10: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
ac20: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
ac30: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
ac40: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
ac50: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
ac60: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
ac70: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
ac80: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
ac90: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
aca0: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
acb0: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
acc0: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
acd0: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
ace0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
acf0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
ad00: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
ad10: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
ad20: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
ad30: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
ad40: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
ad50: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
ad60: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
ad70: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
ad80: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
ad90: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
ada0: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
adb0: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
adc0: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
add0: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
ade0: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
adf0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
ae00: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
ae10: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
ae20: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
ae30: 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
ae40: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
ae50: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
ae60: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
ae70: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70   && pOp->p2+n<=p
ae80: 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61  ->nMem+1) );.  a
ae90: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
aea0: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
aeb0: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
aec0: 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70    pArg = &aMem[p
aed0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69  Op->p2];.  for(i
aee0: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41  =0; i<n; i++, pA
aef0: 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  rg++){.    asser
af00: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41  t( memIsValid(pA
af10: 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c  rg) );.    apVal
af20: 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20  [i] = pArg;.    
af30: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
af40: 41 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Arg);.    sqlite
af50: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
af60: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
af70: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
af80: 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20  >p2+i, pArg);.  
af90: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
afa0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
afb0: 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  CDEF || pOp->p4t
afc0: 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43  ype==P4_VDBEFUNC
afd0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
afe0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
aff0: 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75  F ){.    ctx.pFu
b000: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
b010: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  nc;.    ctx.pVdb
b020: 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c  eFunc = 0;.  }el
b030: 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  se{.    ctx.pVdb
b040: 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e  eFunc = (VdbeFun
b050: 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65  c*)pOp->p4.pVdbe
b060: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46  Func;.    ctx.pF
b070: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
b080: 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a  unc->pFunc;.  }.
b090: 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
b0a0: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
b0b0: 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74  .s.db = db;.  ct
b0c0: 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
b0d0: 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
b0e0: 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  0;..  /* The out
b0f0: 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
b100: 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
b110: 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
b120: 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e  ve.  ** the poin
b130: 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20  ter to ctx.s so 
b140: 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
b150: 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73  -function can us
b160: 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61  e.  ** the alrea
b170: 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
b180: 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
b190: 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20  llocating a new 
b1a0: 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
b1b0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
b1c0: 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20  ctx.s, pOut);.  
b1d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
b1e0: 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ctx.s, MEM_Null)
b1f0: 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  ;..  ctx.isError
b200: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
b210: 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
b220: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b230: 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
b240: 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
b250: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
b260: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
b270: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
b280: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
b290: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
b2a0: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
b2b0: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
b2c0: 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61  ll;.  }.  db->la
b2d0: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
b2e0: 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75  wid;.  (*ctx.pFu
b2f0: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
b300: 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
b310: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
b320: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
b330: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
b340: 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61  ;..  /* If any a
b350: 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75  uxiliary data fu
b360: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65  nctions have bee
b370: 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73  n called by this
b380: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a   user function,.
b390: 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
b3a0: 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75   call the destru
b3b0: 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e  ctor for any non
b3c0: 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a  -static values..
b3d0: 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70    */.  if( ctx.p
b3e0: 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20  VdbeFunc ){.    
b3f0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
b400: 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64  eAuxData(ctx.pVd
b410: 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29  beFunc, pOp->p1)
b420: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56  ;.    pOp->p4.pV
b430: 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56  dbeFunc = ctx.pV
b440: 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70  dbeFunc;.    pOp
b450: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44  ->p4type = P4_VD
b460: 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69  BEFUNC;.  }..  i
b470: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
b480: 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76  led ){.    /* Ev
b490: 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c  en though a mall
b4a0: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
b4b0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
b4c0: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ion of the.    *
b4d0: 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  * user function 
b4e0: 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20  may have called 
b4f0: 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  an sqlite3_resul
b500: 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e  t_XXX() function
b510: 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72  .    ** to retur
b520: 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66  n a value. The f
b530: 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65  ollowing call re
b540: 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75  leases any resou
b550: 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f  rces.    ** asso
b560: 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68  ciated with such
b570: 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f   a value..    */
b580: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b590: 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
b5a0: 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  s);.    goto no_
b5b0: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  mem;.  }..  /* I
b5c0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
b5d0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
b5e0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
b5f0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
b600: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
b610: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
b620: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
b630: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
b640: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
b650: 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
b660: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
b670: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
b680: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b690: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
b6a0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
b6b0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
b6c0: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
b6d0: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
b6e0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
b6f0: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
b700: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
b710: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
b720: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b730: 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20  g;.  }..#if 0.  
b740: 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e  /* The app-defin
b750: 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ed function has 
b760: 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74  done something t
b770: 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68  hat as caused th
b780: 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e  is.  ** statemen
b790: 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50  t to expire.  (P
b7a0: 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74  erhaps the funct
b7b0: 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74  ion called sqlit
b7c0: 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77  e3_exec().  ** w
b7d0: 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42  ith a CREATE TAB
b7e0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20  LE statement.). 
b7f0: 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70   */.  if( p->exp
b800: 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  ired ) rc = SQLI
b810: 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66  TE_ABORT;.#endif
b820: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
b830: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
b840: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
b850: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b860: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b870: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
b880: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
b890: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
b8a0: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
b8b0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
b8c0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
b8d0: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
b8e0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b8f0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b900: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b910: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b920: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b930: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
b940: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
b950: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
b960: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
b970: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b980: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
b990: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b9a0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b9b0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b9c0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b9d0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b9e0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
b9f0: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
ba00: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
ba10: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
ba20: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
ba30: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
ba40: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
ba50: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
ba60: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
ba70: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
ba80: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
ba90: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
baa0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
bab0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
bac0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
bad0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
bae0: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
baf0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
bb00: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
bb10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bb20: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
bb30: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
bb40: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
bb50: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
bb60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
bb70: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
bb80: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
bb90: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
bba0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
bbb0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bbc0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
bbd0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
bbe0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bbf0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
bc00: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bc10: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
bc40: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
bc50: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
bc60: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
bc70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bc80: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
bc90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
bca0: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
bcb0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
bcc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
bcd0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
bce0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
bcf0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
bd00: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
bd10: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
bd20: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
bd30: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
bd40: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
bd50: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
bd60: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
bd70: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
bd80: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
bd90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
bda0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
bdb0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
bdc0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
bdd0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
bde0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
bdf0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
be00: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
be10: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
be20: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
be30: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
be40: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
be50: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
be60: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
be70: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
be80: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
be90: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
bea0: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
beb0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
bec0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
bed0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
bee0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
bef0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
bf00: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
bf10: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
bf20: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
bf30: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
bf40: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
bf50: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
bf60: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
bf70: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
bf80: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
bf90: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
bfa0: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
bfb0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
bfc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
bfd0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
bfe0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
bff0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
c000: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
c010: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
c020: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
c030: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
c040: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
c050: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
c060: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
c070: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
c080: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
c090: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
c0a0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
c0b0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
c0c0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
c0d0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
c0e0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
c0f0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
c100: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
c110: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
c120: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c130: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
c140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
c150: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
c160: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
c170: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
c180: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c190: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
c1a0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
c1b0: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
c1c0: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
c1d0: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
c1e0: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
c1f0: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
c200: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
c210: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
c220: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c230: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
c240: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
c250: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
c260: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
c270: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
c280: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
c290: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c2a0: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
c2b0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
c2c0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c2d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c2e0: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
c2f0: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
c300: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
c310: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
c320: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
c330: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
c340: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
c350: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
c360: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
c370: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
c380: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
c390: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c3a0: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
c3b0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
c3c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
c3d0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
c3e0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c3f0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41  p->p1];.  applyA
c400: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
c410: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
c420: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
c430: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c440: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
c450: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
c460: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
c470: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  = SQLITE_MISMATC
c480: 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  H;.      goto ab
c490: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
c4a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
c4b0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
c4c0: 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  - 1;.    }.  }el
c4d0: 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  se{.    MemSetTy
c4e0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
c4f0: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
c500: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
c510: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
c520: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
c530: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
c540: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
c550: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
c560: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
c570: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
c580: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
c590: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
c5a0: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
c5b0: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
c5c0: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
c5d0: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
c5e0: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
c5f0: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
c600: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
c610: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
c620: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
c630: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
c640: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
c650: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
c660: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
c670: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
c680: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
c690: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
c6a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
c6b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c6c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c6d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c6e0: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
c6f0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
c700: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
c710: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
c720: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
c730: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
c740: 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20  code: ToText P1 
c750: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c760: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c770: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c780: 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74  be text..** If t
c790: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
c7a0: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
c7b0: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
c7c0: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c7d0: 65 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e  ent of printf().
c7e0: 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72    Blob values ar
c7f0: 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a  e unchanged and.
c800: 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64  ** are afterward
c810: 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72  s simply interpr
c820: 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a  eted as text..**
c830: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c840: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c850: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c860: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c870: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c880: 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Text: {         
c890: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c8a0: 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20   as TK_TO_TEXT, 
c8b0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c8c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c8d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
c8e0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
c8f0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
c900: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
c910: 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d  k;.  assert( MEM
c920: 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e  _Str==(MEM_Blob>
c930: 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  >3) );.  pIn1->f
c940: 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66  lags |= (pIn1->f
c950: 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e  lags&MEM_Blob)>>
c960: 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  3;.  applyAffini
c970: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
c980: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
c990: 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  ng);.  rc = Expa
c9a0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
c9b0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
c9c0: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c  ags & MEM_Str ||
c9d0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
c9e0: 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  d );.  pIn1->fla
c9f0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c  gs &= ~(MEM_Int|
ca00: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f  MEM_Real|MEM_Blo
ca10: 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55  b|MEM_Zero);.  U
ca20: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
ca30: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
ca40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ca50: 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a   ToBlob P1 * * *
ca60: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
ca70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ca80: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
ca90: 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20  BLOB..** If the 
caa0: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
cab0: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
cac0: 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a  a string first..
cad0: 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73  ** Strings are s
cae0: 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65  imply reinterpre
caf0: 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74  ted as blobs wit
cb00: 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74  h no change.** t
cb10: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
cb20: 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   data..**.** A N
cb30: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
cb40: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
cb50: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
cb60: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
cb70: 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b  ase OP_ToBlob: {
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cba0: 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a  TO_BLOB, in1 */.
cbb0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cbc0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
cbd0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cbe0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
cbf0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
cc00: 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
cc10: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
cc20: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
cc30: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
cc40: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65  oding);.    asse
cc50: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
cc60: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
cc70: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
cc80: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
cc90: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c  lag(pIn1, MEM_Bl
cca0: 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ob);.  }else{.  
ccb0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d    pIn1->flags &=
ccc0: 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26   ~(MEM_TypeMask&
ccd0: 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a  ~MEM_Blob);.  }.
cce0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
ccf0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
cd00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
cd10: 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31  de: ToNumeric P1
cd20: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
cd30: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
cd40: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
cd50: 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74   be numeric (eit
cd60: 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65  her an.** intege
cd70: 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d  r or a floating-
cd80: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a  point number.).*
cd90: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
cda0: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
cdb0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
cdc0: 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68  t to an using th
cdd0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cde0: 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f  of atoi() or ato
cdf0: 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  f() and store 0 
ce00: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
ce10: 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73  rsion .** is pos
ce20: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
ce30: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
ce40: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
ce50: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
ce60: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
ce70: 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63  ase OP_ToNumeric
ce80: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ce90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cea0: 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69  TK_TO_NUMERIC, i
ceb0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
cec0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ced0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
cee0: 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  umerify(pIn1);. 
cef0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
cf00: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
cf10: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
cf20: 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a  de: ToInt P1 * *
cf30: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cf40: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cf50: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cf60: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a  an integer.  If.
cf70: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
cf80: 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c  currently a real
cf90: 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74   number, drop it
cfa0: 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
cfb0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
cfc0: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
cfd0: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
cfe0: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
cff0: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
d000: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
d010: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
d020: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
d030: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
d040: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
d050: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d060: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d070: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d080: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d090: 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20  e OP_ToInt: {   
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d0b0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
d0c0: 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  INT, in1 */.  pI
d0d0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d0e0: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
d0f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
d100: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
d110: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
d120: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
d130: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
d140: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
d150: 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20  E_OMIT_CAST) && 
d160: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
d170: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
d180: 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  INT)./* Opcode: 
d190: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
d1a0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
d1b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d1c0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
d1d0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
d1e0: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
d1f0: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
d200: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
d210: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
d220: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
d230: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
d240: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
d250: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
d260: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
d270: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
d280: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
d290: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
d2a0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
d2b0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d2c0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d2d0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d2e0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d2f0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
d300: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
d310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d320: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
d330: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d340: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d350: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
d360: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
d370: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d380: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
d390: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d3a0: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d3b0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d3c0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
d3d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
d3e0: 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69  T_CAST) && !defi
d3f0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
d400: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20  FLOATING_POINT) 
d410: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
d420: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
d430: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
d440: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d450: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
d460: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
d470: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
d480: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
d490: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
d4a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d4b0: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
d4c0: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
d4d0: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
d4e0: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
d4f0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
d500: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
d510: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
d520: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
d530: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
d540: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d550: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
d560: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
d570: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
d580: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
d590: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
d5a0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
d5b0: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
d5c0: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
d5d0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
d5e0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
d5f0: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
d600: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
d610: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
d620: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
d630: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
d640: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
d650: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
d660: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
d670: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
d680: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
d690: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
d6a0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
d6b0: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
d6c0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
d6d0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
d6e0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
d6f0: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
d700: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
d710: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
d720: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
d730: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
d740: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
d750: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
d760: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
d770: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
d780: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
d790: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
d7a0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
d7b0: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
d7c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
d7d0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
d7e0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
d7f0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
d800: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
d810: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
d820: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
d830: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
d840: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
d850: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
d860: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
d870: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
d880: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
d890: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
d8a0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
d8b0: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
d8c0: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
d8d0: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
d8e0: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
d8f0: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
d900: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
d910: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
d920: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
d930: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
d940: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
d950: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
d960: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
d970: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  bs..**.** If the
d980: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
d990: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
d9a0: 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75  , then do not ju
d9b0: 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a  mp.  Instead,.**
d9c0: 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e   store a boolean
d9d0: 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20   result (either 
d9e0: 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c  0, or 1, or NULL
d9f0: 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
da00: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
da10: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74  QLITE_NULLEQ bit
da20: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
da30: 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hen NULL values 
da40: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a  are considered.*
da50: 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  * equal to one a
da60: 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64  nother, provided
da70: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
da80: 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d  t have their MEM
da90: 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20  _Cleared.** bit 
daa0: 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  set..*/./* Opcod
dab0: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
dac0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
dad0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
dae0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
daf0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
db00: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
db10: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
db20: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
db30: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
db40: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
db50: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
db60: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
db70: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
db80: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
db90: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
dba0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
dbb0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
dbc0: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
dbd0: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
dbe0: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
dbf0: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
dc00: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
dc10: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
dc20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
dc30: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
dc40: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dc50: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
dc60: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
dc70: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dc80: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
dc90: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
dca0: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
dcb0: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
dcc0: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
dcd0: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
dce0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  /./* Opcode: Eq 
dcf0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
dd00: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
dd10: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
dd20: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
dd30: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
dd40: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
dd50: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
dd60: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
dd70: 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65  are equal..** Se
dd80: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
dd90: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
dda0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
ddb0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
ddc0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
ddd0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
dde0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
ddf0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
de00: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
de10: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
de20: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
de30: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
de40: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
de50: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
de60: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
de70: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
de80: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
de90: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
dea0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
deb0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
dec0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
ded0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
dee0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
def0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
df00: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
df10: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
df20: 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  : Le P1 P2 P3 P4
df30: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
df40: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
df50: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
df60: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
df70: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
df80: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
df90: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c  register P3 is l
dfa0: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
dfb0: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
dfc0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
dfd0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
dfe0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
dff0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e000: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
e010: 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Gt P1 P2 P3 P4 
e020: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
e030: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e040: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
e050: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
e060: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
e070: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e080: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
e090: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63  eater than the c
e0a0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e0b0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e0c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e0d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e0e0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
e0f0: 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20  pcode: Ge P1 P2 
e100: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
e110: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e120: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e130: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e140: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e150: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e160: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e170: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e180: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
e190: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
e1a0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
e1b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e1c0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e1d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
e1e0: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20  se OP_Eq:       
e1f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e200: 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20  as TK_EQ, jump, 
e210: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e220: 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20   OP_Ne:         
e230: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e240: 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_NE, jump, in
e250: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e260: 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Lt:           
e270: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e280: 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LT, jump, in1,
e290: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e2a0: 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Le:             
e2b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e2c0: 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LE, jump, in1, i
e2d0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74  n3 */.case OP_Gt
e2e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e2f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54  /* same as TK_GT
e300: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e310: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20   */.case OP_Ge: 
e320: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
e330: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20   same as TK_GE, 
e340: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e350: 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
e360: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
e370: 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  t of the compari
e380: 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69  son of pIn1 agai
e390: 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68  nst pIn3 */.  ch
e3a0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
e3b0: 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f    /* Affinity to
e3c0: 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69   use for compari
e3d0: 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  son */.  u16 fla
e3e0: 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs1;         /* 
e3f0: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
e400: 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66  value of pIn1->f
e410: 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c  lags */.  u16 fl
e420: 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags3;         /*
e430: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
e440: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e   value of pIn3->
e450: 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31  flags */..  pIn1
e460: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e470: 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
e480: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
e490: 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  ags1 = pIn1->fla
e4a0: 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70  gs;.  flags3 = p
e4b0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In3->flags;.  if
e4c0: 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67  ( (flags1 | flag
e4d0: 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s3)&MEM_Null ){.
e4e0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f      /* One or bo
e4f0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e500: 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20  NULL */.    if( 
e510: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
e520: 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20  _NULLEQ ){.     
e530: 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55   /* If SQLITE_NU
e540: 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69  LLEQ is set (whi
e550: 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70  ch will only hap
e560: 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61  pen if the opera
e570: 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20  tor is.      ** 
e580: 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20  OP_Eq or OP_Ne) 
e590: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
e5a0: 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  mp or not depend
e5b0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20  ing on whether. 
e5c0: 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62       ** or not b
e5d0: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
e5e0: 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a   null..      */.
e5f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
e600: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
e610: 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
e620: 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
e630: 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20  assert( (flags1 
e640: 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  & MEM_Cleared)==
e650: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
e660: 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29  flags1&MEM_Null)
e670: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
e680: 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags3&MEM_Null)!
e690: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
e6a0: 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64  ags3&MEM_Cleared
e6b0: 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
e6c0: 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20        res = 0;  
e6d0: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65  /* Results are e
e6e0: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
e6f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
e700: 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 1;  /* Result
e710: 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
e720: 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
e730: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
e740: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e750: 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
e760: 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
e770: 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
e780: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e790: 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
e7a0: 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
e7b0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
e7c0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
e7d0: 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
e7e0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
e7f0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e800: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
e810: 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
e820: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
e830: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
e840: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e850: 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52  Null);.        R
e860: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
e870: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
e880: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
e890: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
e8a0: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
e8b0: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
e8c0: 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2-1;.      }.   
e8d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
e8e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
e8f0: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
e900: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
e910: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
e920: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
e930: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
e940: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
e950: 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  affinity ){.    
e960: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
e970: 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn1, affinity, 
e980: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
e990: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
e9a0: 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In3, affinity, e
e9b0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
e9c0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
e9d0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
e9e0: 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61  em;.    }..    a
e9f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
ea00: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
ea10: 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
ea20: 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  =0 );.    Expand
ea30: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
ea40: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
ea50: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
ea60: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
ea70: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
ea80: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20  4.pColl);.  }.  
ea90: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
eaa0: 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
eab0: 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20  OP_Eq:    res = 
eac0: 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61  res==0;     brea
ead0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e  k;.    case OP_N
eae0: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21  e:    res = res!
eaf0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
eb00: 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20     case OP_Lt:  
eb10: 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20    res = res<0;  
eb20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
eb30: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
eb40: 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20  s = res<=0;     
eb50: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
eb60: 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Gt:    res = 
eb70: 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61  res>0;      brea
eb80: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
eb90: 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e        res = res>
eba0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
ebb0: 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
ebc0: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
ebd0: 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d  P2 ){.    pOut =
ebe0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
ebf0: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
ec00: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
ec10: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
ec20: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
ec30: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
ec40: 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49   = res;.    REGI
ec50: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
ec60: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
ec70: 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  se if( res ){.  
ec80: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
ec90: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
eca0: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
ecb0: 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
ecc0: 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
ecd0: 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
ece0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
ecf0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn1->flags&~ME
ed00: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
ed10: 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61  lags1&MEM_TypeMa
ed20: 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  sk);.  pIn3->fla
ed30: 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  gs = (pIn3->flag
ed40: 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s&~MEM_TypeMask)
ed50: 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54   | (flags3&MEM_T
ed60: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61  ypeMask);.  brea
ed70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ed80: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
ed90: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
eda0: 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
edb0: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
edc0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
edd0: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
ede0: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
edf0: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
ee00: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
ee10: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
ee20: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
ee30: 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
ee40: 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
ee50: 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
ee60: 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
ee70: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
ee80: 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
ee90: 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
eea0: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
eeb0: 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
eec0: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
eed0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
eee0: 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
eef0: 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
ef00: 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
ef10: 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
ef20: 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
ef30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
ef40: 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
ef50: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
ef60: 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
ef70: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
ef80: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
ef90: 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
efa0: 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
efb0: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
efc0: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
efd0: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
efe0: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
eff0: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
f000: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
f010: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
f020: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
f030: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
f040: 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
f050: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
f060: 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
f070: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
f080: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
f090: 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
f0a0: 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
f0b0: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f0c0: 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
f0d0: 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
f0e0: 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
f0f0: 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
f100: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
f110: 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
f120: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
f130: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f140: 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
f150: 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
f160: 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
f170: 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
f180: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
f190: 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
f1a0: 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
f1b0: 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
f1c0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
f1d0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
f1e0: 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
f1f0: 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
f200: 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
f210: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
f220: 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
f230: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
f240: 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
f250: 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
f260: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
f270: 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
f280: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
f290: 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
f2a0: 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
f2b0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
f2c0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
f2d0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
f2e0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
f2f0: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
f300: 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
f310: 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
f320: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
f330: 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
f340: 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20  order */..  if( 
f350: 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
f360: 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20  G_PERMUTE)==0 ) 
f370: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
f380: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
f390: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
f3a0: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
f3b0: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
f3c0: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
f3d0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
f3e0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
f3f0: 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
f400: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
f410: 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
f420: 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
f430: 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
f440: 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
f450: 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
f460: 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
f470: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
f480: 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  +mx<=p->nMem+1 )
f490: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
f4a0: 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e  >0 && p2+mx<=p->
f4b0: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  nMem+1 );.  }els
f4c0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
f4d0: 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e  1>0 && p1+n<=p->
f4e0: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73  nMem+1 );.    as
f4f0: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
f500: 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  +n<=p->nMem+1 );
f510: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
f520: 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
f530: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
f540: 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
f550: 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
f560: 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
f570: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
f580: 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
f590: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
f5a0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
f5b0: 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
f5c0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f5d0: 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
f5e0: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
f5f0: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
f600: 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
f610: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
f620: 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
f630: 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
f640: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
f650: 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
f660: 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
f670: 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
f680: 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
f690: 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b  emCompare(&aMem[
f6a0: 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70  p1+idx], &aMem[p
f6b0: 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a  2+idx], pColl);.
f6c0: 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65      if( iCompare
f6d0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52   ){.      if( bR
f6e0: 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20  ev ) iCompare = 
f6f0: 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20  -iCompare;.     
f700: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
f710: 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30  }.  aPermute = 0
f720: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
f730: 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31   Opcode: Jump P1
f740: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
f750: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73   Jump to the ins
f760: 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72  truction at addr
f770: 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50  ess P1, P2, or P
f780: 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  3 depending on w
f790: 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65  hether.** in the
f7a0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
f7b0: 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74  Compare instruct
f7c0: 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f  ion the P1 vecto
f7d0: 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a  r was less than.
f7e0: 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  ** equal to, or 
f7f0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
f800: 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70   P2 vector, resp
f810: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73  ectively..*/.cas
f820: 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20  e OP_Jump: {    
f830: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
f840: 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61   */.  if( iCompa
f850: 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  re<0 ){.    pc =
f860: 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20   pOp->p1 - 1;.  
f870: 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
f880: 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  re==0 ){.    pc 
f890: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
f8a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d   }else{.    pc =
f8b0: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
f8c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f8d0: 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
f8e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f8f0: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
f900: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
f910: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
f920: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
f930: 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
f940: 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
f950: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
f960: 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
f970: 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
f980: 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
f990: 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
f9a0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
f9b0: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
f9c0: 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
f9d0: 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
f9e0: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
f9f0: 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
fa00: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
fa10: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
fa20: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
fa30: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
fa40: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
fa50: 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
fa60: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
fa70: 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
fa80: 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
fa90: 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
faa0: 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
fab0: 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
fac0: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
fad0: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
fae0: 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
faf0: 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
fb00: 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
fb10: 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
fb20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fb30: 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
fb40: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
fb50: 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
fb60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fb70: 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
fb80: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
fb90: 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
fba0: 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
fbb0: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
fbc0: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
fbd0: 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
fbe0: 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
fbf0: 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
fc00: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
fc10: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
fc20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fc30: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
fc40: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
fc50: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  ull ){.    v1 = 
fc60: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
fc70: 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
fc80: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
fc90: 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20  0;.  }.  pIn2 = 
fca0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
fcb0: 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67    if( pIn2->flag
fcc0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
fcd0: 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65      v2 = 2;.  }e
fce0: 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71  lse{.    v2 = sq
fcf0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
fd00: 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn2)!=0;.  }.
fd10: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
fd20: 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
fd30: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
fd40: 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
fd50: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
fd60: 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
fd70: 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
fd80: 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
fd90: 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
fda0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
fdb0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
fdc0: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
fdd0: 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
fde0: 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
fdf0: 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
fe00: 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
fe10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
fe20: 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
fe30: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
fe40: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
fe50: 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
fe60: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
fe70: 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
fe80: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
fe90: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
fea0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
feb0: 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
fec0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
fed0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
fee0: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
fef0: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
ff00: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
ff10: 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
ff20: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
ff30: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
ff40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
ff50: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
ff60: 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
ff70: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
ff80: 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
ff90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ffa0: 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
ffb0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
ffc0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
ffd0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ffe0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
fff0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10000 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
10010 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
10020 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
10030 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
10040 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
10050 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
10060 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b  IntValue(pIn1));
10070 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10080 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
10090 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
100a0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
100b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
100c0 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
100d0 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
100e0 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
100f0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
10100 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
10110 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
10120 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
10130 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
10140 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
10150 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
10160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10170 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
10180 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10190 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
101a0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
101b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
101c0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
101d0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
101e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
101f0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
10200 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
10210 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
10220 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74  t64(pOut, ~sqlit
10230 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10240 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
10250 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10260 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
10270 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69   *.**.** Check i
10280 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50  f OP_Once flag P
10290 31 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c  1 is set. If so,
102a0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
102b0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
102c0 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66  se,.** set the f
102d0 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
102e0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
102f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
10300 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10320 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10330 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
10340 63 65 46 6c 61 67 20 29 3b 0a 20 20 69 66 28 20  ceFlag );.  if( 
10350 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
10360 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20  ->p1] ){.    pc 
10370 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
10380 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
10390 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
103a0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
103b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
103c0 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
103d0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
103e0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
103f0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10400 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
10410 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
10420 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
10430 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
10440 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
10450 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
10460 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
10470 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
10480 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
10490 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
104a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
104b0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
104c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
104d0 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
104e0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
104f0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
10500 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
10510 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
10520 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
10530 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
10540 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
10550 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
10560 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  is zero..*/.case
10570 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
10580 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
10590 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
105a0 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
105b0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
105c0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
105d0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
105e0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
105f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10600 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
10610 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
10620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
10630 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
10640 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
10650 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10660 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
10670 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
10680 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
10690 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
106a0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
106b0 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
106c0 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20  = !c;.  }.  if( 
106d0 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  c ){.    pc = pO
106e0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
106f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10700 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
10710 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
10720 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10730 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10740 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
10750 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
10760 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
10770 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
10780 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
10790 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
107a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
107b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
107c0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
107d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
107e0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
107f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10800 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
10810 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10820 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10830 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10840 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
10850 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
10860 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
10870 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
10880 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
10890 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
108a0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
108b0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
108c0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
108d0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
108e0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
108f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10900 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
10910 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
10920 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
10930 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
10940 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
10950 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
10960 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
10970 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
10980 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
10990 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
109a0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
109b0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
109c0 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
109d0 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
109e0 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
109f0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
10a00 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
10a10 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
10a20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
10a30 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
10a40 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
10a50 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
10a60 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
10a70 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
10a80 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
10a90 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
10aa0 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
10ab0 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
10ac0 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
10ad0 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
10ae0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
10af0 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
10b00 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
10b10 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
10b20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
10b30 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
10b40 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
10b50 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
10b60 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
10b70 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
10b80 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
10b90 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
10ba0 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
10bb0 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
10bc0 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
10bd0 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
10be0 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
10bf0 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
10c00 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
10c10 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
10c20 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
10c30 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
10c40 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  set..**.** If th
10c50 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
10c60 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
10c70 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65  PEOFARG bits are
10c80 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a   set on P5 when.
10c90 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
10ca0 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f   guaranteed to o
10cb0 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74  nly be used as t
10cc0 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61  he argument of a
10cd0 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20   length().** or 
10ce0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
10cf0 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  n, respectively.
10d00 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66    The loading of
10d10 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e   large blobs can
10d20 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66   be.** skipped f
10d30 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20  or length() and 
10d40 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64  all content load
10d50 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70  ing can be skipp
10d60 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e  ed for typeof().
10d70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
10d80 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c  mn: {.  u32 payl
10d90 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75  oadSize;   /* Nu
10da0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10db0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
10dc0 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
10dd0 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
10de0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
10df0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
10e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10e10 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
10e20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
10e30 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
10e40 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
10e50 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
10e60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
10e70 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
10e80 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
10e90 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
10ea0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
10eb0 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
10ec0 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
10ed0 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
10ee0 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
10ef0 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
10f00 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
10f10 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
10f20 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
10f30 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
10f40 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
10f50 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
10f60 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
10f70 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
10f80 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
10f90 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
10fa0 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
10fb0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
10fc0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
10fd0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
10fe0 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
10ff0 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
11000 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
11010 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
11020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
11030 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
11040 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
11050 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
11060 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
11070 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
11080 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
11090 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
110a0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
110b0 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
110c0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
110d0 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
110e0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
110f0 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49  oded */.  u8 *zI
11100 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
11110 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65  Index into heade
11120 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48  r */.  u8 *zEndH
11130 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  dr;       /* Poi
11140 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79  nter to first by
11150 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61  te after the hea
11160 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  der */.  u32 off
11170 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  set;        /* O
11180 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64  ffset into the d
11190 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46  ata */.  u32 szF
111a0 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ield;       /* N
111b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
111c0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
111d0 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e   a field */.  in
111e0 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20  t szHdr;        
111f0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
11200 68 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c  header size fiel
11210 64 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65  d at start of re
11220 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76  cord */.  int av
11230 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
11240 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11250 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
11260 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
11270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
11280 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
11290 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
112a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
112b0 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
112c0 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
112d0 69 73 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20  ister */...  p1 
112e0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
112f0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20  = pOp->p2;.  pC 
11300 3d 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  = 0;.  memset(&s
11310 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
11320 4d 65 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem));.  assert(
11330 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29   p1<p->nCursor )
11340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
11350 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
11360 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
11370 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
11380 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
11390 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
113a0 73 74 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b  st);.  zRec = 0;
113b0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63  ..  /* This bloc
113c0 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61  k sets the varia
113d0 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  ble payloadSize 
113e0 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20  to be the total 
113f0 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62  number of.  ** b
11400 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
11410 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52  rd..  **.  ** zR
11420 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  ec is set to be 
11430 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
11440 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
11450 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
11460 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d  le..  ** The com
11470 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
11480 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69  t is always avai
11490 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f  lable for pseudo
114a0 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20  -tables.  ** If 
114b0 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  the record is st
114c0 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72  ored in a cursor
114d0 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  , the complete r
114e0 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20  ecord text.  ** 
114f0 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62  might be availab
11500 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61  le in the  pC->a
11510 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69  Row cache.  Or i
11520 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a  t might not be..
11530 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61    ** If the data
11540 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c   is unavailable,
11550 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f    zRec is set to
11560 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   NULL..  **.  **
11570 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65   We also compute
11580 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
11590 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
115a0 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f  cord.  For curso
115b0 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  rs,.  ** the num
115c0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
115d0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
115e0 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c  VdbeCursor.nFiel
115f0 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  d element..  */.
11600 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
11610 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
11620 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  C!=0 );.#ifndef 
11630 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
11640 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72  UALTABLE.  asser
11650 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  t( pC->pVtabCurs
11660 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a  or==0 );.#endif.
11670 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
11680 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
11690 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  sr!=0 ){.    /* 
116a0 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  The record is st
116b0 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65  ored in a B-Tree
116c0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
116d0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
116e0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
116f0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
11700 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
11710 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
11720 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Row ){.      pay
11730 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
11740 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
11750 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
11760 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
11770 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
11780 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
11790 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63  .      zRec = (c
117a0 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20  har*)pC->aRow;. 
117b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
117c0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
117d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
117e0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
117f0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
11800 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
11810 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
11820 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
11830 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
11840 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
11850 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
11860 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
11870 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
11880 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
11890 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
118a0 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74  BtreeParseCellPt
118b0 72 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69  r() uses getVari
118c0 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63  nt32() to extrac
118d0 74 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70  t the.      ** p
118e0 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20  ayload size, so 
118f0 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
11900 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65   for payloadSize
11910 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  64 to be.      *
11920 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32  * larger than 32
11930 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20   bits. */.      
11940 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64  assert( (payload
11950 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f  Size64 & SQLITE_
11960 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70  MAX_U32)==(u64)p
11970 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a  ayloadSize64 );.
11980 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
11990 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64  e = (u32)payload
119a0 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73  Size64;.    }els
119b0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
119c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
119d0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
119e0 29 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f  ) );.      VVA_O
119f0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
11a00 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
11a10 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
11a20 7a 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ze);.      asser
11a30 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
11a40 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a   );   /* DataSiz
11a50 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
11a60 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  */.    }.  }else
11a70 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
11a80 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
11a90 29 20 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20  ) ){.    pReg = 
11aa0 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
11ab0 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 69  TableReg];.    i
11ac0 66 28 20 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75  f( pC->multiPseu
11ad0 64 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  do ){.      sqli
11ae0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
11af0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 52 65  wCopy(pDest, pRe
11b00 67 2b 70 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  g+p2, MEM_Ephem)
11b10 3b 0a 20 20 20 20 20 20 44 65 65 70 68 65 6d 65  ;.      Deepheme
11b20 72 61 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 20  ralize(pDest);. 
11b30 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11b40 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
11b50 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
11b60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
11b70 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
11b80 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
11b90 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64  ) );.    payload
11ba0 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  Size = pReg->n;.
11bb0 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d      zRec = pReg-
11bc0 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  >z;.    pC->cach
11bd0 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e  eStatus = (pOp->
11be0 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
11bf0 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54  ACHE) ? CACHE_ST
11c00 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74  ALE : p->cacheCt
11c10 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
11c20 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c  ayloadSize==0 ||
11c30 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65   zRec!=0 );.  }e
11c40 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73  lse{.    /* Cons
11c50 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20  ider the row to 
11c60 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70  be NULL */.    p
11c70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
11c80 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79    }..  /* If pay
11c90 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74  loadSize is 0, t
11ca0 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61  hen just store a
11cb0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 63 61 6e   NULL.  This can
11cc0 20 68 61 70 70 65 6e 20 62 65 63 61 75 73 65 20   happen because 
11cd0 6f 66 0a 20 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20  of.  ** nullRow 
11ce0 6f 72 20 62 65 63 61 75 73 65 20 6f 66 20 61 20  or because of a 
11cf0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
11d00 2e 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  . */.  if( paylo
11d10 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
11d20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
11d30 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
11d40 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
11d50 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
11d60 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d  assert( db->aLim
11d70 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
11d80 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20  LENGTH]>=0 );.  
11d90 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
11da0 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
11db0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
11dc0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
11dd0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
11de0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e  .  nField = pC->
11df0 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74  nField;.  assert
11e00 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
11e10 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
11e20 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
11e30 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
11e40 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
11e50 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
11e60 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11e70 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
11e80 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
11e90 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
11ea0 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
11eb0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
11ec0 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
11ed0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
11ee0 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
11ef0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  {.    assert(aTy
11f00 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d  pe);.    avail =
11f10 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66   0;.    pC->aOff
11f20 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20  set = aOffset = 
11f30 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  &aType[nField];.
11f40 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
11f50 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a  ize = payloadSiz
11f60 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  e;.    pC->cache
11f70 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
11f80 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69  eCtr;..    /* Fi
11f90 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e  gure out how man
11fa0 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74  y bytes are in t
11fb0 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  he header */.   
11fc0 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
11fd0 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b     zData = zRec;
11fe0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11ff0 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
12000 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  x ){.        zDa
12010 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
12020 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
12030 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12040 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12050 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
12060 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
12070 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
12080 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
12090 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b   }.      /* If K
120a0 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65  eyFetch()/DataFe
120b0 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f  tch() managed to
120c0 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20   get the entire 
120d0 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a  payload,.      *
120e0 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f  * save the paylo
120f0 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52  ad in the pC->aR
12100 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20  ow cache.  That 
12110 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f  will save us fro
12120 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e  m.      ** havin
12130 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69  g to make additi
12140 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65  onal calls to fe
12150 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  tch the content 
12160 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20  portion of.     
12170 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   ** the record..
12180 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
12190 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20  ssert( avail>=0 
121a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61 79  );.      if( pay
121b0 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
121c0 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
121d0 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
121e0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
121f0 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
12200 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12210 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
12220 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
12230 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
12240 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
12250 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
12260 20 65 78 63 65 70 74 20 77 68 65 6e 0a 20 20 20   except when.   
12270 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
12280 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
12290 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
122a0 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
122b0 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
122c0 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
122d0 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
122e0 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
122f0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
12300 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
12310 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  t);..    /* Make
12320 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
12330 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
12340 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
12350 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
12360 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
12370 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
12380 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
12390 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
123a0 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
123b0 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
123c0 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
123d0 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
123e0 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
123f0 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
12400 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
12410 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
12420 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
12430 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
12440 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
12450 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
12460 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
12470 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
12480 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
12490 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
124a0 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
124b0 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
124c0 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
124d0 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
124e0 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
124f0 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
12500 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
12510 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
12520 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20   98307 ){.      
12530 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
12540 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
12550 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
12560 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ut;.    }..    /
12570 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e  * Compute in len
12580 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
12590 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65 20  ytes of data we 
125a0 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20  need to read in 
125b0 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20  order.    ** to 
125c0 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20  get nField type 
125d0 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20  values.  offset 
125e0 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  is an upper boun
125f0 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a  d on this.  But.
12600 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69      ** nField mi
12610 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63 61  ght be significa
12620 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  ntly less than t
12630 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f  he true number o
12640 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a  f columns.    **
12650 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61   in the table, a
12660 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c  nd in that case,
12670 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68   5*nField+3 migh
12680 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61  t be smaller tha
12690 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a  n offset..    **
126a0 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69   We want to mini
126b0 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65  mize len in orde
126c0 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73  r to limit the s
126d0 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
126e0 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74  y.    ** allocat
126f0 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  ion, especially 
12700 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  if a corrupt dat
12710 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 63  abase file has c
12720 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20  aused offset.   
12730 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69   ** to be oversi
12740 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c  zed. Offset is l
12750 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37 20  imited to 98307 
12760 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30  above.  But 9830
12770 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73  7 might.    ** s
12780 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73  till exceed Robs
12790 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  on memory alloca
127a0 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73  tion limits on s
127b0 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
127c0 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79  ns..    ** On sy
127d0 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f  stems that canno
127e0 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65  t tolerate large
127f0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
12800 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a  ons, nField*5+3.
12810 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65      ** will like
12820 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c  ly be much small
12830 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20  er since nField 
12840 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c  will likely be l
12850 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20  ess than.    ** 
12860 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20  20 or so.  This 
12870 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f 62  insures that Rob
12880 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
12890 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65  ation limits are
128a0 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65  .    ** not exce
128b0 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f  eded even for co
128c0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
128d0 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  iles..    */.   
128e0 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20   len = nField*5 
128f0 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e  + 3;.    if( len
12900 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29   > (int)offset )
12910 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73   len = (int)offs
12920 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  et;..    /* The 
12930 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44 61  KeyFetch() or Da
12940 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65 20  taFetch() above 
12950 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c  are fast and wil
12960 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  l get the entire
12970 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
12980 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61  eader in most ca
12990 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20 77  ses.  But they w
129a0 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20  ill fail to get 
129b0 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20  the complete.   
129c0 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
129d0 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  r if the record 
129e0 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20  header does not 
129f0 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  fit on a single 
12a00 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74  page.    ** in t
12a10 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e  he B-Tree.  When
12a20 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75   that happens, u
12a30 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  se sqlite3VdbeMe
12a40 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a  mFromBtree() to.
12a50 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74      ** acquire t
12a60 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
12a70 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a  er text..    */.
12a80 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26 26      if( !zRec &&
12a90 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20   avail<len ){.  
12aa0 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
12ab0 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64   0;.      sMem.d
12ac0 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  b = 0;.      rc 
12ad0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12ae0 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
12af0 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49   0, len, pC->isI
12b00 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
12b10 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
12b20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
12b30 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12b40 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
12b50 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
12b60 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e  z;.    }.    zEn
12b70 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44  dHdr = (u8 *)&zD
12b80 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49  ata[len];.    zI
12b90 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dx = (u8 *)&zDat
12ba0 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f  a[szHdr];..    /
12bb0 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65  * Scan the heade
12bc0 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  r and use it to 
12bd0 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70  fill in the aTyp
12be0 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  e[] and aOffset[
12bf0 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e  ].    ** arrays.
12c00 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20    aType[i] will 
12c10 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65  contain the type
12c20 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65   integer for the
12c30 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c   i-th.    ** col
12c40 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  umn and aOffset[
12c50 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
12c60 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
12c70 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
12c80 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
12c90 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  rd to the start 
12ca0 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  of the data for 
12cb0 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a  the i-th column.
12cc0 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69      */.    for(i
12cd0 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
12ce0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
12cf0 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
12d00 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
12d10 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
12d20 20 20 20 69 66 28 20 7a 49 64 78 5b 30 5d 3c 30     if( zIdx[0]<0
12d30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
12d40 20 74 20 3d 20 7a 49 64 78 5b 30 5d 3b 0a 20 20   t = zIdx[0];.  
12d50 20 20 20 20 20 20 20 20 7a 49 64 78 2b 2b 3b 0a          zIdx++;.
12d60 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
12d70 20 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d           zIdx +=
12d80 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
12d90 74 33 32 28 7a 49 64 78 2c 20 26 74 29 3b 0a 20  t32(zIdx, &t);. 
12da0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
12db0 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20   aType[i] = t;. 
12dc0 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d         szField =
12dd0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
12de0 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
12df0 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
12e00 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20  szField;.       
12e10 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69   if( offset<szFi
12e20 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20  eld ){  /* True 
12e30 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c  if offset overfl
12e40 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ows */.         
12e50 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64 48 64 72   zIdx = &zEndHdr
12e60 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20  [1];  /* Forces 
12e70 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72  SQLITE_CORRUPT r
12e80 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20  eturn below */. 
12e90 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
12ea0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12eb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
12ec0 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73 20 74  * If i is less t
12ed0 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e  hat nField, then
12ee0 20 74 68 65 72 65 20 61 72 65 20 66 65 77 65 72   there are fewer
12ef0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a   fields in this.
12f00 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72          ** recor
12f10 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c  d than SetNumCol
12f20 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74  umns indicated t
12f30 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73  here are columns
12f40 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
12f50 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68  ** table. Set th
12f60 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79  e offset for any
12f70 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e   extra columns n
12f80 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20  ot present in.  
12f90 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
12fa0 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74  ord to 0. This t
12fb0 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20  ells code below 
12fc0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 64 65 66  to store the def
12fd0 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 20  ault value.     
12fe0 20 20 20 2a 2a 20 66 6f 72 20 74 68 65 20 63 6f     ** for the co
12ff0 6c 75 6d 6e 20 69 6e 73 74 65 61 64 20 6f 66 20  lumn instead of 
13000 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20  deserializing a 
13010 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
13020 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a  ecord..        *
13030 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  /.        aOffse
13040 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  t[i] = 0;.      
13050 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
13060 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
13070 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d  e(&sMem);.    sM
13080 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
13090 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  ull;..    /* If 
130a0 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72  we have read mor
130b0 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68  e header data th
130c0 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64  an was contained
130d0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a   in the header,.
130e0 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
130f0 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
13100 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
13110 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
13120 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  d of the.    ** 
13130 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
13140 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
13150 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
13160 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
13170 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74   end.    ** of t
13180 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
13190 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
131a0 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
131b0 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
131c0 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
131d0 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
131e0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49    */.    if( (zI
131f0 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c  dx > zEndHdr) ||
13200 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f   (offset > paylo
13210 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20  adSize).        
13220 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48   || (zIdx==zEndH
13230 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61  dr && offset!=pa
13240 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
13250 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
13260 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
13270 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13280 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
13290 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
132a0 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
132b0 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
132c0 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
132d0 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
132e0 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
132f0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
13300 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
13310 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
13320 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
13330 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
13340 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
13350 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
13360 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
13370 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
13380 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
13390 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
133a0 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
133b0 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
133c0 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
133d0 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
133e0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
133f0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
13400 65 63 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  ec ){.      /* T
13410 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f  his is the commo
13420 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  n case where the
13430 20 77 68 6f 6c 65 20 72 6f 77 20 66 69 74 73 20   whole row fits 
13440 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  on a single page
13450 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 4d 65   */.      VdbeMe
13460 6d 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b  mRelease(pDest);
13470 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13480 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20  beSerialGet((u8 
13490 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b  *)&zRec[aOffset[
134a0 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c  p2]], aType[p2],
134b0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
134c0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  se{.      /* Thi
134d0 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
134e0 20 6f 6e 6c 79 20 77 68 65 6e 20 74 68 65 20 72   only when the r
134f0 6f 77 20 6f 76 65 72 66 6c 6f 77 73 20 6f 6e 74  ow overflows ont
13500 6f 20 6d 75 6c 74 69 70 6c 65 20 70 61 67 65 73  o multiple pages
13510 20 2a 2f 0a 20 20 20 20 20 20 74 20 3d 20 61 54   */.      t = aT
13520 79 70 65 5b 70 32 5d 3b 0a 20 20 20 20 20 20 69  ype[p2];.      i
13530 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  f( (pOp->p5 & (O
13540 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
13550 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13560 29 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  ))!=0.       && 
13570 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
13580 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
13590 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
135a0 41 52 47 29 21 3d 30 29 0a 20 20 20 20 20 20 29  ARG)!=0).      )
135b0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  {.        /* Con
135c0 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
135d0 6e 74 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f  nt for the typeo
135e0 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  f() function and
135f0 20 66 6f 72 0a 20 20 20 20 20 20 20 20 2a 2a 20   for.        ** 
13600 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
13610 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
13620 20 62 6c 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69   blob.  So we mi
13630 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 0a  ght as well use.
13640 20 20 20 20 20 20 20 20 2a 2a 20 62 6f 67 75 73          ** bogus
13650 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20   content rather 
13660 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63 6f 6e  than reading con
13670 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
13680 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20 20   NULL works.    
13690 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20      ** for text 
136a0 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61  and blob and wha
136b0 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
136c0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
136d0 72 69 61 62 6c 65 0a 20 20 20 20 20 20 20 20 2a  riable.        *
136e0 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  * will work for 
136f0 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e  everything else.
13700 20 2a 2f 0a 20 20 20 20 20 20 20 20 7a 44 61 74   */.        zDat
13710 61 20 3d 20 74 3c 31 32 20 3f 20 28 63 68 61 72  a = t<12 ? (char
13720 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
13730 20 3a 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   : 0;.      }els
13740 65 7b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d  e{.        len =
13750 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13760 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
13770 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13780 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20  eMemMove(&sMem, 
13790 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20  pDest);.        
137a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
137b0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
137c0 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
137d0 20 6c 65 6e 2c 20 20 70 43 2d 3e 69 73 49 6e 64   len,  pC->isInd
137e0 65 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex,.            
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b           &sMem);
13810 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
13820 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13830 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13840 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
13850 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44      }.        zD
13860 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
13870 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
13880 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
13890 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 74 2c 20  ((u8*)zData, t, 
138a0 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20  pDest);.    }.  
138b0 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
138c0 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65  ncoding;.  }else
138d0 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
138e0 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
138f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13900 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
13910 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e  (pDest, pOp->p4.
13920 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pMem, MEM_Static
13930 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
13940 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
13950 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
13960 6c 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ll);.    }.  }..
13970 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d    /* If we dynam
13980 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
13990 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   space to hold t
139a0 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a  he data (in the.
139b0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
139c0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63  MemFromBtree() c
139d0 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20  all above) then 
139e0 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c  transfer control
139f0 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79   of that.  ** dy
13a00 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
13a10 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74  ted space over t
13a20 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75  o the pDest stru
13a30 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73  cture..  ** This
13a40 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f   prevents a memo
13a50 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20  ry copy..  */.  
13a60 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  if( sMem.zMalloc
13a70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
13a80 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61  sMem.z==sMem.zMa
13a90 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65  lloc );.    asse
13aa0 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13ab0 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  gs & MEM_Dyn) );
13ac0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
13ad0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Dest->flags & (M
13ae0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
13af0 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73  ) || pDest->z==s
13b00 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65  Mem.z );.    pDe
13b10 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  st->flags &= ~(M
13b20 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61  EM_Ephem|MEM_Sta
13b30 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  tic);.    pDest-
13b40 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
13b50 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  rm;.    pDest->z
13b60 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70   = sMem.z;.    p
13b70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  Dest->zMalloc = 
13b80 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  sMem.zMalloc;.  
13b90 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  }..  rc = sqlite
13ba0 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
13bb0 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f  eable(pDest);..o
13bc0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20  p_column_out:.  
13bd0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
13be0 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45  IZE(pDest);.  RE
13bf0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
13c00 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
13c10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13c20 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
13c30 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
13c40 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
13c50 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
13c60 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
13c70 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
13c80 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
13c90 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
13ca0 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
13cb0 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
13cc0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
13cd0 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
13ce0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
13cf0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
13d00 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
13d10 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
13d20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
13d30 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
13d40 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
13d50 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
13d60 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
13d70 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
13d80 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20  .  char cAff;   
13d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
13da0 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
13db0 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f  r of affinity */
13dc0 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
13dd0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
13de0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
13df0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
13e00 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
13e10 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
13e20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
13e30 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20  .  while( (cAff 
13e40 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  = *(zAffinity++)
13e50 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )!=0 ){.    asse
13e60 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e  rt( pIn1 <= &p->
13e70 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
13e80 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
13e90 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
13ea0 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
13eb0 70 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79  pIn1);.    apply
13ec0 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63  Affinity(pIn1, c
13ed0 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Aff, encoding);.
13ee0 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
13ef0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13f00 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
13f10 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
13f20 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
13f30 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
13f40 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
13f50 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  o the [record fo
13f60 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20  rmat].** use as 
13f70 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
13f80 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
13f90 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
13fa0 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
13fb0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
13fc0 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74  ode can decode t
13fd0 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e  he record later.
13fe0 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
13ff0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
14000 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
14010 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63  long.  The nth c
14020 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
14030 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
14040 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
14050 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
14060 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
14070 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64  the nth.** field
14080 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
14090 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
140a0 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
140b0 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
140c0 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
140d0 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
140e0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
140f0 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
14100 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
14110 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
14120 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
14130 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a   affinity NONE..
14140 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
14150 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a  ecord: {.  u8 *z
14160 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20  NewRecord;      
14170 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f    /* A buffer to
14180 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66   hold the data f
14190 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
141a0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63  d */.  Mem *pRec
141b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
141c0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
141d0 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20  */.  u64 nData; 
141e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
141f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
14200 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
14210 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20    int nHdr;     
14220 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14230 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
14240 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
14250 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20   i64 nByte;     
14260 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
14270 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
14280 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a  or this record *
14290 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
142a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
142b0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
142c0 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
142d0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
142e0 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20   int nVarint;   
142f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14300 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20  r of bytes in a 
14310 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20  varint */.  u32 
14320 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20  serial_type;    
14330 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64     /* Type field
14340 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
14350 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
14360 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62  First field to b
14370 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
14380 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14390 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20  Mem *pLast;     
143a0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66         /* Last f
143b0 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f  ield of the reco
143c0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  rd */.  int nFie
143d0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ld;            /
143e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
143f0 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
14400 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
14410 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20  inity;       /* 
14420 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72  The affinity str
14430 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ing for the reco
14440 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65  rd */.  int file
14450 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f  _format;       /
14460 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f  * File format to
14470 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e   use for encodin
14480 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  g */.  int i;   
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
144a0 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
144b0 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20  NewRecord[] */. 
144c0 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
144d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
144e0 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
144f0 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
14500 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
14510 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
14520 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
14530 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
14540 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
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 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
145a0 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
145b0 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
145c0 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
145d0 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
145e0 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
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 2d 2d 2d  ----------------
14630 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
14640 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
14650 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
14660 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
14670 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
14680 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
14690 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  froth..  **.  **
146a0 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
146b0 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
146c0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
146d0 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
146e0 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
146f0 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
14700 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
14710 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
14720 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
14730 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
14740 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
14750 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
14760 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
14770 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
14780 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
14790 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
147a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
147b0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
147c0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
147d0 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
147e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
147f0 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
14800 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
14810 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
14820 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
14830 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
14840 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14850 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
14860 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
14870 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
14880 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
14890 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
148a0 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
148b0 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
148c0 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
148d0 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
148e0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
148f0 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
14900 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
14910 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
14920 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
14930 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
14940 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14950 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
14960 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
14970 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
14980 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
14990 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
149a0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
149b0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
149c0 74 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74  t);..  /* Loop t
149d0 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
149e0 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
149f0 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
14a00 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
14a10 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
14a20 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
14a30 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
14a40 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52  d..  */.  for(pR
14a50 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
14a60 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
14a70 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
14a80 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
14a90 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69  .    if( zAffini
14aa0 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
14ab0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
14ac0 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70  zAffinity[pRec-p
14ad0 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  Data0], encoding
14ae0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
14af0 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d   pRec->flags&MEM
14b00 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e  _Zero && pRec->n
14b10 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
14b20 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
14b30 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
14b40 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  }.    serial_typ
14b50 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
14b60 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
14b70 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
14b80 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
14b90 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
14ba0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
14bb0 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
14bc0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c  .    nHdr += sql
14bd0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
14be0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
14bf0 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
14c00 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
14c10 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65      /* Only pure
14c20 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f   zero-filled BLO
14c30 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20  Bs can be input 
14c40 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a  to this Opcode..
14c50 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e        ** We do n
14c60 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77  ot allow blobs w
14c70 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e 64  ith a prefix and
14c80 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74   a zero-filled t
14c90 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a  ail. */.      nZ
14ca0 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
14cb0 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Zero;.    }else 
14cc0 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20  if( len ){.     
14cd0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20   nZero = 0;.    
14ce0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20  }.  }..  /* Add 
14cf0 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
14d00 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
14d10 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
14d20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
14d30 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
14d40 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66  tLen(nHdr);.  if
14d50 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
14d60 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
14d70 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a   ){.    nHdr++;.
14d80 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
14d90 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a  dr+nData-nZero;.
14da0 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
14db0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
14dc0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
14dd0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
14de0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
14df0 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
14e00 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
14e10 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
14e20 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
14e30 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
14e40 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
14e50 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
14e60 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
14e70 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
14e80 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
14e90 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
14ea0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
14eb0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
14ec0 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f  VdbeMemGrow() co
14ed0 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
14ee0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
14ef0 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
14f00 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
14f10 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
14f20 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
14f30 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
14f40 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
14f50 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
14f60 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
14f70 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14f80 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
14f90 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
14fa0 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
14fb0 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
14fc0 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73  ; pRec++){.    s
14fd0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
14fe0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14ff0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
15000 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
15010 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
15020 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
15030 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f  al_type);      /
15040 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
15050 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d  .  }.  for(pRec=
15060 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
15070 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f  ast; pRec++){  /
15080 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f  * serial data */
15090 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65  .    i += sqlite
150a0 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
150b0 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28  zNewRecord[i], (
150c0 69 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70  int)(nByte-i), p
150d0 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29  Rec,file_format)
150e0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
150f0 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  i==nByte );..  a
15100 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
15110 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
15120 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
15130 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
15140 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
15150 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
15160 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
15170 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
15180 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
15190 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
151a0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
151b0 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
151c0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
151d0 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
151e0 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
151f0 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
15200 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
15210 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
15220 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
15230 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
15240 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
15250 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15260 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
15270 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
15280 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
15290 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
152a0 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
152b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
152c0 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
152d0 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
152e0 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
152f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
15300 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
15310 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
15320 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
15330 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
15340 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
15350 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
15360 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
15370 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
15380 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
15390 73 72 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  sr) ){.    rc = 
153a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
153b0 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
153c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
153d0 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a  nEntry = 0;.  }.
153e0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45    pOut->u.i = nE
153f0 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ntry;.  break;.}
15400 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
15410 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
15420 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
15430 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
15440 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
15450 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
15460 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
15470 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
15480 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
15490 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
154a0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
154b0 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
154c0 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
154d0 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
154e0 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
154f0 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
15500 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
15510 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
15520 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
15530 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
15540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
15550 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
15560 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
15570 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
15580 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
15590 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
155a0 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
155b0 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
155c0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
155d0 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
155e0 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
155f0 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
15600 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
15610 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
15620 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
15630 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
15640 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
15650 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
15660 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
15670 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
15680 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
15690 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
156a0 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
156b0 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
156c0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
156d0 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
156e0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
156f0 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
15700 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
15710 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
15720 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15730 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
15740 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
15750 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
15760 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
15770 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15780 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
15790 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66  unt(db) );..  if
157a0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
157b0 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
157c0 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
157d0 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  t>0 ){.      /* 
157e0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
157f0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
15800 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
15810 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
15820 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
15830 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
15840 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
15850 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
15860 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15870 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15880 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15890 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
158a0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
158b0 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
158c0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
158d0 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
158e0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
158f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
15900 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
15910 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
15920 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15930 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
15940 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
15950 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
15960 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
15970 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
15980 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
15990 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
159a0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
159b0 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
159c0 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
159d0 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
159e0 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
159f0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
15a00 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
15a10 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
15a20 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
15a30 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
15a40 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
15a50 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
15a60 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
15a70 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
15a80 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
15a90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
15aa0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
15ab0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_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 20 20 20 20 20 20 20                  
15ae0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
15af0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
15b00 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
15b10 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
15b20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15b30 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
15b40 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
15b50 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
15b60 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
15b70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
15b80 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
15b90 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
15ba0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
15bb0 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
15bc0 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
15bd0 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
15be0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
15bf0 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
15c00 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
15c10 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
15c20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
15c30 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
15c40 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
15c50 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
15c60 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
15c70 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
15c80 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
15c90 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
15ca0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15cb0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
15cc0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
15cd0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15ce0 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
15cf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15d00 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
15d10 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
15d20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
15d30 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
15d40 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
15d50 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
15d60 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
15d70 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
15d80 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
15d90 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
15da0 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
15db0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
15dc0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
15dd0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
15de0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
15df0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
15e00 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
15e10 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
15e20 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
15e30 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
15e40 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
15e50 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
15e60 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
15e70 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
15e80 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
15e90 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
15ea0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
15eb0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
15ec0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
15ed0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
15ee0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
15ef0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
15f00 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
15f10 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
15f20 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
15f30 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
15f40 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
15f50 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15f60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15f70 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
15f80 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
15f90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
15fa0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
15fb0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 77 72 69  else if( db->wri
15fc0 74 65 56 64 62 65 43 6e 74 3e 30 20 26 26 20 70  teVdbeCnt>0 && p
15fd0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15fe0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
15ff0 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
16000 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
16010 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
16020 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
16030 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
16040 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
16050 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
16060 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
16070 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
16080 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63   db, .        "c
16090 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61  annot release sa
160a0 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74  vepoint - SQL st
160b0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
160c0 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b 0a 20  ress".      );. 
160d0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
160e0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
160f0 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
16100 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
16110 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
16120 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
16130 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
16140 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
16150 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
16160 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
16170 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
16180 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
16190 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
161a0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
161b0 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
161c0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
161d0 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
161e0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
161f0 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
16200 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
16210 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16220 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
16230 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
16240 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
16250 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
16260 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
16270 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16280 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
16290 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
162a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
162b0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
162c0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
162d0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
162e0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20   = pc;.         
162f0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16300 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
16310 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
16320 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
16330 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
16340 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
16350 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
16360 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16370 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
16380 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
16390 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
163a0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  iSavepoint = db-
163b0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53  >nSavepoint - iS
163c0 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20  avepoint - 1;.  
163d0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
163e0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
163f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   ){.          fo
16400 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
16410 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
16420 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
16430 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
16440 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
16450 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 29  t, SQLITE_ABORT)
16460 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
16470 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16480 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
16490 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
164a0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
164b0 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
164c0 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
164d0 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
164e0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
164f0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16500 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
16510 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16520 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
16530 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
16540 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
16550 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
16560 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53   && (db->flags&S
16570 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
16580 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ges)!=0 ){.     
16590 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
165a0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
165b0 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
165c0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
165d0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
165e0 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
165f0 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
16600 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53  = (db->flags | S
16610 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
16620 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ges);.        }.
16630 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
16640 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
16650 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
16660 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
16670 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
16680 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
16690 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
166a0 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
166b0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
166c0 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
166d0 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
166e0 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
166f0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
16700 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
16710 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
16720 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16730 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
16740 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
16750 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
16760 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
16770 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
16780 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
16790 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
167a0 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
167b0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
167c0 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20   operated on .  
167d0 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69      ** too. If i
167e0 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  t is a ROLLBACK 
167f0 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65  TO, then set the
16800 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   number of defer
16810 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  red .      ** co
16820 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
16830 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ons present in t
16840 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  he database to t
16850 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a  he value stored.
16860 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68        ** when th
16870 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20  e savepoint was 
16880 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20  created.  */.   
16890 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
168a0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
168b0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
168c0 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
168d0 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
168e0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
168f0 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
16900 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
16910 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
16920 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
16930 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
16940 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
16950 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
16960 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
16970 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
16980 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  {.        db->nD
16990 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
169a0 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
169b0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  redCons;.      }
169c0 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
169d0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
169e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
169f0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
16a00 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
16a10 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
16a20 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16a30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16a40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16a50 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
16a60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16a70 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
16a80 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
16a90 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
16aa0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
16ab0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
16ac0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
16ad0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
16ae0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
16af0 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
16b00 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
16b10 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
16b20 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
16b30 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
16b40 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
16b50 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
16b60 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
16b70 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16b80 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
16b90 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
16ba0 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
16bb0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
16bc0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
16bd0 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
16be0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
16bf0 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
16c00 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
16c10 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20  nt iRollback;.  
16c20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20  int turnOnAC;.. 
16c30 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
16c40 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
16c50 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
16c60 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
16c70 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
16c80 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
16c90 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
16ca0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
16cb0 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
16cc0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
16cd0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
16ce0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
16cf0 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
16d00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
16d10 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
16d20 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
16d30 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
16d40 20 61 63 74 69 76 65 20 2a 2f 0a 0a 23 69 66 20   active */..#if 
16d50 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  0.  if( turnOnAC
16d60 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
16d70 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
16d80 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>1 ){.    /* I
16d90 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
16da0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
16db0 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68  ROLLBACK and oth
16dc0 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a  er VMs are.    *
16dd0 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c  * still running,
16de0 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69   and a transacti
16df0 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65  on is active, re
16e00 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
16e10 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20  dicating.    ** 
16e20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
16e30 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
16e40 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
16e50 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16e60 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16e70 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f  , db, "cannot ro
16e80 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
16e90 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
16ea0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
16eb0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
16ec0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
16ed0 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  SY;.  }else.#end
16ee0 69 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41  if.  if( turnOnA
16ef0 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20  C && !iRollback 
16f00 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  && db->writeVdbe
16f10 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  Cnt>0 ){.    /* 
16f20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
16f30 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
16f40 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
16f50 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
16f60 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
16f70 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
16f80 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
16f90 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
16fa0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
16fb0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
16fc0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16fd0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16fe0 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
16ff0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
17000 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
17010 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
17020 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17030 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
17040 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
17050 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
17060 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
17070 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
17080 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
17090 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
170a0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
170b0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
170c0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
170d0 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
170e0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
170f0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
17100 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
17110 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
17120 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17130 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17140 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
17150 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17160 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
17170 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
17180 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
17190 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
171a0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
171b0 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
171c0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
171d0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
171e0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
171f0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
17200 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
17210 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
17220 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17230 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
17240 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
17250 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
17260 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
17270 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
17280 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
17290 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
172a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
172b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
172c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
172d0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
172e0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
172f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
17300 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17310 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17320 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
17330 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
17340 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
17350 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
17360 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
17370 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
17380 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
17390 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
173a0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
173b0 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
173c0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
173d0 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
173e0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
173f0 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
17400 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
17410 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61  RROR;.  }.  brea
17420 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17430 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
17440 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
17450 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
17460 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63  on.  The transac
17470 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61  tion ends when a
17480 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62   Commit or Rollb
17490 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73  ack.** opcode is
174a0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44   encountered.  D
174b0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
174c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74  ON CONFLICT sett
174d0 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e  ing, the.** tran
174e0 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c  saction might al
174f0 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  so be rolled bac
17500 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73  k if an error is
17510 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a   encountered..**
17520 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
17530 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
17540 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
17550 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
17560 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
17570 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
17580 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
17590 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
175a0 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
175b0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
175c0 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
175d0 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
175e0 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
175f0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
17600 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  es..**.** If P2 
17610 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
17620 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
17630 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
17640 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f  .  A RESERVED lo
17650 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65  ck is.** obtaine
17660 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
17670 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72  e file when a wr
17680 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
17690 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a  is started.  No.
176a0 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ** other process
176b0 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68   can start anoth
176c0 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  er write transac
176d0 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20  tion while this 
176e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
176f0 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61  * underway.  Sta
17700 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72  rting a write tr
17710 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63  ansaction also c
17720 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63  reates a rollbac
17730 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20  k journal. A.** 
17740 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
17750 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
17760 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61  d before any cha
17770 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
17780 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
17790 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 32  ase.  If P2 is 2
177a0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65 6e   or greater then
177b0 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   an EXCLUSIVE lo
177c0 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69  ck is also obtai
177d0 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69  ned.** on the fi
177e0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  le..**.** If a w
177f0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17800 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
17810 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
17820 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
17830 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
17840 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
17850 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
17860 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
17870 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
17880 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
17890 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
178a0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
178b0 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
178c0 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
178d0 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
178e0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
178f0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
17900 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
17910 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
17920 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
17930 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
17940 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
17950 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
17960 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
17970 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17980 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
17990 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
179a0 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
179b0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
179c0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
179d0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
179e0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
179f0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
17a00 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
17a10 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
17a20 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
17a30 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
17a40 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
17a50 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
17a60 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
17a70 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
17a80 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
17a90 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
17aa0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
17ab0 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
17ac0 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
17ad0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
17ae0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
17af0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
17b00 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
17b10 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
17b20 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
17b30 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
17b40 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
17b50 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
17b60 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
17b70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17b80 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
17b90 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
17ba0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
17bb0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
17bc0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17bd0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17be0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17bf0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17c00 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
17c10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17c20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
17c30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17c40 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
17c50 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
17c60 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
17c70 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
17c80 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
17c90 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
17ca0 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
17cb0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
17cc0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
17cd0 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
17ce0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
17cf0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
17d00 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17d10 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
17d20 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
17d30 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
17d40 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
17d50 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
17d60 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
17d70 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
17d80 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17d90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
17da0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
17db0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
17dc0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
17dd0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
17de0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17df0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17e00 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
17e10 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
17e20 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
17e30 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
17e40 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
17e50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
17e60 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
17e70 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
17e80 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
17e90 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
17ea0 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
17eb0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
17ec0 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
17ed0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
17ee0 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
17ef0 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
17f00 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
17f10 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
17f20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
17f30 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
17f40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17f50 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
17f60 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
17f70 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
17f80 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
17f90 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
17fa0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
17fb0 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
17fc0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
17fd0 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
17fe0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
17ff0 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
18000 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
18010 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
18020 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
18030 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
18040 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
18050 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
18060 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
18070 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
18080 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
18090 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
180a0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
180b0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
180c0 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
180d0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
180e0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
180f0 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
18100 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
18110 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
18120 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
18130 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
18140 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
18150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
18160 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
18170 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
18180 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
18190 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20  iCookie;..  iDb 
181a0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
181b0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
181c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
181d0 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
181e0 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
181f0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
18200 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18210 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
18220 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
18230 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
18240 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
18250 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
18260 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
18270 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
18280 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
18290 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
182a0 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
182b0 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
182c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
182d0 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
182e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
182f0 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  te the content o
18300 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69  f register P3 (i
18310 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
18320 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74   integer).** int
18330 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
18340 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
18350 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65  1.  P2==1 is the
18360 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
18370 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74    .** P2==2 is t
18380 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
18390 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65  at. P2==3 is the
183a0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
183b0 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
183c0 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
183d0 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
183e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
183f0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
18400 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
18410 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
18420 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
18430 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
18440 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
18450 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
18460 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
18470 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
18480 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20  P_SetCookie: {  
18490 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
184a0 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
184b0 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
184c0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
184d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
184e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
184f0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
18500 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
18510 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
18520 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
18530 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
18540 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
18560 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
18570 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
18580 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
18590 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
185a0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
185b0 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
185c0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
185d0 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
185e0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
185f0 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
18600 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
18610 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
18620 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
18630 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
18640 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
18650 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
18660 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
18670 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
18680 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
18690 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
186a0 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
186b0 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
186c0 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
186d0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
186e0 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
186f0 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
18700 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
18710 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
18720 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
18730 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
18740 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
18750 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
18760 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
18770 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
18780 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
18790 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
187a0 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
187b0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
187c0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
187d0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
187e0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
187f0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
18800 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
18810 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
18820 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
18830 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
18840 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
18850 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
18860 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
18870 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18880 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  e: VerifyCookie 
18890 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
188a0 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
188b0 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74  ue of global dat
188c0 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20  abase parameter 
188d0 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a  number 0 (the.**
188e0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29   schema version)
188f0 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69   and make sure i
18900 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32  t is equal to P2
18910 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a 2a   and that the.**
18920 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
18930 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c  ter on the local
18940 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 71   schema parse eq
18950 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50  uals P3..**.** P
18960 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
18970 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
18980 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
18990 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
189a0 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
189b0 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
189c0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
189d0 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
189e0 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
189f0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
18a00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
18a10 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
18a20 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
18a30 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18a40 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
18a50 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
18a60 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
18a70 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
18a80 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
18a90 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
18aa0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
18ab0 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
18ac0 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
18ad0 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
18ae0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
18af0 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
18b00 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
18b10 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
18b20 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
18b30 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
18b40 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
18b50 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
18b60 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
18b70 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
18b80 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18b90 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65 20  t iGen;.  Btree 
18ba0 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
18bb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
18bc0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
18bd0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
18be0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
18bf0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
18c00 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  p1))!=0 );.  ass
18c10 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
18c20 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
18c30 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
18c40 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
18c50 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
18c60 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
18c70 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
18c80 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
18c90 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
18ca0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20  2 *)&iMeta);.   
18cb0 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b   iGen = db->aDb[
18cc0 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
18cd0 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20  ->iGeneration;. 
18ce0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e   }else{.    iGen
18cf0 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20   = iMeta = 0;.  
18d00 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70  }.  if( iMeta!=p
18d10 4f 70 2d 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d  Op->p2 || iGen!=
18d20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73  pOp->p3 ){.    s
18d30 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
18d40 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
18d50 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
18d60 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
18d70 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
18d80 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
18d90 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
18da0 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
18db0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18dc0 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
18dd0 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
18de0 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
18df0 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
18e00 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
18e10 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
18e20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
18e30 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
18e40 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
18e50 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
18e60 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
18e70 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
18e80 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
18e90 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
18ea0 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
18eb0 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
18ec0 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
18ed0 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
18ee0 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
18ef0 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
18f00 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
18f10 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
18f20 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
18f30 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
18f40 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
18f50 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
18f60 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
18f70 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
18f80 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
18f90 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
18fa0 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
18fb0 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
18fc0 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
18fd0 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
18fe0 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
18ff0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
19000 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
19010 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
19020 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
19030 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
19040 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
19050 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
19060 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
19070 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
19080 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
19090 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
190a0 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
190b0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
190c0 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
190d0 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  p1);.    }..    
190e0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
190f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19100 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
19110 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19120 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
19130 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
19140 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
19150 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
19160 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
19170 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
19180 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
19190 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
191a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
191b0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
191c0 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
191d0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
191e0 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
191f0 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
19200 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
19210 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
19220 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
19230 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
19240 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
19250 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
19260 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
19270 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
19280 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
19290 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
192a0 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
192b0 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
192c0 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
192d0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
192e0 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
192f0 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
19300 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
19310 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
19320 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19330 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
19340 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
19350 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
19360 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
19370 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
19380 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
19390 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
193a0 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
193b0 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
193c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
193d0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
193e0 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
193f0 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
19400 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
19410 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
19420 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19430 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
19440 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
19450 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
19460 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
19470 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
19480 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
19490 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
194a0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
194b0 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
194c0 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
194d0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
194e0 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
194f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
19500 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
19510 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
19520 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
19530 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
19540 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
19550 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
19560 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
19570 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
19580 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
19590 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
195a0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
195b0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
195c0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
195d0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
195e0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
195f0 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
19600 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
19610 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
19620 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
19630 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
19640 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
19650 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
19660 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
19670 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
19680 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
19690 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
196a0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
196b0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
196c0 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
196d0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
196e0 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
196f0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
19700 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
19710 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
19720 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
19730 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
19740 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
19750 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
19760 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
19770 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
19780 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
19790 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
197a0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
197b0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
197c0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
197d0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
197e0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
197f0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
19800 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
19810 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
19820 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
19830 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
19840 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
19850 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
19860 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
19870 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
19880 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
19890 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
198a0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
198b0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
198c0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
198d0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
198e0 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
198f0 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
19900 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
19910 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
19920 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
19930 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
19940 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
19950 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
19960 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
19970 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
19980 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
19990 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
199a0 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
199b0 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
199c0 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
199d0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
199e0 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
199f0 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
19a00 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
19a10 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
19a20 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
19a30 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
19a40 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
19a50 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
19a60 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
19a70 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
19a80 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
19a90 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
19aa0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
19ab0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
19ac0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
19ad0 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52  p5&(OPFLAG_P2ISR
19ae0 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  EG|OPFLAG_BULKCS
19af0 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a  R))==pOp->p5 );.
19b00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
19b10 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
19b20 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ite || pOp->p5==
19b30 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  0 );..  if( p->e
19b40 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63  xpired ){.    rc
19b50 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
19b60 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
19b70 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
19b80 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
19b90 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
19ba0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
19bb0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
19bc0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
19bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
19be0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
19bf0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
19c00 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
19c10 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
19c20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
19c30 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
19c40 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
19c50 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
19c60 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
19c70 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   = 1;.    assert
19c80 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
19c90 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
19ca0 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
19cb0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
19cc0 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
19cd0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
19ce0 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
19cf0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
19d00 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
19d10 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
19d20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
19d30 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
19d40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
19d50 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
19d60 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
19d70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
19d80 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  t( p2<=p->nMem )
19d90 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
19da0 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
19db0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
19dc0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
19dd0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
19de0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
19df0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
19e00 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
19e10 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
19e20 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
19e30 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
19e40 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
19e50 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
19e60 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
19e70 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
19e80 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
19e90 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
19ea0 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
19eb0 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
19ec0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
19ed0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
19ee0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
19ef0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
19f00 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
19f10 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
19f20 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
19f30 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
19f40 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
19f50 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19f60 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
19f70 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
19f80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19f90 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
19fa0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
19fb0 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
19fc0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
19fd0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b  pKeyInfo;.    pK
19fe0 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
19ff0 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46  C(p->db);.    nF
1a000 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1a010 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c  >nField+1;.  }el
1a020 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1a030 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1a040 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1a050 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1a060 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a070 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   );.  pCur = all
1a080 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a090 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1a0a0 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
1a0b0 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1a0c0 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1a0d0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1a0e0 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1a0f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1a100 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1a110 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1a120 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
1a130 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1a140 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1a150 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  o;.  assert( OPF
1a160 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1a170 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1a180 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1a190 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70  sorHints(pCur->p
1a1a0 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35  Cursor, (pOp->p5
1a1b0 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1a1c0 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65  R));..  /* Since
1a1d0 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20   it performs no 
1a1e0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1a1f0 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c  n or IO, the onl
1a200 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a  y value that.  *
1a210 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  * sqlite3BtreeCu
1a220 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72  rsor() may retur
1a230 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20  n is SQLITE_OK. 
1a240 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  */.  assert( rc=
1a250 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20  =SQLITE_OK );.. 
1a260 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65   /* Set the Vdbe
1a270 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61  Cursor.isTable a
1a280 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72 69 61  nd isIndex varia
1a290 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76  bles. Previous v
1a2a0 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1a2b0 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1a2c0 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1a2d0 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1a2e0 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1a2f0 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1a300 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1a310 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1a320 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1a330 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1a340 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1a350 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1a360 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1a370 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1a380 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1a390 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49  NFO;.  pCur->isI
1a3a0 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73  ndex = !pCur->is
1a3b0 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
1a3c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1a3d0 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
1a3e0 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
1a3f0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1a400 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
1a410 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
1a420 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
1a430 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
1a440 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
1a450 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a460 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
1a470 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
1a480 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
1a490 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
1a4a0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
1a4b0 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
1a4c0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
1a4d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1a4e0 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  n the ephemeral 
1a4f0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1a500 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
1a510 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
1a520 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
1a530 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
1a540 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
1a550 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1a560 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
1a570 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1a580 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
1a590 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
1a5a0 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
1a5b0 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ex..**.** This o
1a5c0 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63  pcode was once c
1a5d0 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20  alled OpenTemp. 
1a5e0 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65   But that create
1a5f0 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62  d.** confusion b
1a600 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20  ecause the term 
1a610 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69  "temp table", mi
1a620 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72  ght refer either
1a630 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61  .** to a TEMP ta
1a640 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c  ble at the SQL l
1a650 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61  evel, or to a ta
1a660 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a  ble opened by.**
1a670 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54   this opcode.  T
1a680 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1a690 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72  was call OpenVir
1a6a0 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68  tual.  But.** th
1a6b0 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75  at created confu
1a6c0 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68  sion with the wh
1a6d0 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  ole virtual-tabl
1a6e0 65 20 69 64 65 61 2e 0a 2a 2a 0a 2a 2a 20 54 68  e idea..**.** Th
1a6f0 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63  e P5 parameter c
1a700 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20  an be a mask of 
1a710 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67  the BTREE_* flag
1a720 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20  s defined.** in 
1a730 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20  btree.h.  These 
1a740 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73  flags control as
1a750 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65  pects of the ope
1a760 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ration of.** the
1a770 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52   btree.  The BTR
1a780 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1a790 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  and BTREE_SINGLE
1a7a0 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64   flags are.** ad
1a7b0 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1a7c0 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1a7d0 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
1a7e0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1a7f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1a800 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1a810 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1a820 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1a830 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1a840 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1a850 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1a860 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1a870 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1a880 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1a890 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1a8a0 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1a8b0 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1a8c0 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1a8d0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1a8e0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1a8f0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1a900 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61  rsor *pCx;.  sta
1a910 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1a920 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1a930 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1a940 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1a950 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1a960 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1a970 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1a980 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1a990 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1a9a0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1a9b0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1a9c0 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  B;..  assert( pO
1a9d0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
1a9e0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1a9f0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1aa00 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1aa10 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1aa20 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1aa30 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1aa40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1aa50 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73  reeOpen(db->pVfs
1aa60 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70  , 0, db, &pCx->p
1aa70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  Bt, .           
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1aa90 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1aaa0 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c  | BTREE_SINGLE |
1aab0 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61   pOp->p5, vfsFla
1aac0 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  gs);.  if( rc==S
1aad0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1aae0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1aaf0 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
1ab00 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  >pBt, 1);.  }.  
1ab10 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1ab20 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
1ab30 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1ab40 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
1ab50 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
1ab60 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
1ab70 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1ab80 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
1ab90 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20  EE_BLOBKEY flag 
1aba0 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70  before.    ** op
1abb0 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74  ening it. If a t
1abc0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69  ransient table i
1abd0 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74  s required, just
1abe0 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20   use the.    ** 
1abf0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1ac00 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68  eated table with
1ac10 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e   root-page 1 (an
1ac20 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62   BLOB_INTKEY tab
1ac30 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1ac40 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  if( pOp->p4.pKey
1ac50 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e  Info ){.      in
1ac60 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
1ac70 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1ac80 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1ac90 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1aca0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1acb0 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70  ble(pCx->pBt, &p
1acc0 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gno, BTREE_BLOBK
1acd0 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
1ace0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1acf0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1ad00 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
1ad10 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
1ad20 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1ad30 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ad40 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f  r(pCx->pBt, pgno
1ad50 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 1, .          
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad70 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29        (KeyInfo*)
1ad80 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e  pOp->p4.z, pCx->
1ad90 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1ada0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1adb0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1adc0 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  fo;.        pCx-
1add0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
1ade0 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
1adf0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1ae00 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1ae10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1ae20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ae30 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1ae40 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
1ae50 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
1ae60 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1ae70 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1ae80 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64    }.  pCx->isOrd
1ae90 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
1aea0 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
1aeb0 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  );.  pCx->isInde
1aec0 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c  x = !pCx->isTabl
1aed0 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
1aee0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
1aef0 4f 70 65 6e 20 50 31 20 50 32 20 2a 20 50 34 20  Open P1 P2 * P4 
1af00 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1af10 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1af20 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1af30 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1af40 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1af50 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1af60 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1af70 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1af80 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1af90 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1afa0 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1afb0 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20  orithm..*/.case 
1afc0 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1afd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1afe0 43 78 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  Cx;..#ifndef SQL
1aff0 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53  ITE_OMIT_MERGE_S
1b000 4f 52 54 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f  ORT.  pCx = allo
1b010 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1b020 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1b030 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
1b040 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1b050 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49  em;.  pCx->pKeyI
1b060 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1b070 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 70  eyInfo;.  pCx->p
1b080 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45  KeyInfo->enc = E
1b090 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 70 43 78  NC(p->db);.  pCx
1b0a0 2d 3e 69 73 53 6f 72 74 65 72 20 3d 20 31 3b 0a  ->isSorter = 1;.
1b0b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1b0c0 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1b0d0 20 70 43 78 29 3b 0a 23 65 6c 73 65 0a 20 20 70   pCx);.#else.  p
1b0e0 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
1b0f0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3b 0a 20  OpenEphemeral;. 
1b100 20 70 63 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20   pc--;.#endif.  
1b110 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b120 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1b130 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
1b140 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1b150 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1b160 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1b170 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1b180 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1b190 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1b1a0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1b1b0 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1b1c0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1b1d0 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 77 68  * register P2 wh
1b1e0 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74  en P5==0.  In ot
1b1f0 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1b200 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1b210 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1b220 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1b230 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1b240 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 57 68  register P2.  Wh
1b250 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74  en P5==1, then t
1b260 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70  he.** row is rep
1b270 72 65 73 65 6e 74 65 64 20 62 79 20 50 33 20 63  resented by P3 c
1b280 6f 6e 73 65 63 75 74 69 76 65 20 72 65 67 69 73  onsecutive regis
1b290 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
1b2a0 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ith P2..**.** A 
1b2b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1b2c0 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1b2d0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1b2e0 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1b2f0 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1b300 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1b310 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1b320 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1b330 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1b340 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1b350 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b360 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1b370 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1b380 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1b390 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1b3a0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1b3b0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1b3c0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1b3d0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1b3e0 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1b3f0 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1b400 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1b410 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1b420 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1b430 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1b440 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b450 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
1b460 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1b470 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1b480 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1b490 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1b4a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1b4b0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1b4c0 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1b4d0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1b4e0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1b4f0 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
1b500 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74  = 0;.  pCx->mult
1b510 69 50 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70  iPseudo = pOp->p
1b520 35 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  5;.  break;.}../
1b530 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1b540 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1b550 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1b560 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1b570 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1b580 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1b590 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1b5a0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1b5b0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1b5c0 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1b5d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b5e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b5f0 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1b600 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1b610 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1b620 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1b630 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1b640 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b650 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50  Opcode: SeekGe P
1b660 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b670 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1b680 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1b690 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1b6a0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1b6b0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1b6c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1b6d0 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
1b6e0 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
1b6f0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1b700 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1b710 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1b720 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1b730 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1b740 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1b750 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1b760 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1b770 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1b780 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1b790 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1b7a0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1b7b0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1b7c0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1b7d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1b7e0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1b7f0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1b800 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1b810 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1b820 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1b830 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1b840 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1b850 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1b860 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1b870 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1b880 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1b890 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31  pcode: SeekGt P1
1b8a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1b8b0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1b8c0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1b8d0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1b8e0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1b8f0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1b900 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1b910 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1b920 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1b930 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1b940 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1b950 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1b960 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1b970 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1b980 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1b990 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1b9a0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1b9b0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1b9c0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1b9d0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1b9e0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1b9f0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1ba00 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1ba10 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1ba20 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1ba30 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1ba40 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1ba50 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1ba60 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1ba70 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1ba80 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1ba90 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1baa0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1bab0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1bac0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1bad0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1bae0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1baf0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1bb00 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1bb10 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1bb20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1bb30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1bb40 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1bb50 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1bb60 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1bb70 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1bb80 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1bb90 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1bba0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1bbb0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1bbc0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1bbd0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1bbe0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1bbf0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1bc00 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1bc10 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1bc20 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1bc30 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1bc40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1bc50 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1bc60 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1bc70 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1bc80 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1bc90 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1bca0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1bcb0 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1bcc0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1bcd0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20   Opcode: SeekLe 
1bce0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1bcf0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1bd00 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1bd10 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1bd20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1bd30 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1bd40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1bd50 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1bd60 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1bd70 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1bd80 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1bd90 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1bda0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1bdb0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1bdc0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1bdd0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1bde0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1bdf0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1be00 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1be10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1be20 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1be30 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1be40 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1be50 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1be60 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1be70 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1be80 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1be90 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1bea0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1beb0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1bec0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1bed0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1bee0 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
1bef0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1bf00 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74  /.case OP_SeekLt
1bf10 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1bf20 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1bf30 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20  P_SeekLe:       
1bf40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1bf50 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65  /.case OP_SeekGe
1bf60 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1bf70 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1bf80 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20  P_SeekGt: {     
1bf90 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1bfa0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1bfb0 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1bfc0 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1bfd0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1bfe0 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1bff0 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1c000 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1c010 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1c020 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c030 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c040 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c050 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1c060 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1c070 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c080 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c090 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c0a0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1c0b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1c0c0 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53  P_SeekLe == OP_S
1c0d0 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73  eekLt+1 );.  ass
1c0e0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d  ert( OP_SeekGe =
1c0f0 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b  = OP_SeekLt+2 );
1c100 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c110 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGt == OP_SeekL
1c120 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+3 );.  assert(
1c130 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1c140 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1c150 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1c160 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1c170 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1c180 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1c190 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1c1a0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1c1b0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1c1c0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1c1d0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1c1e0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1c1f0 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1c200 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1c210 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1c220 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1c230 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1c240 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1c250 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1c260 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1c270 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
1c280 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1c290 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
1c2a0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1c2b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1c2c0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
1c2d0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1c2e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c2f0 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1c300 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1c310 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1c320 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
1c330 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1c340 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1c350 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1c360 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1c370 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1c380 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1c390 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1c3a0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1c3b0 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1c3c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1c3d0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1c3e0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1c3f0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1c400 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1c410 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
1c420 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1c430 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1c440 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1c450 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c460 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1c470 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1c480 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
1c490 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
1c4a0 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
1c4b0 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1c4c0 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
1c4d0 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
1c4e0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
1c4f0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1c500 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
1c510 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
1c520 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1c530 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1c540 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1c550 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1c560 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
1c570 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
1c580 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
1c590 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
1c5a0 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
1c5b0 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
1c5c0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
1c5d0 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
1c5e0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
1c5f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1c600 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1c610 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1c620 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1c630 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1c650 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1c660 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  rst(pC->pCursor,
1c670 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1c680 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1c690 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1c6a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c6b0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1c6c0 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1c6d0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1c6e0 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc<=OP_SeekLe 
1c6f0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1c700 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1c710 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1c720 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1c730 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1c740 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1c750 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1c760 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c770 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c780 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1c7a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c7b0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1c7d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c7e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c7f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1c800 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1c810 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1c820 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1c830 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1c840 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1c850 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1c860 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1c870 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1c880 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1c890 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1c8a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1c8b0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1c8c0 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1c8d0 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1c8e0 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1c8f0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1c900 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1c910 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1c920 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1c930 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1c940 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1c950 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1c960 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1c970 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1c980 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1c990 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1c9a0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1c9b0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c9c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1c9d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c9e0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1c9f0 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1ca00 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1ca10 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1ca20 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1ca30 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1ca40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1ca50 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1ca60 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1ca70 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ca80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1ca90 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1caa0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1cab0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1cac0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1cad0 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1cae0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1caf0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1cb00 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1cb10 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1cb20 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1cb30 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63       **   if( oc
1cb40 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
1cb50 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
1cb60 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66        **     r.f
1cb70 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1cb80 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a  INCRKEY;.      *
1cb90 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20  *   }else{.     
1cba0 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1cbb0 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 0;.      **   
1cbc0 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  }.      */.     
1cbd0 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36 29   r.flags = (u16)
1cbe0 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  (UNPACKED_INCRKE
1cbf0 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f  Y * (1 & (oc - O
1cc00 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20  P_SeekLt)));.   
1cc10 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1cc20 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c  P_SeekGt || r.fl
1cc30 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1cc40 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1cc50 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1cc60 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekLe || r.flags=
1cc70 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  =UNPACKED_INCRKE
1cc80 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Y );.      asser
1cc90 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65  t( oc!=OP_SeekGe
1cca0 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29   || r.flags==0 )
1ccb0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1ccc0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc!=OP_SeekLt ||
1ccd0 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a   r.flags==0 );..
1cce0 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
1ccf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1cd00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1cd10 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69  UG.      { int i
1cd20 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1cd30 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1cd40 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1cd50 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1cd60 23 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70  #endif.      Exp
1cd70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b  andBlob(r.aMem);
1cd80 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1cd90 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1cda0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1cdb0 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
1cdc0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1cdd0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1cde0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1cdf0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1ce00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1ce10 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ce20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  = 0;.    }.    p
1ce30 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1ce40 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
1ce50 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1ce60 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
1ce70 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
1ce80 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
1ce90 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1cea0 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53      if( oc>=OP_S
1ceb0 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74  eekGe ){  assert
1cec0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc==OP_SeekGe 
1ced0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  || oc==OP_SeekGt
1cee0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1cef0 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
1cf00 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29  & oc==OP_SeekGt)
1cf10 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1cf20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1cf30 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1cf40 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1cf50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1cf60 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1cf70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1cf80 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1cf90 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
1cfa0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
1cfb0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
1cfc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cfd0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1cfe0 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1cff0 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1d000 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
1d010 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1d020 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20  eekLt) ){.      
1d030 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d040 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1d050 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1d060 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1d070 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1d080 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d090 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1d0a0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d0b0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1d0c0 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d          /* res m
1d0d0 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
1d0e0 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
1d0f0 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
1d100 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a  eck to.        *
1d110 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1d120 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1d130 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65     */.        re
1d140 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1d150 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1d160 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1d170 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1d180 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  >p2>0 );.    if(
1d190 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
1d1a0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d1b0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1d1c0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1d1d0 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ns when attempti
1d1e0 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  ng to open the s
1d1f0 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61  qlite3_master ta
1d200 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72  ble.    ** for r
1d210 65 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72  ead access retur
1d220 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
1d230 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c   In this case al
1d240 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65  ways.    ** take
1d250 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65   the jump (since
1d260 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1d270 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62  cords in the tab
1d280 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1d290 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d2a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1d2b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1d2c0 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  k P1 P2 * * *.**
1d2d0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
1d2e0 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61  n table cursor a
1d2f0 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64  nd P2 is a rowid
1d300 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e   integer.  Arran
1d310 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20  ge.** for P1 to 
1d320 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20  move so that it 
1d330 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f  points to the ro
1d340 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e  wid given by P2.
1d350 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
1d360 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72  ctually a deferr
1d370 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
1d380 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
1d390 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
1d3a0 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
1d3b0 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
1d3c0 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
1d3d0 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
1d3e0 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
1d3f0 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f   I/O happens..*/
1d400 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b  .case OP_Seek: {
1d410 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
1d420 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d430 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d440 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d450 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d460 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1d470 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1d480 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1d490 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1d4a0 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
1d4b0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1d4c0 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  ble );.    pC->n
1d4d0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1d4e0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1d4f0 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d  ->p2];.    pC->m
1d500 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1d510 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1d520 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d  e(pIn2);.    pC-
1d530 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d540 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
1d550 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
1d560 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20   }.  break;.}.  
1d570 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1d580 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1d590 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1d5a0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1d5b0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1d5c0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1d5d0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1d5e0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1d5f0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1d600 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1d610 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1d620 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1d630 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1d640 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1d650 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1d660 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1d670 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1d680 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1d690 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1d6a0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1d6b0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1d6c0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1d6d0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1d6e0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1d6f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1d700 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1d710 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1d720 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1d730 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1d740 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1d750 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1d760 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1d770 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1d780 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1d790 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1d7a0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1d7b0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1d7c0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1d7d0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1d7e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1d7f0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1d800 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1d810 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1d820 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1d830 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1d840 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1d850 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1d860 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1d870 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1d880 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1d890 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1d8a0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1d8b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1d8c0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1d8d0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1d8e0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1d8f0 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  entry..**.** See
1d900 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d910 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75  tExists, IsUniqu
1d920 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1d930 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1d940 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d950 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1d960 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d970 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1d980 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65  dyExists;.  Vdbe
1d990 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1d9a0 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70  t res;.  char *p
1d9b0 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
1d9c0 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
1d9d0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1d9e0 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
1d9f0 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
1da00 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
1da10 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
1da20 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*3 + 7];..#ifde
1da30 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1da40 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
1da50 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
1da60 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1da70 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1da80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1da90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1daa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1dab0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1dac0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
1dad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1dae0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1daf0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1db00 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
1db10 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1db20 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20  sor!=0) ){..    
1db30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1db40 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66  ble==0 );.    if
1db50 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
1db60 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
1db70 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1db80 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
1db90 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
1dba0 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20  i;.      r.aMem 
1dbb0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
1dbc0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1dbd0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1dbe0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1dbf0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1dc00 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1dc10 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1dc20 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1dc30 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1dc40 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64  MATCH;.      pId
1dc50 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d  xKey = &r;.    }
1dc60 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 64 78  else{.      pIdx
1dc70 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1dc80 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
1dc90 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 20 20  cord(.          
1dca0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54  pC->pKeyInfo, aT
1dcb0 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
1dcc0 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65  TempRec), &pFree
1dcd0 0a 20 20 20 20 20 20 29 3b 20 0a 20 20 20 20 20  .      ); .     
1dce0 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
1dcf0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1dd00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e       assert( pIn
1dd10 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
1dd20 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 61 73 73  lob );.      ass
1dd30 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
1dd40 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
1dd50 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62   );  /* zeroblob
1dd60 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64  s already expand
1dd70 65 64 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ed */.      sqli
1dd80 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
1dd90 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
1dda0 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
1ddb0 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
1ddc0 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
1ddd0 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50  gs |= UNPACKED_P
1dde0 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
1ddf0 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
1de00 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1de10 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1de20 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1de30 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1de40 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29  ( pOp->p4.i==0 )
1de50 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
1de60 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29  bFree(db, pFree)
1de70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1de80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1de90 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1dea0 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45    }.    alreadyE
1deb0 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
1dec0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1ded0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1dee0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1def0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1df00 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1df10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1df20 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
1df30 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1df40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1df50 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
1df60 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1df70 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1df80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1df90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55  ../* Opcode: IsU
1dfa0 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50  nique P1 P2 P3 P
1dfb0 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  4 *.**.** Cursor
1dfc0 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   P1 is open on a
1dfd0 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d  n index b-tree -
1dfe0 20 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c   that is to say,
1dff0 20 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a   a btree which.*
1e000 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68  * no data and wh
1e010 65 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20  ere the key are 
1e020 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65  records generate
1e030 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  d by OP_MakeReco
1e040 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c  rd with.** the l
1e050 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20  ist field being 
1e060 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  the integer ROWI
1e070 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  D of the entry t
1e080 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a  hat the index.**
1e090 20 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f   entry refers to
1e0a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72  ..**.** The P3 r
1e0b0 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73  egister contains
1e0c0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f   an integer reco
1e0d0 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20  rd number. Call 
1e0e0 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20  this record .** 
1e0f0 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74  number R. Regist
1e100 65 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72  er P4 is the fir
1e110 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e  st in a set of N
1e120 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69   contiguous regi
1e130 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61  sters.** that ma
1e140 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65  ke up an unpacke
1e150 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74  d index key that
1e160 20 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74   can be used wit
1e170 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  h cursor P1..** 
1e180 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63  The value of N c
1e190 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66  an be inferred f
1e1a0 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20  rom the cursor. 
1e1b0 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72  N includes the r
1e1c0 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70  owid.** value ap
1e1d0 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e  pended to the en
1e1e0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72  d of the index r
1e1f0 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69  ecord. This rowi
1e200 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f  d value may.** o
1e210 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65  r may not be the
1e220 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a   same as R..**.*
1e230 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20  * If any of the 
1e240 4e 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  N registers begi
1e250 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73  nning with regis
1e260 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  ter P4 contains 
1e270 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c  a NULL.** value,
1e280 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e290 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f  y to P2..**.** O
1e2a0 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69  therwise, this i
1e2b0 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b  nstruction check
1e2c0 73 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63  s if cursor P1 c
1e2d0 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79  ontains an entry
1e2e0 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69  .** where the fi
1e2f0 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73  rst (N-1) fields
1e300 20 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72   match but the r
1e310 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68  owid value at th
1e320 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20  e end.** of the 
1e330 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e  index entry is n
1e340 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69  ot R. If there i
1e350 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c  s no such entry,
1e360 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a   control jumps.*
1e370 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  * to instruction
1e380 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
1e390 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1e3a0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64   conflicting ind
1e3b0 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63  ex.** entry is c
1e3c0 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65  opied to registe
1e3d0 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  r P3 and control
1e3e0 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1e3f0 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  o the next.** in
1e400 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1e410 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1e420 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1e430 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50  Found.*/.case OP
1e440 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20  _IsUnique: {    
1e450 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e460 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20   */.  u16 ii;.  
1e470 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1e480 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1e490 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64  sr;.  u16 nField
1e4a0 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20  ;.  Mem *aMx;.  
1e4b0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1e4c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e4d0 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64     /* B-Tree ind
1e4e0 65 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f  ex search key */
1e4f0 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20  .  i64 R;       
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73        /* Rowid s
1e520 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1e530 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20  r P3 */..  pIn3 
1e540 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e550 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b  ;.  aMx = &aMem[
1e560 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a  pOp->p4.i];.  /*
1e570 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
1e580 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d   values of param
1e590 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20  eters P1 and P4 
1e5a0 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f  are in range. */
1e5b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e5c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1e5d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e5e0 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70  p->p4.i>0 && pOp
1e5f0 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20  ->p4.i<=p->nMem 
1e600 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e610 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e620 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e630 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  ..  /* Find the 
1e640 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f  index cursor. */
1e650 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73  .  pCx = p->apCs
1e660 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e670 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72  sert( pCx->defer
1e680 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1e690 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c    pCx->seekResul
1e6a0 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61  t = 0;.  pCx->ca
1e6b0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e6c0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72  E_STALE;.  pCrsr
1e6d0 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b   = pCx->pCursor;
1e6e0 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66  ..  /* If any of
1e6f0 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
1e700 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a  NULL, take the j
1e710 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  ump. */.  nField
1e720 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f   = pCx->pKeyInfo
1e730 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28  ->nField;.  for(
1e740 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b  ii=0; ii<nField;
1e750 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20   ii++){.    if( 
1e760 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  aMx[ii].flags & 
1e770 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1e780 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1e790 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20   1;.      pCrsr 
1e7a0 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  = 0;.      break
1e7b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1e7c0 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c  sert( (aMx[nFiel
1e7d0 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  d].flags & MEM_N
1e7e0 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  ull)==0 );..  if
1e7f0 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
1e800 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68    /* Populate th
1e810 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b  e index search k
1e820 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65  ey. */.    r.pKe
1e830 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65  yInfo = pCx->pKe
1e840 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1e850 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31  eld = nField + 1
1e860 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20  ;.    r.flags = 
1e870 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1e880 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d  SEARCH;.    r.aM
1e890 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65 66  em = aMx;.#ifdef
1e8a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1e8b0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1e8c0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1e8d0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1e8e0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1e8f0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1e900 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20  .    /* Extract 
1e910 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66  the value of R f
1e920 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e  rom register P3.
1e930 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
1e940 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1e950 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20  (pIn3);.    R = 
1e960 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20  pIn3->u.i;..    
1e970 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d  /* Search the B-
1e980 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e  Tree index. If n
1e990 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  o conflicting re
1e9a0 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a  cord is found, j
1e9b0 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32  ump.    ** to P2
1e9c0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70  . Otherwise, cop
1e9d0 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  y the rowid of t
1e9e0 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  he conflicting r
1e9f0 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20  ecord to.    ** 
1ea00 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1ea10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1ea20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1ea30 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63  tion.  */.    rc
1ea40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1ea50 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1ea60 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
1ea70 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29  pCx->seekResult)
1ea80 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61  ;.    if( (r.fla
1ea90 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs & UNPACKED_PR
1eaa0 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20  EFIX_SEARCH) || 
1eab0 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20  r.rowid==R ){.  
1eac0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1ead0 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   - 1;.    }else{
1eae0 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69  .      pIn3->u.i
1eaf0 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20   = r.rowid;.    
1eb00 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
1eb10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1eb20 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1eb30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68  * *.**.** Use th
1eb40 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1eb50 69 73 74 65 72 20 50 33 20 61 73 20 61 6e 20 69  ister P3 as an i
1eb60 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20  nteger key.  If 
1eb70 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74  a record .** wit
1eb80 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20  h that key does 
1eb90 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62  not exist in tab
1eba0 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a  le of P1, then j
1ebb0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
1ebc0 66 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65  f the record doe
1ebd0 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61  s exist, then fa
1ebe0 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65  ll through.  The
1ebf0 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1ec00 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
1ec10 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
1ec20 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54   exists..**.** T
1ec30 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
1ec40 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61  tween this opera
1ec50 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e  tion and NotFoun
1ec60 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a  d is that this.*
1ec70 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75  * operation assu
1ec80 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61  mes the key is a
1ec90 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68  n integer and th
1eca0 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65  at P1 is a table
1ecb0 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46   whereas.** NotF
1ecc0 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79  ound assumes key
1ecd0 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74   is a blob const
1ece0 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65  ructed from Make
1ecf0 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31  Record and.** P1
1ed00 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
1ed10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ed20 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  und, NotFound, I
1ed30 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
1ed40 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20  OP_NotExists: { 
1ed50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1ed60 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
1ed70 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1ed80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1ed90 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65  t res;.  u64 iKe
1eda0 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  y;..  pIn3 = &aM
1edb0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1edc0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1edd0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1ede0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1edf0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1ee00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1ee10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1ee20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1ee30 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1ee40 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1ee50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1ee60 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1ee70 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
1ee80 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
1ee90 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
1eea0 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 65 73 20  !=0) ){.    res 
1eeb0 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  = 0;.    iKey = 
1eec0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72  pIn3->u.i;.    r
1eed0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1eee0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1eef0 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
1ef00 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
1ef10 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e  >lastRowid = pIn
1ef20 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e  3->u.i;.    pC->
1ef30 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72  rowidIsValid = r
1ef40 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20  es==0 ?1:0;.    
1ef50 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1ef60 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1ef70 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ef80 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  LE;.    pC->defe
1ef90 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1efa0 20 20 20 20 69 66 28 20 72 65 73 21 3d 30 20 29      if( res!=0 )
1efb0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1efc0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1efd0 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
1efe0 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20  dIsValid==0 );. 
1eff0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65     }.    pC->see
1f000 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
1f010 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
1f020 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
1f030 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f   an attempt to o
1f040 70 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f  pen a read curso
1f050 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a  r on the .    **
1f060 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
1f070 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c  able returns SQL
1f080 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a  ITE_EMPTY..    *
1f090 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
1f0a0 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65  p2 - 1;.    asse
1f0b0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1f0c0 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70  alid==0 );.    p
1f0d0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1f0e0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
1f0f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1f100 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
1f110 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68   *.**.** Find th
1f120 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
1f130 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f140 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
1f150 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
1f160 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
1f170 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1f180 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
1f190 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
1f1a0 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
1f1b0 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
1f1c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
1f1d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1f1e0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
1f1f0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1f200 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
1f210 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f220 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f230 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f240 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f250 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
1f260 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
1f270 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
1f280 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
1f290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
1f2a0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
1f2b0 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  *.**.** Get a ne
1f2c0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1f2d0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1f2e0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1f2f0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1f300 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1f310 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1f320 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1f330 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1f340 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1f350 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1f360 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1f370 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1f380 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1f390 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1f3a0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1f3b0 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1f3c0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
1f3d0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
1f3e0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
1f3f0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
1f400 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1f410 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
1f420 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
1f430 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1f440 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
1f450 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
1f460 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
1f470 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
1f480 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
1f490 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
1f4a0 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1f4b0 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1f4c0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1f4d0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1f4e0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1f4f0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1f500 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1f510 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1f520 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1f530 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1f540 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1f550 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1f560 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1f570 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1f580 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1f590 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1f5a0 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1f5b0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1f5c0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1f5d0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1f5e0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1f5f0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1f600 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1f610 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1f620 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1f630 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1f640 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1f650 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1f660 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1f670 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1f680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1f690 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1f6a0 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1f6b0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1f6c0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1f6d0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1f6e0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1f6f0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1f700 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1f710 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f720 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f730 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1f740 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f750 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f760 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1f770 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1f780 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1f790 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1f7a0 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1f7b0 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1f7c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f7d0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1f7e0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1f7f0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1f800 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1f810 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1f820 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1f830 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1f840 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1f850 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1f860 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1f870 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1f880 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1f890 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1f8a0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1f8b0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1f8c0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1f8d0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1f8e0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1f8f0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
1f900 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1f910 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
1f920 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
1f930 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
1f940 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
1f950 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
1f960 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
1f970 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
1f980 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
1f990 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
1f9a0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
1f9b0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
1f9c0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
1f9d0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
1f9e0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
1f9f0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
1fa00 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
1fa10 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
1fa20 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
1fa30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
1fa40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1fa50 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
1fa60 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
1fa70 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
1fa80 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
1fa90 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
1faa0 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
1fab0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1fac0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
1fad0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
1fae0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
1faf0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
1fb00 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
1fb10 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
1fb20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1fb30 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
1fb40 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
1fb50 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
1fb60 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
1fb70 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
1fb80 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
1fb90 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
1fba0 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
1fbb0 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
1fbc0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
1fbd0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
1fbe0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1fbf0 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
1fc00 74 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65  te3BtreeGetCache
1fc10 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1fc20 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76  or);.      if( v
1fc30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
1fc40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fc50 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
1fc60 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1fc70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1fc80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
1fc90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1fca0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1fcb0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
1fcc0 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
1fcd0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
1fce0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
1fcf0 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  /.        }else{
1fd00 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1fd10 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1fd20 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
1fd30 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >pCursor) );.   
1fd40 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1fd50 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
1fd60 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
1fd70 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
1fd80 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1fd90 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
1fda0 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
1fdb0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1fdc0 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d           if( v>=
1fdd0 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
1fde0 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
1fdf0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
1fe00 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1fe10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b  {.            v+
1fe20 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
1fe30 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
1fe40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1fe50 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1fe60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fe70 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1fe80 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1fe90 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41   ){.        /* A
1fea0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1feb0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1fec0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1fed0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1fee0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  >0 );.        if
1fef0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
1ff00 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72           for(pFr
1ff10 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
1ff20 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
1ff30 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
1ff40 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1ff50 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1ff60 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1ff70 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1ff80 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1ff90 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
1ffa0 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
1ffb0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
1ffc0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
1ffd0 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3];.        }els
1ffe0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1fff0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20000 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20010 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20020 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20030 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
20040 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
20050 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
20060 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62  .          memAb
20070 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
20080 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Mem);.        }.
20090 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
200a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
200b0 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47   );..        REG
200c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
200d0 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
200e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
200f0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
20100 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  m);.        asse
20110 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
20120 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
20130 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
20140 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
20150 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d  /.        if( pM
20160 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
20170 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
20180 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
20190 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
201a0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
201b0 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20  : R-12275-61338 
201c0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  */.          got
201d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
201e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
201f0 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d          if( v<pM
20200 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
20210 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
20220 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
20230 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d    }.        pMem
20240 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20  ->u.i = v;.     
20250 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20   }.#endif..     
20260 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
20270 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
20280 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52  pCursor, v<MAX_R
20290 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b  OWID ? v+1 : 0);
202a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
202b0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
202c0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
202d0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
202e0 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
202f0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
20300 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
20310 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
20320 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
20330 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
20340 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
20350 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
20360 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
20370 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
20380 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
20390 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
203a0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
203b0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
203c0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
203d0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
203e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
203f0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
20400 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
20410 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
20420 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20440 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
20450 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
20460 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e  . */.      /* on
20470 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d   the first attem
20480 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e  pt, simply do on
20490 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76  e more than prev
204a0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  ious */.      v 
204b0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  = lastRowid;.   
204c0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
204d0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
204e0 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
204f0 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
20500 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
20510 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
20520 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
20530 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
20540 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20550 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
20560 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
20570 2c 0a 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 20 20 20 20                  
205a0 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
205b0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
205c0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
205d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
205e0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
205f0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
20600 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
20610 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
20620 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
20630 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
20640 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
20650 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
20660 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
20670 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
20680 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
20690 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
206a0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
206b0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
206c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
206d0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
206e0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
206f0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
20700 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20710 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
20720 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20730 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
20740 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
20750 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
20760 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
20770 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
20780 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
20790 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
207a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
207b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
207c0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
207d0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
207e0 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
207f0 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
20800 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20810 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
20820 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20830 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20840 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20850 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
20860 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
20870 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
20880 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
20890 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  P5.**.** Write a
208a0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
208b0 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
208c0 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
208d0 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
208e0 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
208f0 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
20900 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
20910 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
20920 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
20930 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
20940 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
20950 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
20960 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
20970 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
20980 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
20990 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
209a0 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
209b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
209c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
209d0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
209e0 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
209f0 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
20a00 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
20a10 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
20a20 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
20a30 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
20a40 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
20a50 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
20a60 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
20a70 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
20a80 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
20a90 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
20aa0 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
20ab0 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
20ac0 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
20ad0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
20ae0 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
20af0 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20  5 is set and if 
20b00 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
20b10 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f   the last seek o
20b20 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74  peration (OP_Not
20b30 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75  Exists) was a su
20b40 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73  ccess, then this
20b50 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  .** operation wi
20b60 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  ll not attempt t
20b70 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f  o find the appro
20b80 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72  priate row befor
20b90 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69  e doing.** the i
20ba0 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69  nsert but will i
20bb0 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65  nstead overwrite
20bc0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68   the row that th
20bd0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
20be0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
20bf0 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c  g to.  Presumabl
20c00 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f  y, the prior OP_
20c10 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65  NotExists opcode
20c20 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20  .** has already 
20c30 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
20c40 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e  ursor correctly.
20c50 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74    This is an opt
20c60 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61  imization.** tha
20c70 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d  t boosts perform
20c80 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67  ance by avoiding
20c90 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73   redundant seeks
20ca0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
20cb0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
20cc0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
20cd0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
20ce0 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
20cf0 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
20d00 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
20d10 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
20d20 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
20d30 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
20d40 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
20d50 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
20d60 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
20d70 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
20d80 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
20d90 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
20da0 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
20db0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
20dc0 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d  ng the table-nam
20dd0 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20  e, or.** may be 
20de0 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e  NULL. If it is n
20df0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
20e00 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a  e update-hook .*
20e10 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  * (sqlite3.xUpda
20e20 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
20e30 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67  nvoked following
20e40 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
20e50 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
20e60 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
20e70 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
20e80 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
20e90 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
20ea0 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
20eb0 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
20ec0 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
20ed0 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
20ee0 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
20ef0 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
20f00 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
20f10 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
20f20 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
20f30 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
20f40 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
20f50 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
20f60 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
20f70 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
20f80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
20f90 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
20fa0 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
20fb0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
20fc0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
20fd0 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
20fe0 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
20ff0 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
21000 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
21010 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
21020 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
21030 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
21040 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
21050 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
21060 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
21070 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
21080 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
21090 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
210a0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
210b0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
210c0 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
210d0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
210e0 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
210f0 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
21100 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
21110 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
21120 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
21130 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
21140 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
21150 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
21160 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
21170 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
21180 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
21190 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
211a0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
211b0 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
211c0 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
211d0 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
211e0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
211f0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
21200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
21210 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
21220 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
21230 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
21240 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
21250 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
21260 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
21270 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21280 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
21290 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
212a0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
212b0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
212c0 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20  *zTbl; /* Table 
212d0 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
212e0 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he opdate hook *
212f0 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
21300 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
21310 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
21320 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
21330 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
21340 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
21350 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
21360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21370 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21380 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
21390 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
213a0 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
213b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
213c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
213d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
213e0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
213f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
21400 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
21410 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
21420 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
21430 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
21440 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
21450 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
21460 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
21470 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
21480 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21490 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
214a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
214b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
214c0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
214d0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
214e0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
214f0 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
21500 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
21510 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
21520 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21530 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
21540 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
21550 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
21560 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
21570 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
21580 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
21590 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
215a0 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
215b0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
215c0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
215d0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
215e0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
215f0 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
21600 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
21610 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21620 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
21630 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
21640 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
21650 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
21660 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
21670 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
21680 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
21690 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
216a0 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
216b0 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
216c0 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
216d0 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
216e0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
216f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
21700 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
21710 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
21720 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21730 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
21740 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
21750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21760 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
21770 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
21780 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21790 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
217a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50  >p5 & OPFLAG_APP
217b0 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  END, seekResult.
217c0 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
217d0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
217e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
217f0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
21800 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21810 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
21820 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
21830 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
21840 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
21850 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
21860 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
21870 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
21880 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
21890 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
218a0 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
218b0 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
218c0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
218d0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
218e0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
218f0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
21900 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21910 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
21920 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21930 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
21940 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
21950 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
21960 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
21970 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
21980 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
21990 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
219a0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
219b0 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
219c0 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
219d0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
219e0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
219f0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
21a00 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21a10 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
21a20 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
21a30 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
21a40 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
21a50 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
21a60 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
21a70 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
21a80 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
21a90 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
21aa0 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
21ab0 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
21ac0 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
21ad0 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78  om within an Nex
21ae0 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66  t loop..**.** If
21af0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
21b00 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69  NGE flag of P2 i
21b10 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
21b20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
21b30 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
21b40 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
21b50 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
21b60 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
21b70 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
21b80 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
21b90 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
21ba0 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
21bb0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
21bc0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
21bd0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
21be0 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a  le that P1 is.**
21bf0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54   pointing to.  T
21c00 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77  he update hook w
21c10 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
21c20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
21c30 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
21c40 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63  LL then the P1 c
21c50 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
21c60 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a  been positioned.
21c70 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ** using OP_NotF
21c80 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
21c90 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
21ca0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  de..*/.case OP_D
21cb0 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
21cc0 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
21cd0 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d  r *pC;..  iKey =
21ce0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
21cf0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21d00 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21d10 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21d20 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21d30 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21d40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21d50 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
21d60 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
21d70 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
21d80 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20  eudotables */.. 
21d90 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
21da0 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
21db0 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79  nvoked, set iKey
21dc0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
21dd0 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65   the.  ** row be
21de0 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a  ing deleted..  *
21df0 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64  /.  if( db->xUpd
21e00 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
21e10 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
21e20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21e30 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ble );.    asser
21e40 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
21e50 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52  lid );  /* lastR
21e60 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76  owid set by prev
21e70 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  ious OP_NotFound
21e80 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   */.    iKey = p
21e90 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
21ea0 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  }..  /* The OP_D
21eb0 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
21ec0 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
21ed0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
21ee0 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
21ef0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
21f00 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
21f10 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
21f20 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
21f30 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
21f40 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
21f50 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
21f60 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
21f70 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
21f80 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
21f90 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
21fa0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
21fb0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
21fc0 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
21fd0 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
21fe0 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
21ff0 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
22000 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
22010 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
22020 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
22030 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
22040 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
22050 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
22060 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22070 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22080 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22090 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
220a0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
220b0 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
220c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
220d0 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74  _error;..  sqlit
220e0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
220f0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
22100 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
22110 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
22120 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
22130 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
22140 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22150 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
22160 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
22170 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
22180 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22190 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
221a0 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
221b0 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73  p4.z ){.    cons
221c0 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62  t char *zDb = db
221d0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
221e0 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20  Name;.    const 
221f0 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70  char *zTbl = pOp
22200 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e  ->p4.z;.    db->
22210 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22220 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22230 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
22240 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
22250 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22260 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
22270 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
22280 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
22290 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
222a0 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
222b0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
222c0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
222d0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
222e0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
222f0 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
22300 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
22310 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
22320 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
22330 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
22340 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
22350 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
22360 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
22370 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
22380 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
22390 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
223a0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
223b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
223c0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
223d0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
223e0 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
223f0 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
22400 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
22410 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22420 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
22430 50 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P3.**.** P1 is a
22440 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
22450 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
22460 20 63 6f 6d 70 61 72 65 73 20 74 68 65 20 72 65   compares the re
22470 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a  cord blob in .**
22480 20 72 65 67 69 73 74 65 72 20 50 33 20 77 69 74   register P3 wit
22490 68 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  h the entry that
224a0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
224b0 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
224c0 6e 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65  nts to..** If, e
224d0 78 63 6c 75 64 69 6e 67 20 74 68 65 20 72 6f 77  xcluding the row
224e0 69 64 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  id fields at the
224f0 20 65 6e 64 2c 20 74 68 65 20 74 77 6f 20 72 65   end, the two re
22500 63 6f 72 64 73 20 61 72 65 20 61 20 6d 61 74 63  cords are a matc
22510 68 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72 6f 75  h,.** fall throu
22520 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
22530 6e 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74 68 65  nstruction. Othe
22540 72 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f 20 69  rwise, jump to i
22550 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
22560 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
22570 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
22580 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22590 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
225a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
225b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
225c0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 70  orter(pC) );.  p
225d0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
225e0 3e 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >p3];.  rc = sql
225f0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
22600 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
22610 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73  &res);.  if( res
22620 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
22630 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
22640 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
22650 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
22660 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
22670 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
22680 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
22690 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
226a0 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
226b0 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
226c0 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
226d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
226e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
226f0 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54  _OMIT_MERGE_SORT
22700 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
22710 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
22720 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22730 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22740 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a 20 20  ->isSorter );.  
22750 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22760 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
22770 20 70 4f 75 74 29 3b 0a 23 65 6c 73 65 0a 20 20   pOut);.#else.  
22780 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
22790 5f 52 6f 77 4b 65 79 3b 0a 20 20 70 63 2d 2d 3b  _RowKey;.  pc--;
227a0 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
227b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
227c0 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
227d0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
227e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
227f0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
22800 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
22810 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
22820 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
22830 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
22840 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
22850 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22860 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
22870 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22880 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
22890 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
228a0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
228b0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
228c0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
228d0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
228e0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
228f0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22900 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
22910 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
22920 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
22930 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22940 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22950 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
22960 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22970 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
22980 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
22990 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
229a0 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
229b0 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67   onto the P3 reg
229c0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
229d0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
229e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
229f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
22a00 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22a10 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
22a20 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
22a30 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
22a40 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
22a50 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
22a60 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
22a70 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
22a80 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
22a90 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22aa0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
22ab0 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34  ;.  u32 n;.  i64
22ac0 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   n64;..  pOut = 
22ad0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
22ae0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
22af0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
22b00 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77  /* Note that Row
22b10 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20  Key and RowData 
22b20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74  are really exact
22b30 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74  ly the same inst
22b40 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73  ruction */.  ass
22b50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22b60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22b70 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22b80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22b90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
22ba0 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20 29 3b 0a  >isSorter==0 );.
22bb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22bc0 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
22bd0 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61  code!=OP_RowData
22be0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22bf0 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70  ->isIndex || pOp
22c00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
22c10 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
22c20 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22c30 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
22c40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22c50 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
22c60 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
22c70 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22c80 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
22c90 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
22ca0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
22cb0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
22cc0 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
22cd0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
22ce0 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
22cf0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
22d00 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
22d10 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
22d20 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
22d30 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
22d40 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
22d50 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
22d60 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
22d70 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
22d80 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
22d90 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22da0 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
22db0 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
22dc0 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
22dd0 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
22de0 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
22df0 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
22e00 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22e10 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22e20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22e30 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22e40 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
22e50 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
22e60 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
22e70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
22e80 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
22e90 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
22ea0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
22eb0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
22ec0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
22ed0 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
22ee0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
22ef0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22f00 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
22f10 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
22f20 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
22f30 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
22f40 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
22f50 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
22f60 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
22f70 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
22f80 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
22f90 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
22fa0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
22fb0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
22fc0 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
22fd0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
22fe0 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
22ff0 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
23000 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
23010 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
23020 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
23030 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
23040 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
23050 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
23060 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
23070 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
23080 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
23090 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
230a0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
230b0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
230c0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
230d0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
230e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
230f0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
23100 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
23110 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
23120 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
23130 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
23140 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
23150 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
23160 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
23170 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
23180 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
23190 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
231a0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
231b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
231c0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
231d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
231e0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
231f0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
23200 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
23210 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
23220 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
23230 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
23240 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
23250 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
23260 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
23270 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
23280 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
23290 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
232a0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
232b0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
232c0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
232d0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
232e0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
232f0 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
23300 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
23310 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
23320 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
23330 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
23340 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23350 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
23360 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
23370 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
23380 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
23390 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
233a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
233b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
233c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
233d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
233e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
233f0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
23400 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
23410 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
23420 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
23430 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
23440 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23450 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
23460 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
23470 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
23480 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
23490 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
234a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
234b0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
234c0 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
234d0 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
234e0 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
234f0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
23500 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
23510 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
23520 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
23530 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
23540 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23550 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
23560 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72  , &v);.    impor
23570 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
23580 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
23590 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
235a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
235b0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
235c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
235d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
235e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
235f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
23600 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
23610 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23620 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
23630 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
23640 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
23650 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
23660 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23670 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23680 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
23690 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
236a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
236b0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
236c0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
236d0 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
236e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
236f0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
23700 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23710 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
23720 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
23730 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
23740 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
23750 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
23760 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
23770 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
23780 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
23790 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
237a0 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
237b0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
237c0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
237d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
237e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
237f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23800 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23810 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23820 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23830 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
23840 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
23850 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23860 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
23870 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70  pC->pCursor || p
23880 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
23890 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
238a0 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
238b0 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
238c0 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
238d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
238e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
238f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23900 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
23910 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
23920 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
23930 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
23940 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
23950 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
23960 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
23970 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
23980 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
23990 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
239a0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
239b0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
239c0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
239d0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
239e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
239f0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
23a00 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
23a10 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
23a20 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
23a30 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
23a40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23a50 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23a60 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23a70 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23a80 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
23a90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23aa0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23ab0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23ac0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23ad0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23ae0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23af0 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
23b00 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23b10 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
23b20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23b30 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
23b40 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75  s);.  }.  pC->nu
23b50 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
23b60 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
23b70 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
23b80 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
23b90 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
23ba0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23bb0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  LE;.  if( pOp->p
23bc0 32 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20  2>0 && res ){.  
23bd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23be0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
23bf0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
23c00 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
23c10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23c20 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
23c30 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
23c40 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
23c50 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
23c60 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
23c70 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
23c80 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
23c90 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
23ca0 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
23cb0 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
23cc0 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
23cd0 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
23ce0 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
23cf0 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
23d00 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
23d10 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
23d20 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
23d30 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
23d40 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
23d50 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
23d60 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
23d70 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
23d80 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
23d90 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
23da0 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
23db0 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
23dc0 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
23dd0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
23de0 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
23df0 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
23e00 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
23e10 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
23e20 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
23e30 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23e40 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a  OMIT_MERGE_SORT.
23e50 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
23e60 4f 50 5f 53 6f 72 74 3b 0a 23 65 6e 64 69 66 0a  OP_Sort;.#endif.
23e70 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
23e80 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23e90 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23ea0 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
23eb0 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
23ec0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
23ed0 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
23ee0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
23ef0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
23f00 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  RT-1]++;.  /* Fa
23f10 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
23f20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
23f30 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
23f40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23f50 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
23f60 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
23f70 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
23f80 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
23f90 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
23fa0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
23fb0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
23fc0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
23fd0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
23fe0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
23ff0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
24000 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
24010 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
24020 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
24030 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
24040 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
24050 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
24060 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
24070 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
24080 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
24090 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
240a0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
240b0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
240c0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
240d0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
240e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
240f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24100 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24110 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24120 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24140 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d  >isSorter==(pOp-
24150 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
24160 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
24170 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f   = 1;.  if( isSo
24180 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24190 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
241a0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c  SorterRewind(db,
241b0 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65   pC, &res);.  }e
241c0 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d  lse{.    pCrsr =
241d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
241e0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
241f0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
24200 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
24210 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
24220 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
24230 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
24240 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24250 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
24260 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24270 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
24280 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
24290 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   0;.  }.  pC->nu
242a0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
242b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
242c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
242d0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
242e0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
242f0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
24300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24310 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
24320 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
24330 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
24340 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
24350 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
24360 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
24370 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
24380 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
24390 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
243a0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
243b0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
243c0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
243d0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
243e0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
243f0 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
24400 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
24410 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24420 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
24430 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
24440 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
24450 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
24460 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
24470 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
24480 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
24490 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
244a0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
244b0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
244c0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
244d0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
244e0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
244f0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
24500 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24510 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24520 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24530 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24540 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
24550 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63  : Prev.*/./* Opc
24560 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
24570 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63  * * P5.**.** Bac
24580 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
24590 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
245a0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
245b0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
245c0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
245d0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
245e0 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
245f0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
24600 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
24610 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
24620 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
24630 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
24640 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
24650 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
24660 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
24670 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
24680 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
24690 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
246a0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
246b0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
246c0 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
246d0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
246e0 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
246f0 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
24700 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
24710 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
24720 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
24730 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
24740 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
24750 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
24760 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
24770 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
24780 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
24790 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  mented..*/.case 
247a0 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 20  OP_SorterNext:  
247b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
247c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
247d0 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70  MERGE_SORT.  pOp
247e0 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 4e 65  ->opcode = OP_Ne
247f0 78 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20  xt;.#endif.case 
24800 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
24810 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24820 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20  e OP_Next: {    
24830 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24840 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24850 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43  .  int res;..  C
24860 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
24870 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  PT;.  assert( pO
24880 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24890 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
248a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
248b0 3e 70 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70  >p5<=ArraySize(p
248c0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
248d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
248e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
248f0 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61  C==0 ){.    brea
24900 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65  k;  /* See ticke
24910 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20  t #2273 */.  }. 
24920 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
24930 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63  orter==(pOp->opc
24940 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65  ode==OP_SorterNe
24950 78 74 29 20 29 3b 0a 20 20 69 66 28 20 69 73 53  xt) );.  if( isS
24960 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
24970 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24980 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e  code==OP_SorterN
24990 65 78 74 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ext );.    rc = 
249a0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
249b0 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72  rNext(db, pC, &r
249c0 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
249d0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 61    res = 1;.    a
249e0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
249f0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24a00 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24a10 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61  pCursor );.    a
24a20 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24a30 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
24a40 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
24a50 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
24a60 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
24a70 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
24a80 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
24a90 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
24aa0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
24ab0 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d  );.    rc = pOp-
24ac0 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
24ad0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
24ae0 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
24af0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24b00 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24b10 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24b20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
24b30 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
24b40 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  - 1;.    if( pOp
24b50 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74  ->p5 ) p->aCount
24b60 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b  er[pOp->p5-1]++;
24b70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
24b80 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
24b90 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
24ba0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d  #endif.  }.  pC-
24bb0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24bc0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
24bd0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
24be0 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50  ert P1 P2 P3 * P
24bf0 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  5.**.** Register
24c00 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
24c10 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
24c20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
24c30 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
24c40 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
24c50 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
24c60 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
24c70 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
24c80 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
24c90 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
24ca0 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
24cb0 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
24cc0 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
24cd0 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
24ce0 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
24cf0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
24d00 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
24d10 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
24d20 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
24d30 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
24d40 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
24d50 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
24d60 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
24d70 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
24d80 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
24d90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
24da0 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20  IT_MERGE_SORT.  
24db0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
24dc0 5f 49 64 78 49 6e 73 65 72 74 3b 0a 23 65 6e 64  _IdxInsert;.#end
24dd0 69 66 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  if.case OP_IdxIn
24de0 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
24df0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
24e00 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24e10 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
24e20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
24e30 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
24e40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24e50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24e60 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24e70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24e80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24e90 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
24ea0 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
24eb0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
24ec0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
24ed0 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
24ee0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
24ef0 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
24f00 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
24f10 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
24f20 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
24f30 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
24f40 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24f50 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
24f60 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
24f70 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69  lob(pIn2);.    i
24f80 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24f90 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 73   ){.      if( is
24fa0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
24fb0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
24fc0 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
24fd0 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b  e(db, pC, pIn2);
24fe0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24ff0 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e        nKey = pIn
25000 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b  2->n;.        zK
25010 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
25020 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25030 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
25040 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c  rsr, zKey, nKey,
25050 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e   "", 0, 0, pOp->
25060 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  p3, .           
25070 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
25080 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
25090 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
250a0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
250b0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20       );.        
250c0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
250d0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
250e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 63 61 63  .        pC->cac
250f0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25100 5f 53 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a  _STALE;.      }.
25110 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
25120 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25130 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
25140 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
25150 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
25160 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
25170 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
25180 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
25190 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
251a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
251b0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
251c0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
251d0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
251e0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
251f0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
25200 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25210 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
25220 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
25230 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
25240 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
25250 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
25260 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25270 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
25280 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p3<=p->nMem+1 );
25290 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
252a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
252b0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
252c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
252d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
252e0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
252f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25300 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
25310 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
25320 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
25330 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
25340 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25350 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66  pOp->p3;.    r.f
25360 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e  lags = 0;.    r.
25370 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
25380 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
25390 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
253a0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
253b0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
253c0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
253d0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
253e0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
253f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25400 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
25410 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
25420 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
25430 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
25440 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
25450 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25460 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29  reeDelete(pCrsr)
25470 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
25480 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25490 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
254a0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
254b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
254c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
254d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
254e0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
254f0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
25500 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
25510 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
25520 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
25530 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
25540 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
25550 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
25560 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
25570 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
25580 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
25590 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
255a0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
255b0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
255c0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
255d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
255e0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
255f0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
25600 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
25610 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
25620 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
25630 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
25640 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25650 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
25660 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25670 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25680 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25690 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
256a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
256b0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
256c0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
256d0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
256e0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
256f0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
25700 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0) ){.    rc = s
25710 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
25720 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
25730 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20  if( NEVER(rc) ) 
25740 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25750 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73  o_error;.    ass
25760 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25770 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25780 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25790 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
257a0 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
257b0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
257c0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
257d0 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
257e0 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
257f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
25800 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
25810 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25820 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
25830 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
25840 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  id;.      pOut->
25850 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
25860 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
25870 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25880 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
25890 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
258a0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
258b0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
258c0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
258d0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
258e0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
258f0 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
25900 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
25910 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
25920 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
25930 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
25940 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
25950 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
25960 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
25970 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
25980 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
25990 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
259a0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
259b0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
259c0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
259d0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
259e0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
259f0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
25a00 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
25a10 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
25a20 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
25a30 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
25a40 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
25a50 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
25a60 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
25a70 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
25a80 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
25a90 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
25aa0 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
25ab0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
25ac0 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
25ad0 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
25ae0 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
25af0 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
25b00 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
25b10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
25b20 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
25b30 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
25b40 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
25b50 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
25b60 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
25b70 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
25b80 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
25b90 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
25ba0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
25bb0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
25bc0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
25bd0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
25be0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
25bf0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
25c00 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
25c10 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
25c20 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
25c30 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
25c40 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
25c50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
25c60 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25c70 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
25c80 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
25c90 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
25ca0 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
25cb0 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
25cc0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
25cd0 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
25ce0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
25cf0 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
25d00 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
25d10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
25d20 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
25d30 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
25d40 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
25d50 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
25d60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
25d70 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
25d80 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
25d90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25da0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25db0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25dc0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25dd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25de0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25df0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
25e00 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
25e10 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
25e20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
25e30 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25e40 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
25e50 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
25e60 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
25e70 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25e80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
25e90 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
25ea0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
25eb0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
25ec0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
25ed0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
25ee0 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
25ef0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
25f00 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
25f10 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
25f20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25f30 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
25f40 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
25f50 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
25f60 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
25f70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
25f80 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
25f90 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
25fa0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
25fb0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25fc0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
25fd0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63   }.#endif.    rc
25fe0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
25ff0 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
26000 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69  &r, &res);.    i
26010 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
26020 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
26030 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
26040 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
26050 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26060 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a  de==OP_IdxGE );.
26070 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20        res++;.   
26080 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30   }.    if( res>0
26090 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
260a0 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20  Op->p2 - 1 ;.   
260b0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
260c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
260d0 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
260e0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
260f0 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
26100 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
26110 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
26120 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
26130 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
26140 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
26150 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
26160 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
26170 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26180 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
26190 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
261a0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
261b0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
261c0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
261d0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
261e0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
261f0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
26200 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
26210 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
26220 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
26230 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
26240 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
26250 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
26260 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
26270 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
26280 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
26290 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
262a0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
262b0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
262c0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
262d0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
262e0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
262f0 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
26300 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
26310 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
26320 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
26330 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
26340 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
26350 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
26360 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
26370 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
26380 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
26390 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
263a0 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
263b0 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
263c0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
263d0 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
263e0 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
263f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
26400 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
26410 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
26420 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
26430 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
26440 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26450 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
26460 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
26470 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
26480 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  se */.  int iMov
26490 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a  ed;.  int iCnt;.
264a0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
264b0 20 69 6e 74 20 69 44 62 3b 0a 0a 23 69 66 6e 64   int iDb;..#ifnd
264c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
264d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43  IRTUALTABLE.  iC
264e0 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56  nt = 0;.  for(pV
264f0 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70  dbe=db->pVdbe; p
26500 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56  Vdbe; pVdbe = pV
26510 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  dbe->pNext){.   
26520 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69   if( pVdbe->magi
26530 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
26540 4e 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74  N && pVdbe->inVt
26550 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56  abMethod<2 && pV
26560 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20  dbe->pc>=0 ){.  
26570 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20      iCnt++;.    
26580 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43  }.  }.#else.  iC
26590 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56  nt = db->activeV
265a0 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20  dbeCnt;.#endif. 
265b0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
265c0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69  EM_Null;.  if( i
265d0 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20  Cnt>1 ){.    rc 
265e0 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
265f0 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
26600 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
26610 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
26620 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
26630 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20  assert( iCnt==1 
26640 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
26650 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
26660 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44  ((yDbMask)1)<<iD
26670 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  b))!=0 );.    rc
26680 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26690 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
266a0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
266b0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
266c0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
266d0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
266e0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
266f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26700 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
26710 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
26720 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
26730 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
26740 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
26750 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
26760 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
26770 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
26780 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
26790 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
267a0 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
267b0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
267c0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
267d0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
267e0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
267f0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
26800 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
26810 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
26820 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26830 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
26840 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
26850 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
26860 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
26870 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
26880 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
26890 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
268a0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
268b0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
268c0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
268d0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
268e0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
268f0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
26900 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
26910 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
26920 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
26930 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
26940 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
26950 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
26960 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
26970 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
26980 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
26990 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
269a0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
269b0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
269c0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
269d0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
269e0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
269f0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
26a00 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
26a10 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
26a20 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
26a30 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
26a40 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
26a50 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
26a60 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
26a70 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
26a80 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
26a90 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
26aa0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
26ab0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
26ac0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
26ad0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
26ae0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
26af0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
26b00 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
26b10 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
26b20 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
26b30 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
26b40 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
26b50 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
26b60 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
26b70 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
26b80 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
26b90 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   0;.  assert( (p
26ba0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
26bb0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
26bc0 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
26bd0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26be0 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
26bf0 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
26c00 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
26c10 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
26c20 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
26c30 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
26c40 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
26c50 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
26c60 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
26c70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
26c80 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
26c90 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
26ca0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
26cb0 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
26cc0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
26cd0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
26ce0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
26cf0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26d00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
26d10 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
26d20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
26d30 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
26d40 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
26d50 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26d60 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
26d70 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
26d80 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
26d90 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
26da0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
26db0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
26dc0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
26dd0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
26de0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
26df0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
26e00 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
26e10 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
26e20 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
26e30 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
26e40 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
26e50 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
26e60 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
26e70 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
26e80 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
26e90 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
26ea0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
26eb0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
26ec0 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
26ed0 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
26ee0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
26ef0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
26f00 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
26f10 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
26f20 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
26f30 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
26f40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26f50 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
26f60 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
26f70 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
26f80 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
26f90 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
26fa0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
26fb0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
26fc0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
26fd0 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
26fe0 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
26ff0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
27000 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
27010 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
27020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
27030 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
27040 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
27050 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
27060 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
27070 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
27080 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
27090 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
270a0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
270b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
270c0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
270d0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
270e0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
270f0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
27100 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
27110 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
27120 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27130 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
27140 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
27150 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
27160 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
27170 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
27180 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
27190 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
271a0 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
271b0 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59   = BTREE_BLOBKEY
271c0 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
271d0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
271e0 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
271f0 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
27200 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
27210 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27220 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
27230 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
27240 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
27250 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
27260 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
27270 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
27280 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
27290 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
272a0 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
272b0 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
272c0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
272d0 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
272e0 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
272f0 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
27300 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
27310 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
27320 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
27330 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
27340 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
27350 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
27360 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
27370 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
27380 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
27390 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
273a0 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
273b0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
273c0 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
273d0 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
273e0 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
273f0 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
27400 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
27410 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
27420 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
27430 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
27440 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27450 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
27460 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
27470 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
27480 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
27490 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
274a0 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
274b0 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
274c0 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
274d0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
274e0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
274f0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
27500 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
27510 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
27520 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
27530 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
27540 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
27550 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
27560 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
27570 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
27580 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
27590 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
275a0 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
275b0 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
275c0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
275d0 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
275e0 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
275f0 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
27600 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
27610 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
27620 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
27630 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
27640 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
27650 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
27660 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
27670 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
27680 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
27690 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
276a0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
276b0 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
276c0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
276d0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
276e0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
276f0 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
27700 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
27710 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
27720 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
27730 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
27740 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
27750 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
27760 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27770 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
27780 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
27790 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
277a0 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
277b0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
277c0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
277d0 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65  rc ) sqlite3Rese
277e0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
277f0 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69  nection(db);.  i
27800 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
27810 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
27820 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
27830 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
27840 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27850 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
27860 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
27870 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
27880 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
27890 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
278a0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
278b0 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
278c0 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
278d0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
278e0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
278f0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
27900 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
27910 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
27920 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
27930 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
27940 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
27950 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
27960 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
27970 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
27980 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
27990 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
279a0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
279b0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
279c0 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
279d0 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
279e0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
279f0 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
27a00 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
27a10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
27a20 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
27a30 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
27a40 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
27a50 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
27a60 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
27a70 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
27a80 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
27a90 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
27aa0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
27ab0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
27ac0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
27ad0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
27ae0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
27af0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
27b00 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
27b10 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
27b20 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
27b30 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
27b40 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
27b50 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
27b60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27b70 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
27b80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
27b90 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
27ba0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
27bb0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
27bc0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
27bd0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
27be0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
27bf0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
27c00 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
27c10 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
27c20 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
27c30 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
27c40 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
27c50 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
27c60 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
27c70 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
27c80 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
27c90 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
27ca0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
27cb0 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
27cc0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
27cd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27ce0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
27cf0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27d00 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
27d10 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
27d20 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
27d30 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
27d40 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
27d50 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
27d60 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
27d70 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
27d80 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
27d90 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27da0 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27db0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27dc0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27dd0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27de0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27df0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27e00 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
27e10 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27e20 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
27e30 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27e40 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
27e50 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
27e60 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
27e70 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
27e80 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
27e90 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
27ea0 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
27eb0 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
27ec0 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
27ed0 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
27ee0 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
27ef0 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
27f00 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
27f10 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
27f20 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
27f30 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
27f40 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
27f50 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
27f60 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
27f70 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
27f80 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
27f90 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
27fa0 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
27fb0 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
27fc0 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
27fd0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
27fe0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
27ff0 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
28000 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
28010 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
28020 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
28030 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
28040 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
28050 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
28060 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
28070 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
28080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
28090 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
280a0 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
280b0 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
280c0 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
280d0 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
280e0 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
280f0 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
28100 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
28110 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
28120 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
28130 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
28140 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28150 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
28160 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
28170 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
28180 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
28190 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
281a0 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
281b0 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
281c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
281d0 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
281e0 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
281f0 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
28200 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
28210 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
28220 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
28230 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
28240 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
28250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
28260 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
28270 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
28280 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
28290 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
282a0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
282b0 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
282c0 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
282d0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
282e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
282f0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
28300 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
28310 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20  */.  .  nRoot = 
28320 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
28330 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
28340 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
28350 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
28360 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
28370 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
28380 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
28390 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
283a0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
283b0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
283c0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
283d0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
283e0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
283f0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
28400 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
28410 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
28420 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
28430 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
28440 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
28450 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
28460 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
28470 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
28480 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
28490 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
284a0 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
284b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
284c0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
284d0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
284e0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
284f0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29  ask)1)<<pOp->p5)
28500 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
28510 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
28520 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
28530 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
28540 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
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 20 20 20 20 20 20 20 28 69                (i
28570 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
28580 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
28590 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
285a0 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
285b0 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
285c0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
285d0 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
285e0 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
285f0 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
28600 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
28610 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
28620 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
28630 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
28640 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
28650 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
28660 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
28670 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
28680 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
28690 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
286a0 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
286b0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
286c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
286d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
286e0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
286f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
28700 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
28710 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
28720 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
28730 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
28740 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
28750 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
28760 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
28770 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
28780 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
28790 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
287a0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
287b0 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
287c0 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a   /* in1, in2 */.
287d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
287e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
287f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
28800 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
28810 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
28820 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
28830 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28840 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
28850 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28860 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
28870 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
28880 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28890 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
288a0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
288b0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
288c0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
288d0 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  et, pIn2->u.i);.
288e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
288f0 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
28900 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
28910 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
28920 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
28930 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
28940 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
28950 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
28960 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
28970 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
28980 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
28990 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
289a0 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
289b0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
289c0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
289d0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
289e0 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
289f0 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
28a00 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 43  /.  i64 val;.  C
28a10 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
28a20 50 54 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  PT;.  pIn1 = &aM
28a30 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
28a40 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
28a50 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
28a60 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
28a70 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
28a80 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
28a90 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
28aa0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
28ab0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
28ac0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28ad0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
28ae0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28af0 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
28b00 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
28b10 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
28b20 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71   index */.    sq
28b30 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
28b40 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
28b50 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  p3], val);.  }. 
28b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28b70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
28b80 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a   P1 P2 P3 P4.**.
28b90 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
28ba0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
28bb0 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
28bc0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
28bd0 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
28be0 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
28bf0 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
28c00 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
28c10 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
28c20 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
28c30 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
28c40 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
28c50 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
28c60 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
28c70 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
28c80 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
28c90 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
28ca0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
28cb0 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
28cc0 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
28cd0 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
28ce0 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
28cf0 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
28d00 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
28d10 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
28d20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
28d30 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
28d40 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
28d50 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
28d60 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
28d70 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
28d80 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
28d90 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
28da0 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
28db0 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
28dc0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
28dd0 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
28de0 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
28df0 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
28e00 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
28e10 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
28e20 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
28e30 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
28e40 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
28e50 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
28e60 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
28e70 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
28e80 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
28e90 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
28ea0 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
28eb0 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
28ec0 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
28ed0 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
28ee0 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
28ef0 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
28f00 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
28f10 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
28f20 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
28f30 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
28f40 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
28f50 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
28f60 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
28f70 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
28f80 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
28f90 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
28fa0 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
28fb0 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
28fc0 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
28fd0 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
28fe0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
28ff0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
29000 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
29010 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
29020 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
29030 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
29040 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
29050 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
29060 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
29070 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
29080 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
29090 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
290a0 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
290b0 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
290c0 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
290d0 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
290e0 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
290f0 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
29100 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
29110 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
29120 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
29130 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
29140 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29150 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
29160 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
29170 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
29180 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
29190 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
291a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
291b0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
291c0 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
291d0 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
291e0 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
291f0 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
29200 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
29210 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20  ->u.pRowSet, .  
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 38               (u8
29240 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53 65 74  )(iSet>=0 ? iSet
29250 20 26 20 30 78 66 20 3a 20 30 78 66 66 29 2c 0a   & 0xf : 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 20 20 20 20 20 20 20 70                 p
29280 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69  In3->u.i);.    i
29290 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20  f( exists ){.   
292a0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
292b0 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  - 1;.      break
292c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
292d0 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
292e0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
292f0 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
29300 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
29310 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29320 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
29330 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
29340 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
29350 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  am P1 P2 P3 P4 *
29360 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
29370 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
29380 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
29390 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
293a0 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
293b0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
293c0 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
293d0 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
293e0 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
293f0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
29400 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
29410 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
29420 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
29430 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
29440 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
29450 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
29460 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
29470 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
29480 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
29490 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
294a0 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
294b0 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
294c0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
294d0 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
294e0 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
294f0 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
29500 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
29510 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
29520 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
29530 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
29540 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
29550 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
29560 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
29570 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
29580 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  er program..*/.c
29590 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
295a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
295b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
295d0 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
295e0 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
295f0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
29600 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
29610 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
29620 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
29630 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
29640 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
29650 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
29660 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
29670 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
29680 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
29690 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
296a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
296b0 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
296c0 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
296d0 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
296e0 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
296f0 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
29700 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
29710 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
29720 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
29730 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
29740 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
29750 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
29760 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
29770 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
29780 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
29790 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
297a0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
297b0 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
297c0 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
297d0 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
297e0 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
297f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
29800 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
29810 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
29820 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
29830 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
29840 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
29850 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
29860 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
29870 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
29880 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
29890 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
298a0 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
298b0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
298c0 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
298d0 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
298e0 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
298f0 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
29900 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
29910 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
29920 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
29930 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
29940 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
29950 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
29960 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
29970 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
29980 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
29990 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
299a0 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
299b0 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
299c0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
299d0 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
299e0 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
299f0 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
29a00 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
29a10 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
29a20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
29a30 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
29a40 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
29a50 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
29a60 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
29a70 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
29a80 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
29a90 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
29aa0 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
29ab0 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
29ac0 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
29ad0 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
29ae0 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
29af0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
29b00 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
29b10 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
29b20 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
29b30 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
29b40 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
29b50 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
29b60 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
29b70 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
29b80 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
29b90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
29ba0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  OR;.    sqlite3S
29bb0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
29bc0 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d  rMsg, db, "too m
29bd0 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
29be0 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
29bf0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
29c00 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
29c10 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
29c20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
29c30 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
29c40 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
29c50 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
29c60 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
29c70 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
29c80 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
29c90 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
29ca0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
29cb0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
29cc0 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
29cd0 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
29ce0 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
29cf0 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
29d00 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
29d10 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
29d20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
29d30 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
29d40 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
29d50 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
29d60 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
29d70 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
29d80 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
29d90 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
29da0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
29db0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
29dc0 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
29dd0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
29de0 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
29df0 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
29e00 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
29e10 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
29e20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
29e30 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
29e40 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
29e50 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
29e60 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
29e70 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
29e80 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
29e90 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
29ea0 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
29eb0 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
29ec0 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
29ed0 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
29ef0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
29f00 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
29f10 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
29f20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
29f30 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
29f40 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
29f50 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
29f60 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
29f70 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
29f80 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
29f90 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
29fa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
29fb0 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
29fc0 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
29fd0 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
29fe0 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
29ff0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2a000 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2a010 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2a020 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2a030 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2a040 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2a050 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
2a060 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2a070 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2a080 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2a090 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2a0a0 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2a0b0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2a0c0 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2a0d0 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2a0e0 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2a0f0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2a100 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2a110 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2a120 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2a130 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2a140 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2a150 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2a160 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2a170 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a   p->nOnceFlag;..
2a180 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
2a190 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2a1a0 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
2a1b0 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
2a1c0 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
2a1d0 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
2a1e0 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
2a1f0 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
2a200 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 3b 0a 20 20   MEM_Invalid;.  
2a210 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
2a220 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
2a230 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
2a240 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
2a250 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2a260 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
2a270 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2a280 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20  >nChildMem );.  
2a290 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2a2a0 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2a2b0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
2a2c0 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70     assert( pc==p
2a2d0 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
2a2e0 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
2a2f0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
2a300 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
2a310 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
2a320 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
2a330 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
2a340 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
2a350 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2a360 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
2a370 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
2a380 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
2a390 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2a3a0 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
2a3b0 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
2a3c0 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
2a3d0 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
2a3e0 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
2a3f0 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
2a400 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
2a410 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
2a420 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
2a430 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
2a440 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
2a450 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46  nOp;.  p->aOnceF
2a460 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e  lag = (u8 *)&p->
2a470 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72  apCsr[p->nCursor
2a480 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ];.  p->nOnceFla
2a490 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  g = pProgram->nO
2a4a0 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a  nce;.  pc = -1;.
2a4b0 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63    memset(p->aOnc
2a4c0 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e  eFlag, 0, p->nOn
2a4d0 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61  ceFlag);..  brea
2a4e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a4f0 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
2a500 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
2a510 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
2a520 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
2a530 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
2a540 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
2a550 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2a560 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
2a570 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
2a580 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
2a590 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
2a5a0 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
2a5b0 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
2a5c0 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
2a5d0 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
2a5e0 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
2a5f0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
2a600 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
2a610 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
2a620 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
2a630 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
2a640 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
2a650 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
2a660 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
2a670 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
2a680 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
2a690 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2a6a0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
2a6b0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2a6c0 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
2a6d0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2a6e0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2a6f0 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
2a700 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
2a710 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
2a720 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2a730 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
2a740 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
2a750 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
2a760 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2a770 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
2a780 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
2a790 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
2a7a0 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
2a7b0 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
2a7c0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
2a7d0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
2a7e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a7f0 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
2a800 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a810 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
2a820 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
2a830 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
2a840 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
2a850 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
2a860 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
2a870 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
2a880 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
2a890 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2a8a0 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
2a8b0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2a8c0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2a8d0 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
2a8e0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2a8f0 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
2a900 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
2a910 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
2a920 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
2a930 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
2a940 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2a950 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2a960 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
2a970 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
2a980 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
2a990 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2a9a0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2a9b0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
2a9c0 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
2a9d0 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
2a9e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a9f0 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
2aa00 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2aa10 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
2aa20 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
2aa30 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2aa40 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
2aa50 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
2aa60 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2aa70 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
2aa80 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
2aa90 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
2aaa0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2aab0 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2aac0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
2aad0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2aae0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2aaf0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
2ab00 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
2ab10 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
2ab20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
2ab30 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2ab40 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
2ab50 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
2ab60 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
2ab70 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
2ab80 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
2ab90 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
2aba0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2abb0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2abc0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2abd0 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2abe0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2abf0 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2ac00 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
2ac10 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20  redCons==0 ) pc 
2ac20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
2ac30 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d  else{.    if( p-
2ac40 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2ac50 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2ac60 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
2ac70 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
2ac80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ac90 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a  _FOREIGN_KEY */.
2aca0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2acb0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2acc0 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65  NT./* Opcode: Me
2acd0 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  mMax P1 P2 * * *
2ace0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
2acf0 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
2ad00 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
2ad10 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
2ad20 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
2ad30 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
2ad40 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
2ad50 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2ad60 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
2ad70 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
2ad80 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
2ad90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2ada0 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
2adb0 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
2adc0 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
2add0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
2ade0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2adf0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
2ae00 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
2ae10 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
2ae20 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
2ae30 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
2ae40 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2ae50 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
2ae60 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2ae70 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64   Mem *pIn1;.  Vd
2ae80 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2ae90 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
2aea0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
2aeb0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2aec0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
2aed0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2aee0 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
2aef0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2af00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
2af10 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
2af20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2af30 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
2af40 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
2af50 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2af60 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
2af70 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2af80 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
2af90 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2afa0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
2afb0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
2afc0 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
2afd0 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
2afe0 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
2aff0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2b000 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2b010 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
2b020 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
2b030 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
2b040 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2b050 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
2b060 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
2b070 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
2b080 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2b090 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2b0a0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2b0b0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2b0c0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2b0d0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2b0e0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2b0f0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2b100 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2b110 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
2b120 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2b130 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b140 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b150 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2b160 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
2b170 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
2b180 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b190 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2b1a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2b1b0 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
2b1c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
2b1d0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2b1e0 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
2b1f0 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
2b200 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
2b210 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2b220 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2b230 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2b240 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2b250 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2b260 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2b270 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2b280 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2b290 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
2b2a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2b2b0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2b2c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b2d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2b2e0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2b2f0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2b300 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20  .i<0 ){.     pc 
2b310 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2b320 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2b330 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f  * Opcode: IfZero
2b340 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2b350 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2b360 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2b370 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64   an integer.  Ad
2b380 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20  d literal P3 to 
2b390 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
2b3a0 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 49 66  register P1.  If
2b3b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 65   the result is e
2b3c0 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74  xactly 0, jump t
2b3d0 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
2b3e0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2b3f0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2b400 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2b410 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2b420 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b430 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2b440 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2b450 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2b460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a  ..*/.case OP_IfZ
2b470 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ero: {        /*
2b480 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2b490 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b4a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b4b0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2b4c0 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2b4d0 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i += pOp->p3;.
2b4e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
2b4f0 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
2b500 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b510 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b520 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
2b530 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
2b540 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2b550 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2b560 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2b570 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2b580 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2b590 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2b5a0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2b5b0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2b5c0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2b5d0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2b5e0 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2b5f0 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2b600 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2b610 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2b620 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2b630 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2b640 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2b650 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2b660 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2b670 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2b680 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2b690 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2b6a0 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
2b6b0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
2b6c0 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
2b6d0 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
2b6e0 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65  );.  pRec = &aMe
2b6f0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
2b700 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
2b710 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
2b720 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
2b730 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
2b740 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pRec++){.    ass
2b750 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2b760 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56  pRec) );.    apV
2b770 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
2b780 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2b790 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20  ge(p, pRec);.   
2b7a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b7b0 74 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a  toreType(pRec);.
2b7c0 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20    }.  ctx.pFunc 
2b7d0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
2b7e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b7f0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2b800 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74  =p->nMem );.  ct
2b810 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20  x.pMem = pMem = 
2b820 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2b830 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63    pMem->n++;.  c
2b840 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
2b850 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a  _Null;.  ctx.s.z
2b860 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
2b870 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78  alloc = 0;.  ctx
2b880 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
2b890 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
2b8a0 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
2b8b0 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30  .  ctx.pColl = 0
2b8c0 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67  ;.  ctx.skipFlag
2b8d0 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
2b8e0 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
2b8f0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
2b900 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
2b910 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
2b920 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2b930 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
2b940 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
2b950 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2b960 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2b970 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
2b980 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
2b990 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
2b9a0 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
2b9b0 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
2b9c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
2b9d0 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
2b9e0 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
2b9f0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2ba00 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2ba10 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2ba20 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63  e3_value_text(&c
2ba30 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d  tx.s));.    rc =
2ba40 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
2ba50 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70  }.  if( ctx.skip
2ba60 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65  Flag ){.    asse
2ba70 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2ba80 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2ba90 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31  ;.    i = pOp[-1
2baa0 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20  ].p1;.    if( i 
2bab0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
2bac0 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
2bad0 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71  ], 1);.  }..  sq
2bae0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2baf0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20  ase(&ctx.s);..  
2bb00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bb10 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2bb20 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
2bb30 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
2bb40 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
2bb50 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2bb60 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
2bb70 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
2bb80 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
2bb90 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
2bba0 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
2bbb0 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
2bbc0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
2bbd0 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
2bbe0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
2bbf0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2bc00 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2bc10 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
2bc20 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
2bc30 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
2bc40 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
2bc50 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
2bc60 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
2bc70 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
2bc80 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
2bc90 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
2bca0 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
2bcb0 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
2bcc0 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
2bcd0 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
2bce0 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
2bcf0 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
2bd00 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
2bd10 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
2bd20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
2bd30 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
2bd40 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
2bd50 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
2bd60 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
2bd70 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
2bd80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2bd90 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2bda0 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
2bdb0 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
2bdc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2bdd0 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
2bde0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
2bdf0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2be00 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2be10 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2be20 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2be30 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2be40 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2be50 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2be60 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2be70 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2be80 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2be90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2bea0 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2beb0 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2bec0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2bed0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2bee0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2bef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2bf00 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2bf10 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2bf20 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2bf30 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2bf40 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2bf50 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2bf60 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2bf70 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2bf80 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2bf90 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a  _PASSIVE, FULL.*
2bfa0 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57  * or RESTART.  W
2bfb0 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2bfc0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2bfd0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2bfe0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2bff0 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2c000 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2c010 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2c020 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2c030 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2c040 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2c050 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2c060 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2c070 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2c080 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2c090 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2c0a0 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2c0b0 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2c0c0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2c0d0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2c0e0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2c0f0 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2c100 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2c110 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2c120 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2c130 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2c140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2c150 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2c160 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2c190 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1b0 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2c1c0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 52 65  s here */..  aRe
2c1d0 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
2c1e0 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
2c1f0 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
2c200 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2c210 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2c220 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2c230 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2c240 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2c250 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2c260 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c270 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72  RESTART.  );.  r
2c280 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2c290 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2c2a0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2c2b0 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2c2c0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2c2d0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2c2e0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2c2f0 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2c300 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2c310 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2c320 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2c330 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2c340 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2c350 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2c360 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2c370 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2c380 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2c390 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2c3a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2c3b0 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2c3c0 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e   * P5.**.** Chan
2c3d0 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
2c3e0 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
2c3f0 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
2c400 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
2c410 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
2c420 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
2c430 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
2c440 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
2c450 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
2c460 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
2c470 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
2c480 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
2c490 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
2c4a0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
2c4b0 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
2c4c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
2c4d0 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
2c4e0 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
2c4f0 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
2c500 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
2c510 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
2c520 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2c530 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
2c540 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
2c550 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2c560 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
2c570 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2c580 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65  lease */.  Btree
2c590 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
2c5a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
2c5b0 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
2c5c0 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
2c5d0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2c5e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c5f0 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
2c600 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
2c610 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
2c640 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
2c650 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c670 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
2c680 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
2c690 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2c6a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2c6b0 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
2c6c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
2c6d0 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
2c6e0 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
2c6f0 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ..  eNew = pOp->
2c700 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
2c710 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c720 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
2c730 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c740 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c750 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
2c760 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2c770 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
2c780 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
2c790 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c7a0 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
2c7b0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2c7c0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
2c7d0 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
2c7e0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c7f0 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
2c800 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2c810 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
2c820 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
2c830 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2c840 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2c850 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2c860 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2c870 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2c880 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2c890 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2c8a0 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2c8b0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2c8c0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2c8d0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2c8e0 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2c8f0 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2c900 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2c910 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2c920 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2c930 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2c940 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2c950 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2c960 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2c970 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2c980 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2c990 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2c9a0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2c9b0 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2c9c0 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2c9d0 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2c9e0 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2c9f0 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2ca00 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2ca10 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2ca20 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2ca30 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2ca40 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2ca50 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2ca60 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2ca70 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2ca80 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2ca90 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2caa0 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2cab0 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2cac0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2cad0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2cae0 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2caf0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2cb00 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2cb10 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cb20 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2cb30 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2cb40 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2cb50 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20  activeVdbeCnt>1 
2cb60 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2cb70 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2cb80 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2cb90 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2cba0 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22  db, .          "
2cbb0 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
2cbc0 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
2cbd0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
2cbe0 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
2cbf0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2cc00 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
2cc10 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
2cc20 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
2cc30 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
2cc40 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
2cc50 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2cc60 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
2cc70 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
2cc80 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
2cc90 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
2cca0 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
2ccb0 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
2ccc0 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
2ccd0 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
2cce0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
2ccf0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
2cd00 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
2cd10 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
2cd20 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
2cd30 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
2cd40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
2cd50 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
2cd60 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
2cd70 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
2cd80 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
2cd90 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
2cda0 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
2cdb0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2cdc0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2cdd0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2cde0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2cdf0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
2ce00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
2ce10 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
2ce20 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ce30 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
2ce40 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
2ce50 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
2ce60 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
2ce70 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
2ce80 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
2ce90 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
2cea0 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
2ceb0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2cec0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
2ced0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cee0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
2cef0 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
2cf00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
2cf10 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2cf20 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
2cf30 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
2cf40 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
2cf50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
2cf60 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
2cf70 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
2cf80 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
2cf90 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
2cfa0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
2cfb0 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
2cfc0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2cfd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2cfe0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
2cff0 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
2d000 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d010 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
2d020 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2d030 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
2d040 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d050 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
2d060 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2d070 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20  Old;.  }.  eNew 
2d080 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
2d090 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2d0a0 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
2d0b0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
2d0c0 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p2];.  pOut->fl
2d0d0 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
2d0e0 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
2d0f0 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
2d100 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
2d110 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
2d120 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
2d130 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
2d140 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
2d150 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
2d160 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
2d170 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2d180 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
2d190 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
2d1a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2d1b0 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
2d1c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2d1d0 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
2d1e0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2d1f0 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
2d200 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
2d210 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
2d220 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
2d230 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
2d240 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
2d250 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
2d260 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
2d270 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
2d280 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
2d290 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
2d2a0 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
2d2b0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
2d2c0 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
2d2d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2d2e0 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2d2f0 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2d300 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2d310 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2d320 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2d330 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2d340 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2d350 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2d360 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2d370 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2d380 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2d390 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2d3a0 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2d3b0 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2d3c0 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2d3d0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2d3e0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2d3f0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2d400 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2d410 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2d420 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2d430 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2d440 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2d450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2d460 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2d470 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2d480 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2d490 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2d4a0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
2d4b0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
2d4c0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2d4d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d4e0 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
2d4f0 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  t);.  if( rc==SQ
2d500 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
2d510 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2d520 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
2d530 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65  TE_OK;.  }.  bre
2d540 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
2d550 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
2d560 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2d570 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
2d580 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
2d590 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2d5a0 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   An expired stat
2d5b0 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77  ement.** fails w
2d5c0 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
2d5d0 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45  e of SQLITE_SCHE
2d5e0 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65 72  MA if it is ever
2d5f0 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76   executed .** (v
2d600 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ia sqlite3_step(
2d610 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  ))..** .** If P1
2d620 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
2d630 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
2d640 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
2d650 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2d660 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
2d670 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
2d680 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
2d690 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a   is affected. .*
2d6a0 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
2d6b0 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
2d6c0 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
2d6d0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2d6e0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
2d6f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
2d700 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
2d710 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2d720 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d730 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
2d740 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
2d750 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
2d760 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c  **.** Obtain a l
2d770 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75  ock on a particu
2d780 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20  lar table. This 
2d790 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
2d7a0 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a  nly used when.**
2d7b0 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
2d7c0 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  e feature is ena
2d7d0 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  bled. .**.** P1 
2d7e0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2d7f0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
2d800 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
2d810 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2d820 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
2d830 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
2d840 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
2d850 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
2d860 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
2d870 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
2d880 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
2d890 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
2d8a0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
2d8b0 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
2d8c0 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
2d8d0 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
2d8e0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
2d8f0 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
2d900 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
2d910 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
2d920 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
2d930 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
2d940 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
2d950 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
2d960 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63  .  u8 isWriteLoc
2d970 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b  k = (u8)pOp->p3;
2d980 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
2d990 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
2d9a0 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
2d9b0 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
2d9c0 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
2d9d0 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
2d9e0 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
2d9f0 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
2da00 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
2da10 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
2da20 31 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20  1)<<p1))!=0 );. 
2da30 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
2da40 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
2da50 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
2da60 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2da70 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
2da80 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
2da90 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
2daa0 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ock);.    if( (r
2dab0 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
2dac0 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
2dad0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
2dae0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
2daf0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2db00 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2db10 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  b, "database tab
2db20 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
2db30 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ", z);.    }.  }
2db40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2db50 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2db60 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
2db70 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2db80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2db90 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2dba0 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
2dbb0 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
2dbc0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
2dbd0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2dbe0 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
2dbf0 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
2dc00 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
2dc10 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
2dc20 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
2dc30 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
2dc40 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
2dc50 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
2dc60 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
2dc70 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
2dc80 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2dc90 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
2dca0 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
2dcb0 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
2dcc0 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
2dcd0 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
2dce0 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
2dcf0 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
2dd00 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d  ;.  pVTab = pOp-
2dd10 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
2dd20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
2dd30 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20  in(db, pVTab);. 
2dd40 20 69 66 28 20 70 56 54 61 62 20 29 20 69 6d 70   if( pVTab ) imp
2dd50 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2dd60 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
2dd70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2dd80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2dd90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2dda0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ddb0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ddc0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2ddd0 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20  reate P1 * * P4 
2dde0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2ddf0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2de00 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2de10 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74  abase P1. Call t
2de20 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
2de30 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61  d.** for that ta
2de40 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2de50 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20  VCreate: {.  rc 
2de60 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
2de70 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
2de80 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  >p1, pOp->p4.z, 
2de90 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
2dea0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2deb0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2dec0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2ded0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2dee0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2def0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
2df00 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
2df10 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2df20 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2df30 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2df40 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
2df50 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
2df60 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
2df70 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2df80 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d  VDestroy: {.  p-
2df90 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2dfa0 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
2dfb0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2dfc0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2dfd0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69  p->p4.z);.  p->i
2dfe0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2dff0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e000 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2e010 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2e020 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2e030 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e040 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2e050 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
2e060 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2e070 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2e080 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2e090 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2e0a0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2e0b0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
2e0c0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
2e0d0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
2e0e0 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
2e0f0 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
2e100 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
2e110 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
2e120 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
2e130 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2e140 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2e150 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2e160 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2e170 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2e180 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2e190 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d  odule;..  pCur =
2e1a0 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2e1b0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2e1c0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2e1d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2e1e0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2e1f0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2e200 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2e210 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2e220 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2e230 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2e240 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69  VtabCursor);.  i
2e250 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2e260 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2e270 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
2e280 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
2e290 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
2e2a0 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
2e2b0 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
2e2c0 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
2e2d0 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
2e2e0 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
2e2f0 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
2e300 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
2e310 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
2e320 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
2e330 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
2e340 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
2e350 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
2e360 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75  ursor;.      pCu
2e370 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  r->pModule = pVt
2e380 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
2e390 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65  >pModule;.    }e
2e3a0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
2e3b0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2e3c0 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
2e3d0 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
2e3e0 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2e3f0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2e400 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2e410 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2e420 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e430 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e440 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
2e450 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
2e460 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
2e470 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
2e480 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
2e490 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
2e4a0 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
2e4b0 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
2e4c0 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
2e4d0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
2e4e0 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
2e4f0 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
2e500 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
2e510 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
2e520 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
2e530 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
2e540 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
2e550 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
2e560 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
2e570 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2e580 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2e590 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
2e5a0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
2e5b0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2e5c0 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
2e5d0 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
2e5e0 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
2e5f0 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
2e600 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
2e610 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
2e620 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
2e630 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
2e640 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
2e650 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
2e660 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
2e670 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
2e680 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
2e690 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
2e6a0 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
2e6b0 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
2e6c0 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
2e6d0 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
2e6e0 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
2e6f0 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
2e700 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
2e710 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
2e720 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
2e730 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
2e740 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
2e750 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
2e760 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
2e770 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2e780 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2e790 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
2e7a0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2e7b0 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2e7c0 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
2e7d0 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
2e7e0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2e7f0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2e800 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2e810 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2e820 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
2e830 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2e840 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
2e850 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
2e860 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
2e870 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
2e880 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e890 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e8a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
2e8b0 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
2e8c0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2e8d0 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
2e8e0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2e8f0 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
2e900 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
2e910 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
2e920 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
2e930 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2e940 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2e950 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
2e960 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
2e970 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
2e980 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
2e990 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
2e9a0 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
2e9b0 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
2e9c0 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
2e9d0 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
2e9e0 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
2e9f0 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
2ea00 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2ea10 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
2ea20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
2ea30 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
2ea40 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
2ea50 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
2ea60 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
2ea70 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
2ea80 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  +1];.      sqlit
2ea90 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2eaa0 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20  pe(apArg[i]);.  
2eab0 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74    }..    p->inVt
2eac0 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2ead0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2eae0 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72  xFilter(pVtabCur
2eaf0 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  sor, iQuery, pOp
2eb00 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
2eb10 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  Arg);.    p->inV
2eb20 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2eb30 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2eb40 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2eb50 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2eb60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
2eb70 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
2eb80 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
2eb90 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72      }..    if( r
2eba0 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
2ebb0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2ebc0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
2ebd0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
2ebe0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2ebf0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2ec00 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2ec10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ec20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ec30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
2ec40 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
2ec50 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
2ec60 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
2ec70 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
2ec80 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
2ec90 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
2eca0 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
2ecb0 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
2ecc0 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
2ecd0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
2ece0 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
2ecf0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2ed00 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2ed10 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2ed20 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
2ed30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2ed40 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
2ed50 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2ed60 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2ed70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2ed80 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2ed90 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2eda0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2edb0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
2edc0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
2edd0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
2ede0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2edf0 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
2ee00 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
2ee10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ee20 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
2ee30 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2ee40 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2ee50 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2ee60 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2ee70 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2ee80 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2ee90 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
2eea0 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
2eeb0 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
2eec0 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54  ntext));..  /* T
2eed0 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
2eee0 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
2eef0 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
2ef00 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
2ef10 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e  e current conten
2ef20 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73  ts to sContext.s
2ef30 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
2ef40 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20  user-function . 
2ef50 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20   ** can use the 
2ef60 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2ef70 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
2ef80 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
2ef90 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a   .  ** new one..
2efa0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2efb0 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74  beMemMove(&sCont
2efc0 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20  ext.s, pDest);. 
2efd0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2efe0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d  &sContext.s, MEM
2eff0 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  _Null);..  rc = 
2f000 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2f010 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2f020 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
2f030 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72  Op->p2);.  impor
2f040 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2f050 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
2f060 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
2f070 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
2f080 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
2f090 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
2f0a0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
2f0b0 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20  ction to the P3 
2f0c0 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a  register. We.  *
2f0d0 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64  * do this regard
2f0e0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
2f0f0 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  or not an error 
2f100 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75  occurred to ensu
2f110 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61  re any.  ** dyna
2f120 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  mic allocation i
2f130 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20  n sContext.s (a 
2f140 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20  Mem struct) is  
2f150 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20  released..  */. 
2f160 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2f170 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e  geEncoding(&sCon
2f180 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  text.s, encoding
2f190 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f1a0 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26  MemMove(pDest, &
2f1b0 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52  sContext.s);.  R
2f1c0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2f1d0 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
2f1e0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2f1f0 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
2f200 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2f210 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
2f220 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2f230 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2f240 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2f250 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f260 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2f270 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2f280 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2f290 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
2f2a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
2f2b0 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
2f2c0 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
2f2d0 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
2f2e0 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
2f2f0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2f300 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
2f310 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2f320 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
2f330 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
2f340 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
2f350 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
2f360 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2f370 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2f380 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
2f390 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
2f3a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2f3b0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2f3c0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2f3d0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
2f3e0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2f3f0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
2f400 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2f410 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2f420 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2f430 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75  sor );.  if( pCu
2f440 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2f450 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2f460 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2f470 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2f480 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2f490 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2f4a0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2f4b0 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
2f4c0 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
2f4d0 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
2f4e0 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
2f4f0 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
2f500 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
2f510 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
2f520 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2f530 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
2f540 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
2f550 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
2f560 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
2f570 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
2f580 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
2f590 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
2f5a0 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
2f5b0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
2f5c0 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
2f5d0 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
2f5e0 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
2f5f0 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
2f600 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
2f610 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
2f620 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74  ..  */.  p->inVt
2f630 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2f640 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
2f650 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43  ext(pCur->pVtabC
2f660 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56  ursor);.  p->inV
2f670 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2f680 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2f690 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2f6a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f6b0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
2f6c0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
2f6d0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2f6e0 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20    }..  if( !res 
2f6f0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
2f700 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
2f710 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
2f720 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2f730 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2f740 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f750 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f760 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2f770 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f780 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2f790 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
2f7a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2f7b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2f7c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2f7d0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2f7e0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2f7f0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2f800 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2f810 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
2f820 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
2f830 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
2f840 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
2f850 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
2f860 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
2f870 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
2f880 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
2f890 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2f8a0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
2f8b0 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
2f8c0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2f8d0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
2f8e0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
2f8f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
2f900 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2f910 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
2f920 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
2f930 61 6d 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ame) );.  REGIST
2f940 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
2f950 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65  , pName);.  asse
2f960 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73  rt( pName->flags
2f970 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20   & MEM_Str );.  
2f980 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
2f990 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
2f9a0 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  8 );.  testcase(
2f9b0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2f9c0 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
2f9d0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
2f9e0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
2f9f0 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20  F16LE );.  rc = 
2fa00 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2fa10 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c  eEncoding(pName,
2fa20 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
2fa30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2fa40 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70  OK ){.    rc = p
2fa50 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2fa60 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
2fa70 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70  ame->z);.    imp
2fa80 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2fa90 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e   pVtab);.    p->
2faa0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
2fab0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2fac0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2fad0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2fae0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2faf0 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33  VUpdate P1 P2 P3
2fb00 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2fb10 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2fb20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2fb30 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2fb40 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2fb50 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2fb60 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2fb70 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
2fb80 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
2fb90 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
2fba0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
2fbb0 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
2fbc0 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
2fbd0 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
2fbe0 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
2fbf0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2fc00 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
2fc10 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
2fc20 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
2fc30 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
2fc40 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
2fc50 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
2fc60 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
2fc70 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
2fc80 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
2fc90 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
2fca0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
2fcb0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2fcc0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
2fcd0 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
2fce0 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
2fcf0 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
2fd00 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
2fd10 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
2fd20 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
2fd30 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
2fd40 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
2fd50 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
2fd60 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
2fd70 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
2fd80 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
2fd90 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
2fda0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
2fdb0 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
2fdc0 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
2fdd0 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
2fde0 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
2fdf0 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
2fe00 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
2fe10 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
2fe20 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
2fe30 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
2fe40 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
2fe50 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
2fe60 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
2fe70 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
2fe80 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
2fe90 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
2fea0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
2feb0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2fec0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
2fed0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
2fee0 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
2fef0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
2ff00 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
2ff10 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
2ff20 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  serted..*/.case 
2ff30 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
2ff40 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2ff50 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2ff60 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2ff70 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2ff80 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
2ff90 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
2ffa0 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
2ffb0 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
2ffc0 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
2ffd0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
2ffe0 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
2fff0 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
30000 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
30010 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
30020 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
30030 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
30040 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
30050 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
30060 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
30070 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
30080 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
30090 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
300a0 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
300b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
300c0 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
300d0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
300e0 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
300f0 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
30100 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
30110 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
30120 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
30130 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
30140 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
30150 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
30160 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
30170 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
30180 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
30190 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
301a0 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71  p, pX);.      sq
301b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
301c0 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20  eType(pX);.     
301d0 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
301e0 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
301f0 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  }.    db->vtabOn
30200 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e  Conflict = pOp->
30210 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  p5;.    rc = pMo
30220 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
30230 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
30240 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64  , &rowid);.    d
30250 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
30260 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  t = vtabOnConfli
30270 63 74 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74  ct;.    importVt
30280 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
30290 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
302a0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
302b0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
302c0 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
302d0 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
302e0 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
302f0 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
30300 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
30310 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
30320 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
30330 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
30340 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
30350 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
30360 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
30370 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
30380 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
30390 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
303a0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
303b0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
303c0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
303d0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
303e0 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
303f0 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
30400 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
30410 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
30420 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
30430 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30440 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30450 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30460 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
30470 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
30480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
30490 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
304a0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
304b0 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
304c0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
304d0 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
304e0 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
304f0 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
30500 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
30510 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
30520 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
30530 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
30540 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
30550 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
30560 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30570 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
30580 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
30590 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
305a0 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
305b0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
305c0 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
305d0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
305e0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
305f0 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
30600 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
30610 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30620 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
30630 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
30640 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
30650 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
30660 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
30670 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
30680 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
30690 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
306a0 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
306b0 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
306c0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
306d0 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
306e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
306f0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
30700 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
30710 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
30720 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20   *pBt;..  pBt = 
30730 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
30740 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d  .pBt;.  newMax =
30750 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
30760 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20  3 ){.    newMax 
30770 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
30780 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20  stPage(pBt);.   
30790 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75   if( newMax < (u
307a0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20  nsigned)pOp->p3 
307b0 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69  ) newMax = (unsi
307c0 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  gned)pOp->p3;.  
307d0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
307e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50  sqlite3BtreeMaxP
307f0 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65  ageCount(pBt, ne
30800 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  wMax);.  break;.
30810 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
30820 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
30830 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
30840 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
30850 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
30860 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
30870 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
30880 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
30890 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
308a0 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
308b0 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
308c0 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
308d0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
308e0 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
308f0 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
30900 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66    char *z;..  if
30910 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20  ( db->xTrace.   
30920 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75  && !p->doingReru
30930 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  n.   && (zTrace 
30940 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
30950 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
30960 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
30970 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   z = sqlite3Vdbe
30980 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72  ExpandSql(p, zTr
30990 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54  ace);.    db->xT
309a0 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
309b0 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69  rg, z);.    sqli
309c0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29  te3DbFree(db, z)
309d0 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  ;.  }.#ifdef SQL
309e0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
309f0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
30a00 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
30a10 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
30a20 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
30a30 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
30a40 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
30a50 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
30a60 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
30a70 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
30a80 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
30a90 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62  ITE_DEBUG */.  b
30aa0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30ab0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
30ac0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
30ad0 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
30ae0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
30af0 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
30b00 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
30b10 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
30b20 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
30b30 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
30b40 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
30b50 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
30b60 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
30b70 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
30b80 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
30b90 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
30ba0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
30bb0 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
30bc0 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
30bd0 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
30be0 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
30bf0 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
30c00 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
30c10 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
30c20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
30c30 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
30c40 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
30c50 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
30c60 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
30c70 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
30c80 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
30c90 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
30ca0 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
30cb0 3b 0a 7d 0a 0a 2f 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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30d00 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
30d10 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
30d20 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
30d30 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
30d40 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
30d50 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
30d60 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
30d70 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
30d80 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
30d90 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
30da0 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
30db0 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
30dc0 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
30dd0 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
30de0 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
30df0 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e40 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
30e50 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
30e60 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
30e70 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33  lapsed = sqlite3
30e80 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74  Hwtime() - start
30e90 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63  ;.      pOp->cyc
30ea0 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a  les += elapsed;.
30eb0 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
30ec0 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
30ed0 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20  fprintf(stdout, 
30ee0 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73  "%10llu ", elaps
30ef0 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ed);.        sql
30f00 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
30f10 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20  stdout, origPc, 
30f20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  &aOp[origPc]);.#
30f30 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
30f40 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
30f50 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
30f60 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
30f70 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
30f80 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
30f90 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
30fa0 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
30fb0 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
30fc0 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
30fd0 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
30fe0 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
30ff0 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
31000 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
31010 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
31020 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
31030 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
31040 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
31050 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
31060 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
31070 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
31080 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
31090 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
310a0 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
310b0 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
310c0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
310d0 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
310e0 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
310f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
31100 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
31110 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50  T2_PRERELEASE|OP
31120 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20  FLG_OUT2) ){.   
31130 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
31140 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
31150 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
31160 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
31170 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
31180 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
31190 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
311a0 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
311b0 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26  race, pOp->p3, &
311c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
311d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
311e0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
311f0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
31200 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
31210 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
31220 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
31230 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
31240 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
31250 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
31260 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
31270 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
31280 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
31290 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
312a0 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
312b0 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
312c0 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
312d0 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
312e0 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
312f0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
31300 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
31310 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
31320 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
31330 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
31340 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
31350 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
31360 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
31370 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
31380 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
31390 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
313a0 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
313b0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
313c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
313d0 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
313e0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
313f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
31400 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
31410 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
31420 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
31430 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
31440 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
31450 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
31460 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
31470 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
31480 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
31490 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
314a0 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
314b0 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
314c0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
314d0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 73  = lastRowid;.  s
314e0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
314f0 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
31500 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
31510 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
31520 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
31530 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
31540 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
31550 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
31560 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
31570 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
31580 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
31590 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
315a0 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
315b0 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
315c0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
315d0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
315e0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
315f0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
31600 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
31610 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
31620 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
31630 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
31640 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
31650 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
31660 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
31670 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31680 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
31690 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
316a0 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
316b0 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
316c0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
316d0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
316e0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
316f0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
31700 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
31710 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
31720 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
31730 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
31740 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
31750 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
31760 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
31770 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
31780 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
31790 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
317a0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
317b0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
317c0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
317d0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
317e0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
317f0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
31800 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
31810 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
31820 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
31830 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
31840 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
31850 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
31860 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
31870 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
31880 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
31890 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
318a0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
318b0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
318c0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
318d0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.