/ Hex Artifact Content
Login

Artifact 2e3fc618ff964cd559844fdbf186fdc582b66b1e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1ed0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1ee0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1ef0: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1f00: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1f10: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1f20: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1f30: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1f40: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1f50: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f60: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f70: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1f80: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1f90: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1fa0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1fb0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1fc0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1fd0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1fe0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1ff0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
2000: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
2010: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2020: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
2030: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2040: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2050: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
2060: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
2070: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
2080: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2090: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
20a0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
20b0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
20c0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
20d0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
20e0: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
20f0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2100: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2110: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2120: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2130: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2140: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2150: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2160: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2170: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2180: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2190: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21b0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21d0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
21e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
21f0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2200: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2210: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2220: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2230: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2240: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2250: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2260: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2270: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
2280: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
2290: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22c0: 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 56  ){.    double rV
22d0: 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69 56  alue;.    i64 iV
22e0: 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e 63  alue;.    u8 enc
22f0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2300: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2310: 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29  gs&MEM_Str)==0 )
2320: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 28   return;.    if(
2330: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
2340: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2350: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2360: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2370: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2380: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2390: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65 63  c) ){.      pRec
23b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
23c0: 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
23d0: 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  s |= MEM_Int;.  
23e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
23f0: 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b  Rec->r = rValue;
2400: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2410: 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  gs |= MEM_Real;.
2420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2430: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2440: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
2450: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
2460: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
2470: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
2480: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
2490: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24a0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
24b0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
24c0: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
24d0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
24e0: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
24f0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2510: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2520: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2530: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2540: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
2550: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2560: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
2570: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
2580: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
2590: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25a0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
25b0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
25c0: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
25d0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
25e0: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2600: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2610: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2620: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2630: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2640: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
2650: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
2660: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
2670: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
2680: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
2690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26a0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
26b0: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
26c0: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
26d0: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
26e0: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
26f0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2710: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2720: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2730: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2740: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
2750: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
2760: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2770: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
2780: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
2790: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
27b0: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
27c0: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
27d0: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
27e0: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
27f0: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2800: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2810: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2820: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2830: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2840: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
2860: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
2870: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2880: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2890: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28a0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
28b0: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
28c0: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
28d0: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
28e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
28f0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2900: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2910: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2940: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2950: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2960: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
2970: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
2980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2990: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29a0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
29b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
29c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
29d0: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
29e0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
29f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a00: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a20: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a30: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a40: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2a50: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2a60: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2a70: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2a80: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2a90: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2aa0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2ab0: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2ac0: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2ad0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2ae0: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2af0: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2b00: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2b10: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2b20: 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 74  l;.  if( pMem->t
2b30: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2b40: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   ){.    applyNum
2b50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2b60: 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  m);.    sqlite3V
2b70: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b80: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
2b90: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
2ba0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2bb0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2bc0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2bd0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2be0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2bf0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c00: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c20: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c30: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c40: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2c50: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2c60: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2c70: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2c80: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2c90: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2ca0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2cb0: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2cc0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2cd0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
2ce0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
2cf0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
2d00: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
2d10: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
2d20: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
2d30: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2d40: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2d50: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2d60: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2d70: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2d80: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2d90: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2da0: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2db0: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2dc0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2dd0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
2de0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
2df0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2e00: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
2e10: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2e20: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2e40: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2e50: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2e60: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2e70: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2e80: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e90: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2ea0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2eb0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2ec0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2ed0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
2ee0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2ef0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
2f00: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2f10: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
2f20: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2f30: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2f40: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2f50: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f60: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f80: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f90: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2fa0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2fb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2fc0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2fd0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2fe0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2ff0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3000: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3010: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3020: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3030: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3040: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3050: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3090: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
30a0: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
30b0: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
30c0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
30d0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
30e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
3110: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3120: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3130: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3140: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3150: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3160: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3170: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3180: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3190: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
31a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31b0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31c0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
31d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
31e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
31f0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3200: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
3210: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3220: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3230: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3240: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3250: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3260: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3270: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3280: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3290: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
32a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32b0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
32c0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
32d0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
32e0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
32f0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3300: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3310: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3320: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3340: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3350: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3370: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3380: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3390: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
33a0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
33b0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
33c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
33d0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
33e0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
33f0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3400: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3410: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3420: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3430: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3440: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3450: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3460: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3470: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3480: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3490: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34a0: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
34b0: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
34c0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
34d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
34e0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
34f0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3500: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3520: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3530: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3540: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3550: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3560: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3570: 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20  rint(FILE *out, 
3580: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
3590: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
35a0: 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66 70 72  valid ){.    fpr
35b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e 64 65  intf(out, " unde
35c0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
35d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
35f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3600: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3610: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3620: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3630: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3640: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3650: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3660: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3670: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3680: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3700: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3710: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3720: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3730: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3740: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3760: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3770: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3780: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3790: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
37c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
37e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
37f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3800: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3810: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3820: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3830: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3840: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3850: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3860: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3870: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3880: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3890: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
38b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
38c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
38d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
38e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3900: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3910: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3920: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3930: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3940: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3950: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3960: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3970: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3980: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3990: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39a0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
39b0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
39c0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
39d0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
39e0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
39f0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3a50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3a60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3a70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3a80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3a90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3aa0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3ab0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3ac0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3ad0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3ae0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3af0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b10: 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  an we needed.  B
3b20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3b50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3b60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3b70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3b80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3b90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ba0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3bb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3bc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3bd0: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3be0: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3bf0: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c00: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c10: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c20: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3c30: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3c40: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3c50: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3c60: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3c70: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3c80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3c90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3ca0: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3cb0: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3cc0: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3cd0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3ce0: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3cf0: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d10: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d20: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3d30: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3d40: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3d50: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3d60: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3d70: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3d80: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3da0: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3db0: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3dc0: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3dd0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  ndif../*.** Tran
3df0: 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  sfer error messa
3e00: 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61 6e 20  ge text from an 
3e10: 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a 45 72  sqlite3_vtab.zEr
3e20: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3e30: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3e40: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3e50: 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74  ite3_malloc) int
3e60: 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d 73 67  o a Vdbe.zErrMsg
3e70: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e80: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e90: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3ea0: 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74  DbMalloc)..*/.st
3eb0: 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74  atic void import
3ec0: 56 74 61 62 45 72 72 4d 73 67 28 56 64 62 65 20  VtabErrMsg(Vdbe 
3ed0: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  *p, sqlite3_vtab
3ee0: 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71 6c 69   *pVtab){.  sqli
3ef0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3f00: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3f10: 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
3f20: 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
3f30: 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
3f40: 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72  (db, pVtab->zErr
3f50: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
3f60: 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45 72 72  free(pVtab->zErr
3f70: 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  Msg);.  pVtab->z
3f80: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a  ErrMsg = 0;.}...
3f90: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
3fa0: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
3fb0: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
3fc0: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
3fd0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
3fe0: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
3ff0: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
4000: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
4010: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
4020: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
4030: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
4040: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
4050: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
4060: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
4070: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
4080: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4090: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
40a0: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
40b0: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
40c0: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
40d0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
40e0: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
40f0: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
4100: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
4110: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
4120: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
4130: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
4140: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
4150: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
4160: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
4170: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
4180: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4190: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
41a0: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
41b0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
41c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
41d0: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
41e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
41f0: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
4200: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
4210: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
4220: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
4230: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
4240: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
4250: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
4260: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
4270: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
4280: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4290: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
42a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
42b0: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
42c0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
42d0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
42e0: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
42f0: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
4300: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
4310: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
4320: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
4330: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
4340: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
4350: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
4360: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4370: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
4380: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4390: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
43a0: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
43b0: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
43c0: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
43d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
43e0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
43f0: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
4400: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4410: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
4420: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
4430: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
4440: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
4450: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
4460: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
4470: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
4480: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4490: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
44a0: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
44c0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
44d0: 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20  int pc=0;       
44e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
44f0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
4500: 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  r */.  Op *aOp =
4510: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4520: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4530: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
4540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4550: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4560: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4570: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4580: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4590: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
45a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
45b0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
45c0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
45d0: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
45e0: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
45f0: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4600: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4610: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
4620: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4630: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4640: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4670: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63  CALLBACK.  int c
4680: 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20 20 20  heckProgress;   
4690: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
46a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
46b0: 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  cks are enabled 
46c0: 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65  */.  int nProgre
46d0: 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20  ssOps = 0;      
46e0: 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75  /* Opcodes execu
46f0: 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65  ted since progre
4700: 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a  ss callback. */.
4710: 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 43 6f  #endif.  int iCo
4720: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4730: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4740: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4750: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4760: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4770: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4780: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4790: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
47a0: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70  .  Mem *aMem = p
47b0: 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a  ->aMem;       /*
47c0: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d   Copy of p->aMem
47d0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20   */.  Mem *pIn1 
47e0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
47f0: 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70   /* 1st input op
4800: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4810: 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn2 = 0;       
4820: 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70        /* 2nd inp
4830: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4840: 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20  Mem *pIn3 = 0;  
4850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72             /* 3r
4860: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
4870: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d  */.  Mem *pOut =
4880: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4890: 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e  /* Output operan
48a0: 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72  d */.  int *aPer
48b0: 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  mute = 0;       
48c0: 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e    /* Permutation
48d0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20   of columns for 
48e0: 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20  OP_Compare */.  
48f0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  i64 lastRowid = 
4900: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
4910: 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f  /* Saved value o
4920: 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  f the last inser
4930: 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65  t ROWID */.#ifde
4940: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4950: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4970: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4980: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4990: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
49a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
49b0: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
49c0: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
49d0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
49e0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
49f0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
4a00: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4a10: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
4a20: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
4a30: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4a40: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4a50: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4a60: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4a70: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4a80: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4a90: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4aa0: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4ab0: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4ac0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4ad0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4ae0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4af0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4b00: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4b10: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4b20: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
4b30: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4b40: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4b50: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4b60: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4b70: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4b80: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
4b90: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4ba0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4bb0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4bc0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4bd0: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
4be0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4bf0: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4c00: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4c10: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4c20: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4c30: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4c40: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4c50: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4c60: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4c70: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4c80: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4c90: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4ca0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4cb0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4cc0: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4cd0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4ce0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4cf0: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4d00: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4d10: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4d20: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4d30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4d40: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4d50: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4d60: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4d70: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4d80: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4d90: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4da0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4db0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4dc0: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4dd0: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4de0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4df0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4e00: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4e10: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4e20: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4e30: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4e40: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
4e50: 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  ++;.    pOp = &a
4e60: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
4e70: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
4e80: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
4e90: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
4ea0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4eb0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
4ec0: 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
4ed0: 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b      if( pc==0 ){
4ee0: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
4ef0: 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20  "VDBE Execution 
4f00: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20  Trace:\n");.    
4f10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4f20: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4f30: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4f40: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e  3VdbePrintOp(p->
4f50: 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b  trace, pc, pOp);
4f60: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
4f70: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
4f80: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
4f90: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
4fa0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
4fb0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
4fc0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
4fd0: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
4fe0: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
4ff0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
5000: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
5010: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5020: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
5030: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5040: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
5050: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5060: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
5070: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5080: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
5090: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
50a0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
50b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
50c0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20  ESS_CALLBACK.   
50d0: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
50e0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
50f0: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
5100: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
5110: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a  red number.    *
5120: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
5130: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
5140: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
5150: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
5160: 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  f.    ** sqlite3
5170: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
5180: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
5190: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
51a0: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
51b0: 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70  .    ** If the p
51c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
51d0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
51e0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
51f0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
5200: 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  .    ** a return
5210: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
5220: 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  RT..    */.    i
5230: 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73  f( checkProgress
5240: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62   ){.      if( db
5250: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d  ->nProgressOps==
5260: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a  nProgressOps ){.
5270: 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b          int prc;
5280: 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20 64  .        prc = d
5290: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
52a0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a  >pProgressArg);.
52b0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21          if( prc!
52c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
52d0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
52e0: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20  RRUPT;.         
52f0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
5300: 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d  _halt;.        }
5310: 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65  .        nProgre
5320: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
5330: 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65   }.      nProgre
5340: 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ssOps++;.    }.#
5350: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5360: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
5370: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
5380: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
5390: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
53a0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
53b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
53c0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
53d0: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
53e0: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
53f0: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5400: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5410: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5420: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5430: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5440: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5450: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5460: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
5470: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
5480: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5490: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
54a0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
54b0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
54c0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
54d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
54e0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
54f0: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5500: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5520: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5530: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5540: 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d  );.      VdbeMem
5550: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
5560: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
5570: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
5580: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
5590: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
55a0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
55b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
55c0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
55d0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
55e0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
55f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5600: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5610: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5620: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
5630: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5640: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5650: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5660: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5670: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5680: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5690: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
56a0: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
56b0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
56c0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
56f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5700: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5710: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5720: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5730: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5740: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5750: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5760: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5770: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5780: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5790: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
57a0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
57b0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
57c0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
57d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
57e0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
57f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5800: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5810: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5820: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5830: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5840: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5850: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5860: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5870: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5880: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5890: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
58a0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
58b0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
58c0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
58d0: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
58e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
58f0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5900: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5910: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  Mem );.      mem
5920: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5930: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5940: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5950: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
5960: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
59c0: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
59d0: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
59e0: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
59f0: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5a00: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5a10: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5a20: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5a30: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5a40: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
5a50: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
5a60: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
5a70: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5a80: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5a90: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5aa0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5ab0: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5ac0: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5ad0: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5ae0: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5af0: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5b00: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5b10: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5b20: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5b30: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5b40: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
5b50: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
5b60: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
5b70: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5b80: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5b90: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5ba0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5bb0: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5bc0: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5bd0: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5be0: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5bf0: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5c00: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5c10: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5c20: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5c30: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5c40: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
5c50: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
5c60: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
5c70: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5c80: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5c90: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5ca0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5cb0: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5cc0: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5cd0: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5ce0: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5cf0: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5d00: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5d10: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5d20: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5d30: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5d40: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5d50: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5d60: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5d70: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5d80: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5d90: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5da0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5db0: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5dc0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5dd0: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5de0: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5df0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5e00: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5e10: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5e20: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5e30: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5e40: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5e50: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5e60: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5e70: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5e80: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5e90: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5ea0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5eb0: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5ec0: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5ed0: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5ee0: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5ef0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5f00: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5f10: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5f20: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5f30: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5f40: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5f50: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5f60: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5f70: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5f80: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5f90: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5fa0: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5fb0: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5fc0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5fd0: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5fe0: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5ff0: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
6000: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
6010: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
6020: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
6030: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
6040: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
6050: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6060: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6070: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6080: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
60d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
60e0: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
60f0: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
6100: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
6110: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
6120: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
6130: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6140: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6150: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6160: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6170: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6180: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
6190: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
61a0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b   jump */.  CHECK
61b0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
61c0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
61d0: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
61e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
61f0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
6200: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6210: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6220: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6230: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6240: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6250: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6260: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6270: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6280: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6290: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
62a0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
62b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
62c0: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
62d0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
62e0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
62f0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
6300: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6310: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6320: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6330: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6340: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6350: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6360: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6370: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6380: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6390: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
63a0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
63b0: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
63c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
63d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
63e0: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
63f0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
6400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6410: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6420: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
6430: 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e  nt );.  pc = (in
6440: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62  t)pIn1->u.i;.  b
6450: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6460: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20  de:  Yield P1 * 
6470: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6480: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
6490: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
64a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
64b0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  P1..*/.case OP_Y
64c0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
64d0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
64e0: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e  nt pcDest;.  pIn
64f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6500: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
6510: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
6520: 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49  _Dyn)==0 );.  pI
6530: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6540: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
6550: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6560: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6570: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6580: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6590: 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74  );.  pc = pcDest
65a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
65b0: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
65c0: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
65d0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  4 *.**.** Check 
65e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
65f0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
6600: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
6610: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
6620: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
6630: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
6640: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6650: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6660: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6670: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6680: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6690: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
66a0: 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  op..*/.case OP_H
66b0: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
66c0: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
66d0: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
66e0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
66f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
6700: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
6710: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
6720: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
6730: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
6740: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
6750: 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d   *.**.** Exit im
6760: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
6770: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
6780: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
6790: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
67a0: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
67b0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
67c0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
67d0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
67e0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
67f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6800: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
6810: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
6820: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
6830: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
6840: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
6850: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
6860: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
6870: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
6880: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
6890: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
68a0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
68b0: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
68c0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
68d0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
68e0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
68f0: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
6900: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
6910: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
6920: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
6930: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
6940: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
6950: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
6960: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
6970: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
6980: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
6990: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
69a0: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
69b0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
69c0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54   string..**.** T
69d0: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
69e0: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
69f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
6a00: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
6a10: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
6a20: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
6a30: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
6a40: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
6a50: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
6a60: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
6a70: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
6a80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
6a90: 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
6aa0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
6ab0: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
6ac0: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
6ad0: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
6ae0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
6af0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
6b00: 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70      VdbeFrame *p
6b10: 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
6b20: 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65  e;.    p->pFrame
6b30: 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65   = pFrame->pPare
6b40: 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d  nt;.    p->nFram
6b50: 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e--;.    sqlite3
6b60: 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
6b70: 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
6b80: 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33      pc = sqlite3
6b90: 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65  VdbeFrameRestore
6ba0: 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61  (pFrame);.    la
6bb0: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
6bc0: 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28  stRowid;.    if(
6bd0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
6be0: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
6bf0: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69  Instruction pc i
6c00: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
6c10: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6c20: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
6c30: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
6c40: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
6c50: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
6c60: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
6c70: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
6c80: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
6c90: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
6ca0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
6cb0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
6cc0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
6cd0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
6ce0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
6cf0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
6d00: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
6d10: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
6d20: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
6d30: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
6d40: 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63    pc = p->aOp[pc
6d50: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
6d60: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
6d70: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
6d80: 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  em;.    break;. 
6d90: 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f   }..  p->rc = pO
6da0: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
6db0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6dc0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
6dd0: 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   pc;.  if( pOp->
6de0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
6df0: 72 74 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54  rt( p->rc!=SQLIT
6e00: 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69  E_OK );.    sqli
6e10: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
6e20: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
6e30: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6e40: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71      testcase( sq
6e50: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6e60: 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20  g.xLog!=0 );.   
6e70: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
6e80: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
6e90: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
6ea0: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f   pc, p->zSql, pO
6eb0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73  p->p4.z);.  }els
6ec0: 65 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20  e if( p->rc ){. 
6ed0: 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c     testcase( sql
6ee0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6ef0: 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20  .xLog!=0 );.    
6f00: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
6f10: 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74  >p1, "constraint
6f20: 20 66 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e   failed at %d in
6f30: 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a   [%s]", pc, p->z
6f40: 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Sql);.  }.  rc =
6f50: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
6f60: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
6f70: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
6f80: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
6f90: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
6fa0: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
6fb0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
6fc0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
6fd0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6fe0: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
6ff0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7000: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
7010: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7020: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7030: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7040: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7050: 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  dCons>0 );.    r
7060: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
7070: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
7080: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
7090: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
70a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
70b0: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
70c0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  *.**.** The 32-b
70d0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
70e0: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
70f0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7100: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7110: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7120: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7130: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7140: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7150: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7160: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7170: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
7180: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
7190: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
71a0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
71b0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
71c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
71d0: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
71e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
71f0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7200: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7210: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
7220: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
7230: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
7240: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
7250: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
7260: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
7270: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
7280: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
7290: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
72a0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
72b0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
72c0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
72d0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
72e0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
72f0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
7300: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
7310: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
7320: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7330: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7340: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
7350: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
7360: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
7370: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
7380: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
7390: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
73a0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
73b0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
73c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
73d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
73e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
73f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7400: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7410: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7420: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7430: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7440: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
7450: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
7460: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7470: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
7480: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7490: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
74a0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
74b0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
74c0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
74d0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
74e0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
74f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7500: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7510: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7520: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7540: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7550: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7560: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7570: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
7580: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
7590: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
75a0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
75b0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
75c0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
75d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
75e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
75f0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7600: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7610: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7620: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7630: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7640: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7650: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
7660: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
7670: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
7680: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
7690: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
76a0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
76b0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
76c0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
76d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
76e0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
76f0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7700: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7710: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7720: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7730: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7740: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7750: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7760: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7770: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
7780: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
7790: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
77a0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
77b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
77c0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
77d0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
77e0: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
77f0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7800: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7810: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7820: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7830: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7840: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7850: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7860: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
7880: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
7890: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
78a0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
78b0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
78c0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
78d0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
78e0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
78f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7900: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
7910: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7920: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
7930: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
7940: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
7950: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
7960: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
7970: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7980: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
7990: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
79a0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
79b0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
79c0: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
79d0: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
79e0: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
79f0: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
7a00: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
7a10: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
7a20: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
7a30: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
7a40: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
7a50: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
7a60: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
7a70: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
7a80: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
7a90: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
7aa0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
7ab0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7ac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7ad0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7ae0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
7af0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
7b00: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
7b10: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
7b20: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
7b30: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7b40: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
7b50: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
7b60: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
7b70: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
7b80: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
7b90: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
7ba0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
7bb0: 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65  Out);.    VdbeMe
7bc0: 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a  mRelease(pOut);.
7bd0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7be0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
7bf0: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
7c00: 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
7c10: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
7c20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  P4.**.** P4 poin
7c30: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
7c40: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
7c50: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
7c60: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
7c70: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7c80: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7c90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7ca0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7cb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7cc0: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7cd0: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7ce0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7cf0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7d00: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
7d10: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7d20: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7d30: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7d40: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7d50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
7d60: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
7d70: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  4 *.**.** Transf
7d80: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
7d90: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
7da0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
7db0: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
7dc0: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
7dd0: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
7de0: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
7df0: 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20  4 and P3==1..** 
7e00: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
7e10: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
7e20: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
7e30: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
7e40: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
7e50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7e60: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7e70: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
7e80: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
7e90: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
7ea0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7eb0: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
7ec0: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
7ed0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
7ee0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
7ef0: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
7f00: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
7f10: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
7f20: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
7f30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
7f40: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
7f50: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7f60: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
7f70: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7f80: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
7f90: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
7fa0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7fb0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7fc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
7fd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
7fe0: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
7ff0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8000: 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e  1..P1+P3 over in
8010: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
8020: 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69  P2..P2+P3.  Regi
8030: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
8040: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
8050: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
8060: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
8070: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
8080: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64  ** P1..P1+P3 and
8090: 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76   P2..P2+P3 to ov
80a0: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
80b0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
80c0: 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20   *zMalloc;   /* 
80d0: 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65  Holding variable
80e0: 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d   for allocated m
80f0: 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  emory */.  int n
8100: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
8110: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
8120: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
8130: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
8140: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
8150: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
8160: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
8170: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
8180: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
8190: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20    n = pOp->p3 + 
81a0: 31 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  1;.  p1 = pOp->p
81b0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
81c0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
81d0: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
81e0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
81f0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
8200: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
8210: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
8220: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
8230: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20   while( n-- ){. 
8240: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
8250: 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20  =&aMem[p->nMem] 
8260: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
8270: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  In1<=&aMem[p->nM
8280: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8290: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
82a0: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
82b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
82c0: 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  Out);.    zMallo
82d0: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
82e0: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
82f0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
8300: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
8310: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69  (pOut, pIn1);.#i
8320: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8330: 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e  G.    if( pOut->
8340: 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65  pScopyFrom>=&aMe
8350: 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70  m[p1] && pOut->p
8360: 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b  ScopyFrom<&aMem[
8370: 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20  p1+pOp->p3] ){. 
8380: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
8390: 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f  yFrom += p1 - pO
83a0: 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e  p->p2;.    }.#en
83b0: 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  dif.    pIn1->zM
83c0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
83d0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
83e0: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
83f0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8400: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8410: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8420: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
8430: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  3 * *.**.** Make
8440: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8450: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
8460: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
8470: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
8480: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8490: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
84a0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
84b0: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
84c0: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
84d0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
84e0: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
84f0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
8500: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
8510: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
8520: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
8530: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8540: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8550: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8560: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8570: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
8580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8590: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
85a0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
85b0: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
85c0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
85d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
85e0: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
85f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
8600: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
8610: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
8620: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
8630: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
8640: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
8650: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
8660: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
8670: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8680: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
8690: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
86a0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
86b0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
86c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
86d0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
86e0: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
86f0: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8700: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8710: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8720: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8730: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8740: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8750: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8760: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8770: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
8780: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
8790: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
87a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
87b0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
87c0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
87d0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
87e0: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
87f0: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8800: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8810: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8820: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8830: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8840: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8850: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8860: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8870: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
8880: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
8890: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
88a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
88b0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
88c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
88d0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
88e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
88f0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8900: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8910: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8920: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8930: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8940: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8950: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8960: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8970: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8980: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
89a0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
89b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
89c0: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
89d0: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
89e0: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
89f0: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8a00: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8a10: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8a20: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8a30: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8a40: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8a50: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8a60: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8a70: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
8a80: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
8a90: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
8aa0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
8ab0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
8ac0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
8ad0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8ae0: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8af0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8b00: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8b10: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8b20: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8b30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8b40: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8b50: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8b60: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8b70: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
8b80: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
8b90: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
8ba0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
8bb0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8bc0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
8bd0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8be0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8bf0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8c00: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8c10: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8c20: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8c30: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8c40: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8c50: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8c60: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8c70: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
8c80: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
8c90: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
8ca0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
8cb0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
8cc0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
8cd0: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8ce0: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8cf0: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8d00: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8d10: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8d20: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8d30: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8d40: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8d50: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8d60: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
8d70: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
8d80: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
8d90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
8da0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
8db0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
8dc0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
8dd0: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8de0: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8df0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8e00: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8e10: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8e20: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8e30: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8e40: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8e50: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8e60: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
8e70: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
8e80: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
8e90: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
8ea0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
8eb0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
8ec0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
8ed0: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8ee0: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8ef0: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8f00: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8f10: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8f20: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8f30: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8f40: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8f50: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
8f60: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
8f70: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
8f80: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
8f90: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
8fa0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
8fb0: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
8fc0: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
8fd0: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
8fe0: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8ff0: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
9000: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9010: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
9020: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
9030: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
9040: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
9050: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
9060: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
9070: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
9080: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
9090: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
90a0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
90b0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
90c0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
90d0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
90e0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
90f0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
9100: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
9110: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
9120: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
9130: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
9140: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
9150: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
9160: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
9170: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
9180: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
9190: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
91a0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
91b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
91c0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
91d0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
91e0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
91f0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9200: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9210: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9220: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9230: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9240: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
9250: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
9260: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9270: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
9280: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
9290: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
92a0: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
92b0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
92c0: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
92d0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
92e0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
92f0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9300: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9310: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9320: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9330: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9340: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
9350: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
9360: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
9370: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9380: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
9390: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
93a0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
93b0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
93c0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
93d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
93e0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
93f0: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
9400: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
9410: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
9420: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
9430: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
9440: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
9450: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
9460: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
9470: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
9480: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
9490: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
94a0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
94b0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
94c0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
94d0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
94e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
94f0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
9500: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
9510: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
9520: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
9530: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
9540: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9550: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
9560: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
9570: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
9580: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
9590: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
95a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
95b0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
95c0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
95d0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
95e0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
95f0: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
9600: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
9610: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
9620: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
9630: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9640: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
9650: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
9660: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
9670: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
9680: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
9690: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
96a0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
96b0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
96c0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
96d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
96e0: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
96f0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9700: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9710: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9720: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
9730: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
9740: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
9750: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
9760: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
9770: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
9780: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
9790: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
97a0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
97b0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d  pOut->z[nByte] =
97c0: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42   0;.  pOut->z[nB
97d0: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
97e0: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
97f0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
9800: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
9810: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9820: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9830: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9840: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9850: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
9860: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9870: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
9880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
9890: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
98a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
98b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
98c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
98d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
98e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
98f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9900: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9910: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
9920: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  P3 * *.**.**.** 
9930: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
9940: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9950: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9960: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9970: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9980: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9990: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
99a0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
99b0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
99c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
99d0: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
99e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
99f0: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
9a00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9a10: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
9a20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9a30: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9a40: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9a50: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9a60: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9a70: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9a80: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9a90: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
9aa0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9ab0: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
9ac0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9ad0: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9ae0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9af0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9b00: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9b10: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
9b20: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
9b30: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
9b40: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
9b50: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9b60: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9b70: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
9b80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9b90: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9ba0: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
9bb0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
9bc0: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
9bd0: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
9be0: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
9bf0: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
9c00: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9c10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9c20: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9c30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
9c40: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
9c50: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9c60: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9c70: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
9c80: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
9c90: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
9ca0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9cb0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
9ce0: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
9cf0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
9d00: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
9d10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9d20: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
9d30: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9d40: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9d60: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
9d70: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9d80: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
9d90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9da0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9db0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
9dc0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9dd0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
9de0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9df0: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
9e00: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
9e10: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
9e20: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
9e30: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
9e40: 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  ands */.  int fl
9e50: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
9e60: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
9e70: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
9e80: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
9ea0: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
9eb0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
9ec0: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
9ed0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9ee0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
9ef0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
9f00: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9f10: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
9f20: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9f30: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
9f40: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9f50: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
9f60: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
9f70: 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  1];.  applyNumer
9f80: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29  icAffinity(pIn1)
9f90: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
9fa0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70  [pOp->p2];.  app
9fb0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9fc0: 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  y(pIn2);.  pOut 
9fd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9fe0: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
9ff0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
a000: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
a010: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
a020: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a030: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a040: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ull;.  if( (pIn1
a050: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e  ->flags & pIn2->
a060: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a070: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  ==MEM_Int ){.   
a080: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
a090: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
a0a0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
a0b0: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
a0c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a0d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a0e0: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
a0f0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
a100: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
a110: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
a120: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
a130: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
a140: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
a150: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
a160: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
a170: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
a180: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
a190: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
a1a0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
a1b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a1c0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a1d0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a1e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a1f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a200: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
a210: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
a220: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
a230: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
a240: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
a250: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a260: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a270: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a280: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a290: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a2a0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a2b0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a2c0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a2d0: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
a2e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a2f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a300: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
a310: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a320: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
a330: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
a340: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
a350: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
a360: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a370: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
a380: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
a390: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
a3a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
a3b0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
a3c0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
a3d0: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
a3e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a3f0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a400: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
a410: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a420: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
a430: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
a440: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a450: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a460: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
a470: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
a480: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
a490: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
a4a0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
a4b0: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
a4c0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a4d0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a4e0: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
a4f0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a500: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a510: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a520: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
a530: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
a540: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
a550: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a560: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a570: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a580: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a590: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a5a0: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
a5b0: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
a5c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a5d0: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
a5e0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
a5f0: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
a600: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
a610: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a620: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
a630: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
a640: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a650: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a660: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a670: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a680: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a690: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a6a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
a6b0: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
a6c0: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
a6d0: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
a6e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a6f0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a700: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
a710: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
a720: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
a730: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
a740: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a750: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
a760: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a770: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
a780: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
a790: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a7a0: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
a7b0: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
a7c0: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
a7d0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
a7e0: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
a7f0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a800: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
a810: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
a820: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
a830: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
a840: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
a850: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
a860: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
a870: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
a880: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
a890: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
a8a0: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
a8b0: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
a8c0: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
a8d0: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
a8e0: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
a8f0: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
a900: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
a910: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
a920: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
a930: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
a940: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
a950: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
a960: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
a970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
a980: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
a990: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
a9a0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
a9b0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a9c0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
a9d0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
a9e0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
a9f0: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
aa00: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
aa10: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
aa20: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
aa30: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
aa40: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
aa50: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
aa60: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
aa70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
aa80: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
aa90: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
aaa0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
aab0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
aac0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
aad0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
aae0: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
aaf0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
ab00: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
ab10: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
ab20: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
ab30: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
ab40: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
ab50: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
ab60: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
ab70: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
ab80: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
ab90: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
aba0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
abb0: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
abc0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
abd0: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
abe0: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
abf0: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
ac00: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ac10: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
ac20: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
ac30: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
ac40: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
ac50: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
ac60: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
ac70: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
ac80: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
ac90: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
aca0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
acb0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
acc0: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
acd0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ace0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
acf0: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
ad00: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
ad10: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
ad20: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
ad30: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
ad40: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
ad50: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
ad60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
ad70: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
ad80: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
ad90: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
ada0: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
adb0: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
adc0: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
add0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
ade0: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
adf0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
ae00: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
ae10: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
ae20: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
ae30: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
ae40: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
ae50: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
ae60: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ae70: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ae80: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
ae90: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
aea0: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
aeb0: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
aec0: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
aed0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
aee0: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
aef0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
af00: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
af10: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
af20: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
af30: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
af40: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
af50: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
af60: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
af70: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
af80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
af90: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
afa0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
afb0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
afc0: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
afd0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
afe0: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
aff0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
b000: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
b010: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
b020: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
b030: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
b040: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
b050: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
b060: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
b070: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
b080: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
b090: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
b0a0: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
b0b0: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
b0c0: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63  >pFunc;.  }..  c
b0d0: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
b0e0: 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64  _Null;.  ctx.s.d
b0f0: 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e  b = db;.  ctx.s.
b100: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
b110: 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a  s.zMalloc = 0;..
b120: 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
b130: 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
b140: 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
b150: 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
b160: 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20   ** the pointer 
b170: 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63  to ctx.s so in c
b180: 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
b190: 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20  ction can use.  
b1a0: 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  ** the already a
b1b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
b1c0: 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
b1d0: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e  ating a new one.
b1e0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
b1f0: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e  dbeMemMove(&ctx.
b200: 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53  s, pOut);.  MemS
b210: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
b220: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
b230: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
b240: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
b250: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
b260: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
b270: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
b280: 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
b290: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
b2a0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
b2b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b2c0: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
b2d0: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
b2e0: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
b2f0: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
b300: 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f    }.  db->lastRo
b310: 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
b320: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
b330: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
b340: 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
b350: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
b360: 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  .  lastRowid = d
b370: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20  b->lastRowid;.. 
b380: 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c   /* If any auxil
b390: 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69  iary data functi
b3a0: 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61  ons have been ca
b3b0: 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65  lled by this use
b3c0: 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a  r function,.  **
b3d0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c   immediately cal
b3e0: 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  l the destructor
b3f0: 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61   for any non-sta
b400: 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f  tic values..  */
b410: 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65  .  if( ctx.pVdbe
b420: 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  Func ){.    sqli
b430: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
b440: 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75  Data(ctx.pVdbeFu
b450: 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  nc, pOp->p1);.  
b460: 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46    pOp->p4.pVdbeF
b470: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
b480: 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  unc;.    pOp->p4
b490: 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55  type = P4_VDBEFU
b4a0: 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64  NC;.  }..  if( d
b4b0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
b4c0: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
b4d0: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
b4e0: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
b4f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b500: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
b510: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
b520: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
b530: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
b540: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
b550: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
b560: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
b570: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
b580: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
b590: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
b5a0: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
b5b0: 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
b5c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
b5d0: 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
b5e0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b5f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
b600: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
b610: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
b620: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
b630: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
b640: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
b650: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
b660: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
b670: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
b680: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
b690: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
b6a0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
b6b0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
b6c0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
b6d0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
b6e0: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
b6f0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
b700: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
b710: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
b720: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
b730: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
b740: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
b750: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
b760: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
b770: 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54   }..#if 0.  /* T
b780: 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66  he app-defined f
b790: 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65  unction has done
b7a0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b7b0: 61 73 20 63 61 75 73 65 64 20 74 68 69 73 0a 20  as caused this. 
b7c0: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f   ** statement to
b7d0: 20 65 78 70 69 72 65 2e 20 20 28 50 65 72 68 61   expire.  (Perha
b7e0: 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ps the function 
b7f0: 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65  called sqlite3_e
b800: 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20  xec().  ** with 
b810: 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  a CREATE TABLE s
b820: 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a  tatement.).  */.
b830: 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
b840: 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41   ) rc = SQLITE_A
b850: 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  BORT;.#endif..  
b860: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b870: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
b880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b890: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b8a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b8b0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
b8c0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b8d0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
b8e0: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
b8f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b900: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b910: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b920: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b930: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b940: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b950: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b960: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
b970: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
b980: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b990: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
b9a0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b9b0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b9c0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b9d0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b9e0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b9f0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ba00: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ba10: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ba20: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
ba30: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ba40: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
ba50: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
ba60: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
ba70: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
ba80: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
ba90: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
baa0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
bab0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
bac0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
bad0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
bae0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
baf0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
bb00: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
bb10: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
bb20: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
bb30: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
bb40: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
bb50: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
bb60: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
bb70: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
bb80: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
bb90: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
bba0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
bbb0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
bbc0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bbd0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bbe0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bbf0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bc00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
bc10: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
bc20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bc30: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
bc40: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
bc50: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
bc70: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
bc80: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bc90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
bca0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
bcb0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bcc0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
bcd0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bce0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
bcf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bd00: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
bd10: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bd20: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
bd30: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
bd40: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
bd50: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bd60: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
bd70: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
bd80: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bd90: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
bda0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
bdb0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
bdc0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
bdd0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
bde0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
bdf0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
be00: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
be10: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
be20: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
be30: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
be40: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
be50: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
be60: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
be70: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
be80: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
be90: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
bea0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
beb0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
bec0: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
bed0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
bee0: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
bef0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
bf00: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
bf10: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
bf20: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
bf30: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
bf40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
bf50: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
bf60: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
bf70: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
bf80: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
bf90: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
bfa0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
bfb0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
bfc0: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
bfd0: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
bfe0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
bff0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
c000: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
c010: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
c020: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
c030: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
c040: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
c050: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
c060: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c070: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
c080: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
c090: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
c0a0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
c0b0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
c0c0: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
c0d0: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
c0e0: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
c0f0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
c100: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
c110: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
c120: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
c130: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
c140: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
c150: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c160: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
c170: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c180: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
c190: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
c1a0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
c1b0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
c1c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c1d0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
c1e0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
c1f0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
c200: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
c210: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
c220: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
c230: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
c240: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
c250: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
c260: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c270: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
c280: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
c290: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
c2a0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
c2b0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
c2c0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
c2d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c2e0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
c2f0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
c300: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c310: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c320: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
c330: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
c340: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
c350: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
c360: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
c370: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
c380: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
c390: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
c3a0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
c3b0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
c3c0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
c3d0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
c3e0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
c3f0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
c400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
c410: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
c420: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c430: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
c440: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c450: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
c460: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
c470: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c480: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
c490: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
c4a0: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
c4b0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
c4c0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
c4d0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
c4e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
c4f0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
c500: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
c510: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c520: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
c530: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c540: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
c550: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c560: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
c570: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
c580: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
c590: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
c5a0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
c5b0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
c5c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
c5d0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
c5e0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
c5f0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
c600: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
c610: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
c620: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
c630: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
c640: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
c650: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
c660: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
c670: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
c680: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
c690: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
c6a0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
c6b0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
c6c0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
c6d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c6e0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c6f0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c700: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c710: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c720: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
c730: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
c740: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c750: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
c760: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c770: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
c780: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c790: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c7a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c7b0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c7c0: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c7d0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c7e0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c7f0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c800: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c810: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c820: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c830: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c840: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c850: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c860: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c870: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c880: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c890: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c8a0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c8b0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c8c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c8d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c8e0: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c8f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c900: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c910: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c920: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c930: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c940: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c950: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c960: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c970: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c980: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c990: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c9a0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c9b0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c9c0: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c9d0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c9e0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c9f0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
ca00: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
ca10: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
ca20: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
ca30: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
ca40: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
ca50: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
ca60: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
ca70: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
ca80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
ca90: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
caa0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
cab0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cac0: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
cad0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
cae0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
caf0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
cb00: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
cb10: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
cb20: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
cb30: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
cb40: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
cb50: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
cb60: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
cb70: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cb80: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
cb90: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cba0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cbb0: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cbd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
cbe0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
cbf0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cc00: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
cc10: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
cc20: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
cc30: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
cc40: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
cc50: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
cc60: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
cc70: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
cc80: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
cc90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cca0: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
ccb0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
ccc0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ccd0: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
cce0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
ccf0: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
cd00: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
cd10: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
cd20: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
cd30: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
cd40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cd50: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
cd60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cd70: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cd80: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cd90: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
cda0: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
cdb0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
cdc0: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
cdd0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
cde0: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
cdf0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
ce00: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
ce10: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
ce20: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
ce30: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
ce40: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
ce50: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
ce60: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
ce70: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
ce80: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
ce90: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cea0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ceb0: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
cee0: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
cef0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
cf00: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
cf10: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
cf20: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
cf30: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
cf40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cf50: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cf60: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
cf70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cf80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cf90: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
cfa0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
cfb0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
cfc0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
cfd0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
cfe0: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
cff0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
d000: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
d010: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
d020: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
d030: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
d040: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
d050: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
d060: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
d070: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
d080: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
d090: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
d0a0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
d0b0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
d0c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d0d0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
d0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d0f0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
d100: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d110: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d120: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d130: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
d140: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
d150: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
d160: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d170: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
d180: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
d190: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
d1a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
d1b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
d1c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
d1d0: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
d1e0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d1f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d200: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
d210: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
d220: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
d230: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
d240: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
d250: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
d260: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
d270: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
d280: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
d290: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
d2a0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
d2b0: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
d2c0: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
d2d0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
d2e0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
d2f0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d300: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d310: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d320: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d330: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
d340: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
d350: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d360: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
d370: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d380: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
d390: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d3a0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
d3b0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d3c0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
d3d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
d3e0: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
d3f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
d400: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
d410: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
d420: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
d430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d440: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
d450: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
d460: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d470: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
d480: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d490: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
d4a0: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
d4b0: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
d4c0: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
d4d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
d4e0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
d4f0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
d500: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
d510: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
d520: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
d530: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
d540: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d550: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
d560: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
d570: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
d580: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d590: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
d5a0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
d5b0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
d5c0: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
d5d0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
d5e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
d5f0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
d600: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
d610: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
d620: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
d630: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
d640: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
d650: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
d660: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
d670: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
d680: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d690: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
d6a0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
d6b0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
d6c0: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
d6d0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
d6e0: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
d6f0: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
d700: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
d710: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
d720: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
d730: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
d740: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
d750: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
d760: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
d770: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
d780: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
d790: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
d7a0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
d7b0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
d7c0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
d7d0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
d7e0: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
d7f0: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
d800: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
d810: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
d820: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
d830: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
d840: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d850: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d860: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d870: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d880: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d890: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d8a0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d8b0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d8c0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d8d0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d8e0: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d8f0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d900: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d910: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d920: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d930: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d940: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d950: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d960: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d970: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d980: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d990: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d9a0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d9b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d9c0: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d9d0: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d9e0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d9f0: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
da00: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
da10: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
da20: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
da30: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
da40: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
da50: 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20  E_NULLEQ bit is 
da60: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20  set in P5, then 
da70: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
da80: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71  considered.** eq
da90: 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68  ual to one anoth
daa0: 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61  er, provided tha
dab0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61  t they do not ha
dac0: 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65  ve their MEM_Cle
dad0: 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e  ared.** bit set.
dae0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
daf0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
db00: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
db10: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
db20: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
db30: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
db40: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
db50: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
db60: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
db70: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
db80: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
db90: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
dba0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
dbb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
dbc0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
dbd0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
dbe0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
dbf0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
dc00: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
dc10: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
dc20: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
dc30: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
dc40: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
dc50: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
dc60: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
dc70: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
dc80: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
dc90: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
dca0: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
dcb0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
dcc0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
dcd0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
dce0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
dcf0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
dd00: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
dd10: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
dd20: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
dd30: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
dd40: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
dd50: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
dd60: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
dd70: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
dd80: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
dd90: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
dda0: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
ddb0: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
ddc0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ddd0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
dde0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
ddf0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
de00: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
de10: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
de30: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
de40: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
de50: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
de60: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
de70: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
de80: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
de90: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
dea0: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
deb0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dec0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ded0: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
dee0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
def0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
df00: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
df10: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
df20: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
df30: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
df40: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
df50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
df60: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
df70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
df80: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
df90: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
dfa0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
dfb0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
dfc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
dfd0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
dfe0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
dff0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e000: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e010: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e020: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e030: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e040: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
e050: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e060: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e070: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e080: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e090: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e0a0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e0b0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
e0c0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
e0d0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
e0e0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e0f0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e100: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e110: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e120: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e130: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
e140: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
e150: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e160: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e170: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e180: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e190: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
e1a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
e1b0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
e1c0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
e1d0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e1e0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e1f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e200: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e210: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
e220: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
e230: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e240: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
e250: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e260: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
e270: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e280: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
e290: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
e2a0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e2b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
e2c0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e2d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e2f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
e300: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e310: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
e320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e330: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
e340: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e350: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
e360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e370: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
e380: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
e390: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
e3a0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
e3b0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
e3c0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
e3d0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
e3e0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
e3f0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
e400: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
e410: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
e420: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e430: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e440: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
e450: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
e460: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
e470: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
e480: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
e490: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
e4a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e4b0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
e4c0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
e4d0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
e4e0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
e4f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
e500: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
e510: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e520: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
e530: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e540: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
e550: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
e560: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
e570: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e580: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
e590: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
e5a0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
e5b0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
e5c0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
e5d0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
e5e0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
e5f0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
e600: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
e610: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
e620: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
e630: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
e640: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
e650: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e660: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
e670: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
e680: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
e690: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
e6a0: 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s1&MEM_Null)!=0.
e6b0: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
e6c0: 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
e6d0: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
e6e0: 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
e6f0: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
e700: 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52    res = 0;  /* R
e710: 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c  esults are equal
e720: 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
e730: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31  .        res = 1
e740: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
e750: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
e760: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
e770: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
e780: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
e790: 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
e7a0: 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
e7b0: 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
e7c0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e7d0: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
e7e0: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
e7f0: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
e800: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e810: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
e820: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
e830: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
e840: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
e850: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
e860: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
e870: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e880: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
e890: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
e8a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
e8b0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
e8c0: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
e8d0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
e8e0: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
e8f0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
e900: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
e910: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
e920: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
e930: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e940: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
e950: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
e960: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
e970: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
e980: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
e990: 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
e9a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
e9b0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
e9c0: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70  ding);.      app
e9d0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
e9e0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
e9f0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ing);.      if( 
ea00: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
ea10: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ea20: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
ea30: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
ea40: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
ea50: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
ea60: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
ea70: 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61  (pIn1);.    Expa
ea80: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
ea90: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
eaa0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
eab0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
eac0: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
ead0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
eae0: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
eaf0: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
eb00: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
eb10: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
eb20: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
eb30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
eb40: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
eb50: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
eb60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
eb70: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
eb80: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
eb90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
eba0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
ebb0: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
ebc0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
ebd0: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
ebe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
ebf0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
ec00: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
ec10: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
ec20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
ec30: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
ec40: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
ec50: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
ec60: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
ec70: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
ec80: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
ec90: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
eca0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  pOut);.  }else i
ecb0: 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
ecc0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
ecd0: 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
ece0: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
ecf0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
ed00: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
ed10: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49  gisters. */.  pI
ed20: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n1->flags = (pIn
ed30: 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  1->flags&~MEM_Ty
ed40: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
ed50: 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  1&MEM_TypeMask);
ed60: 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
ed70: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn3->flags&~M
ed80: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
ed90: 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d  flags3&MEM_TypeM
eda0: 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ask);.  break;.}
edb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
edc0: 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
edd0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
ede0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
edf0: 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
ee00: 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
ee10: 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
ee20: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
ee30: 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
ee40: 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
ee50: 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
ee60: 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
ee70: 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
ee80: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
ee90: 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
eea0: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
eeb0: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
eec0: 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
eed0: 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
eee0: 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
eef0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  e..*/.case OP_Pe
ef00: 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
ef10: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
ef20: 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
ef30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
ef40: 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65  ->p4.ai );.  aPe
ef50: 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  rmute = pOp->p4.
ef60: 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ai;.  break;.}..
ef70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
ef80: 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
ef90: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
efa0: 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72  two vectors of r
efb0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
efc0: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
efd0: 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  ) (call this.** 
efe0: 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20  vector "A") and 
eff0: 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
f000: 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
f010: 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
f020: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
f030: 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
f040: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
f050: 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
f060: 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
f070: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
f080: 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
f090: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72   order of compar
f0a0: 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72  ison is.** deter
f0b0: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73  mined by the mos
f0c0: 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d  t recent OP_Perm
f0d0: 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  utation operator
f0e0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46  .  If the.** OPF
f0f0: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f100: 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
f110: 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70  egister are comp
f120: 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69  ared in sequenti
f130: 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a  al.** order..**.
f140: 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
f150: 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
f160: 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
f170: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
f180: 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
f190: 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
f1a0: 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
f1b0: 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
f1c0: 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
f1d0: 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
f1e0: 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
f1f0: 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
f200: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
f210: 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
f220: 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
f230: 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
f240: 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
f250: 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
f260: 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
f270: 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
f280: 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
f290: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
f2a0: 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
f2b0: 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
f2c0: 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
f2d0: 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
f2e0: 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
f2f0: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
f300: 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
f310: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
f320: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
f330: 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
f340: 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
f350: 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
f360: 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
f370: 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
f380: 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  r */..  if( (pOp
f390: 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
f3a0: 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72  RMUTE)==0 ) aPer
f3b0: 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20  mute = 0;.  n = 
f3c0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
f3d0: 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
f3e0: 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
f3f0: 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
f400: 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
f410: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
f420: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
f430: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ;.#if SQLITE_DEB
f440: 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
f450: 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
f460: 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
f470: 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
f480: 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
f490: 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
f4a0: 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
f4b0: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
f4c0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
f4d0: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
f4e0: 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d  & p2+mx<=p->nMem
f4f0: 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
f500: 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
f510: 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  && p1+n<=p->nMem
f520: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
f530: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
f540: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d  p->nMem+1 );.  }
f550: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f560: 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72  E_DEBUG */.  for
f570: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
f580: 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d  .    idx = aPerm
f590: 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69  ute ? aPermute[i
f5a0: 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72  ] : i;.    asser
f5b0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
f5c0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a  Mem[p1+idx]) );.
f5d0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
f5e0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b  sValid(&aMem[p2+
f5f0: 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  idx]) );.    REG
f600: 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69  ISTER_TRACE(p1+i
f610: 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78  dx, &aMem[p1+idx
f620: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
f630: 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26  _TRACE(p2+idx, &
f640: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20  aMem[p2+idx]);. 
f650: 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65     assert( i<pKe
f660: 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b  yInfo->nField );
f670: 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
f680: 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
f690: 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
f6a0: 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
f6b0: 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
f6c0: 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
f6d0: 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
f6e0: 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
f6f0: 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
f700: 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
f710: 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
f720: 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
f730: 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
f740: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
f750: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
f760: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f770: 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
f780: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
f790: 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
f7a0: 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
f7b0: 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
f7c0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
f7d0: 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
f7e0: 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
f7f0: 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
f800: 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
f810: 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
f820: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
f830: 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
f840: 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
f850: 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
f860: 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
f870: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
f880: 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
f890: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
f8a0: 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p1 - 1;.  }els
f8b0: 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d  e if( iCompare==
f8c0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
f8d0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
f8e0: 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  se{.    pc = pOp
f8f0: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p3 - 1;.  }.  
f900: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f910: 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
f920: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
f930: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
f940: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
f950: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f960: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
f970: 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
f980: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
f990: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f9a0: 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
f9b0: 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
f9c0: 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
f9d0: 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
f9e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
f9f0: 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
fa00: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
fa10: 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
fa20: 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
fa30: 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
fa40: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
fa50: 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
fa60: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
fa70: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
fa80: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
fa90: 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
faa0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
fab0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
fac0: 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
fad0: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
fae0: 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
faf0: 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
fb00: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
fb10: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
fb20: 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
fb30: 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
fb40: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
fb50: 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
fb60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fb70: 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
fb80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
fb90: 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
fba0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fbb0: 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
fbc0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
fbd0: 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
fbe0: 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
fbf0: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
fc00: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
fc10: 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
fc20: 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
fc30: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
fc40: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
fc50: 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
fc60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
fc70: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
fc80: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
fc90: 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
fca0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
fcb0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
fcc0: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
fcd0: 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
fce0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
fcf0: 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
fd00: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fd10: 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
fd20: 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
fd30: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
fd40: 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
fd50: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
fd60: 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
fd70: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
fd80: 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
fd90: 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
fda0: 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
fdb0: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
fdc0: 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
fdd0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
fde0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fdf0: 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
fe00: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
fe10: 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
fe20: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
fe30: 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
fe40: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
fe50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
fe60: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
fe70: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
fe80: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
fe90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
fea0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
feb0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
fec0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
fed0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fee0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
fef0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
ff00: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
ff10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ff20: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
ff30: 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
ff40: 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
ff50: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
ff60: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
ff70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ff80: 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
ff90: 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
ffa0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
ffb0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
ffc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ffd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ffe0: 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
fff0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
10000 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
10010 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10020 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
10030 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10040 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
10050 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10060 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
10070 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10080 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
10090 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
100a0 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
100b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
100c0 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
100d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
100e0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
100f0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
10100 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
10110 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
10120 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
10130 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
10140 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
10150 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
10160 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
10170 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
10180 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
10190 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
101a0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
101b0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
101c0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
101d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
101e0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
101f0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10200 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10210 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
10220 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10230 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
10240 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
10250 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
10260 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64  pOut, ~sqlite3Vd
10270 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10280 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10290 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e  }../* Opcode: On
102a0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
102b0 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f 50  *.** Check if OP
102c0 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69 73  _Once flag P1 is
102d0 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d   set. If so, jum
102e0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
102f0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a   P2. Otherwise,.
10300 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  ** set the flag 
10310 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
10320 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
10330 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
10340 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
10350 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
10360 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
10370 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c  p->p1<p->nOnceFl
10380 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  ag );.  if( p->a
10390 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
103a0 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  ] ){.    pc = pO
103b0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
103c0 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
103d0 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
103e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
103f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
10400 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
10410 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
10420 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10430 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
10440 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
10450 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
10460 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
10470 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
10480 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
10490 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
104a0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
104b0 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  ump if P3 is non
104c0 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  -zero..*/./* Opc
104d0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
104e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
104f0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
10500 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10510 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
10520 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10530 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
10540 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
10550 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
10560 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
10570 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
10580 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
10590 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a   jump if P3 is z
105a0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
105b0 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
105c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
105d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
105e0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
105f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
10600 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
10610 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10620 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
10630 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10640 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
10650 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
10660 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
10670 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
10680 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
10690 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
106a0 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
106b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
106c0 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
106d0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
106e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
106f0 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
10700 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b  ;.  }.  if( c ){
10710 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10720 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
10730 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10740 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  IsNull P1 P2 * *
10750 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10760 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10770 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10780 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
10790 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
107a0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
107b0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
107c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
107d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
107e0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
107f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10800 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)!=0 ){.    pc
10810 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
10820 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10830 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
10840 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
10850 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
10860 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
10870 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
10880 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
10890 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
108a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
108b0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
108c0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
108d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
108e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
108f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10900 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
10910 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
10920 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
10930 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
10940 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
10950 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  4 P5.**.** Inter
10960 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
10970 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
10980 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
10990 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
109a0 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
109b0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
109c0 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
109d0 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
109e0 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
109f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10a00 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
10a10 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
10a20 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
10a30 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
10a40 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
10a50 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
10a60 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
10a70 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10a80 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
10a90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
10aa0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
10ab0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
10ac0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
10ad0 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
10ae0 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
10af0 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
10b00 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
10b10 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
10b20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
10b30 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
10b40 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
10b50 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
10b60 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
10b70 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
10b80 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
10b90 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
10ba0 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
10bb0 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
10bc0 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
10bd0 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
10be0 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
10bf0 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
10c00 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
10c10 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
10c20 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
10c30 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
10c40 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
10c50 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
10c60 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
10c70 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
10c80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
10c90 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
10ca0 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
10cb0 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
10cc0 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
10cd0 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
10ce0 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
10cf0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
10d00 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
10d10 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
10d20 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
10d30 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
10d40 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
10d50 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
10d60 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
10d70 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
10d80 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
10d90 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
10da0 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
10db0 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
10dc0 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53  {.  u32 payloadS
10dd0 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ize;   /* Number
10de0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
10df0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
10e00 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20   payloadSize64; 
10e10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
10e20 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10e30 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
10e40 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76           /* P1 v
10e50 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
10e60 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  de */.  int p2; 
10e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
10e80 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
10e90 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
10ea0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
10eb0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
10ec0 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  or */.  char *zR
10ed0 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ec;        /* Po
10ee0 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  inter to complet
10ef0 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f  e record-data */
10f00 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
10f10 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
10f20 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
10f30 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20  32 *aType;      
10f40 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f    /* aType[i] ho
10f50 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  lds the numeric 
10f60 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68  type of the i-th
10f70 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
10f80 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
10f90 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
10fa0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
10fb0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
10fc0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
10fd0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
10fe0 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69   /* number of fi
10ff0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
11000 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  rd */.  int len;
11010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11020 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11030 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
11040 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
11050 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
11060 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
11070 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72  ounter */.  char
11080 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *zData;       /
11090 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
110a0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
110b0 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  ed */.  Mem *pDe
110c0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
110d0 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
110e0 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
110f0 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
11100 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
11110 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
11120 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
11130 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20   */.  u8 *zIdx; 
11140 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11150 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f  x into header */
11160 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  .  u8 *zEndHdr; 
11170 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
11180 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
11190 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
111a0 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
111b0 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
111c0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
111d0 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
111e0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
111f0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11200 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
11210 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  ield */.  int sz
11220 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Hdr;         /* 
11230 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  Size of the head
11240 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74  er size field at
11250 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64   start of record
11260 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b   */.  int avail;
11270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11280 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
11290 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
112a0 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
112b0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
112c0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
112d0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
112e0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
112f0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
11300 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
11310 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f  r */...  p1 = pO
11320 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
11330 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b  p->p2;.  pC = 0;
11340 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
11350 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
11360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
11370 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
11380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
11390 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
113a0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
113b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
113c0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
113d0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
113e0 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
113f0 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
11400 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
11410 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
11420 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
11430 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
11440 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
11450 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
11460 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
11470 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
11480 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
11490 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
114a0 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
114b0 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
114c0 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
114d0 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
114e0 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
114f0 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
11500 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
11510 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
11520 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
11530 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
11540 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
11550 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
11560 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
11570 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
11580 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
11590 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
115a0 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
115b0 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
115c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
115d0 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
115e0 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
115f0 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
11600 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
11610 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
11620 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
11630 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
11640 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
11650 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
11660 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
11670 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11680 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
11690 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
116a0 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
116b0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
116c0 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
116d0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
116e0 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
116f0 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
11700 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
11710 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
11720 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
11730 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
11740 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
11750 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
11760 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
11770 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
11780 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
11790 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
117a0 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
117b0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
117c0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
117d0 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
117e0 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
117f0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
11800 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
11810 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
11820 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
11830 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
11840 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
11850 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
11860 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
11870 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
11880 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
11890 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54  ITE_OK );   /* T
118a0 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
118b0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
118c0 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
118d0 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
118e0 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
118f0 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
11900 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
11910 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f  e.      ** paylo
11920 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
11930 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
11940 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
11950 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61  o be.      ** la
11960 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
11970 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  s. */.      asse
11980 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
11990 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
119a0 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
119b0 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
119c0 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
119d0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
119e0 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  64;.    }else{. 
119f0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
11a00 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
11a10 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
11a20 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  .      VVA_ONLY(
11a30 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
11a40 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
11a50 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  , &payloadSize);
11a60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
11a70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
11a80 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
11a90 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
11aa0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
11ab0 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73 65 75   ALWAYS(pC->pseu
11ac0 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20 29 7b  doTableReg>0) ){
11ad0 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65  .    pReg = &aMe
11ae0 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
11af0 65 52 65 67 5d 3b 0a 20 20 20 20 69 66 28 20 70  eReg];.    if( p
11b00 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 29  C->multiPseudo )
11b10 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
11b20 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
11b30 79 28 70 44 65 73 74 2c 20 70 52 65 67 2b 70 32  y(pDest, pReg+p2
11b40 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
11b50 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
11b60 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ze(pDest);.     
11b70 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
11b80 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  out;.    }.    a
11b90 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
11ba0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
11bb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11bc0 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
11bd0 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
11be0 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
11bf0 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a  zRec = pReg->z;.
11c00 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
11c10 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f  tus = (pOp->p5&O
11c20 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
11c30 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20  ) ? CACHE_STALE 
11c40 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  : p->cacheCtr;. 
11c50 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f     assert( paylo
11c60 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65  adSize==0 || zRe
11c70 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  c!=0 );.  }else{
11c80 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72  .    /* Consider
11c90 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e   the row to be N
11ca0 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f  ULL */.    paylo
11cb0 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a  adSize = 0;.  }.
11cc0 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
11cd0 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
11ce0 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
11cf0 4c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61 70  L.  This can hap
11d00 70 65 6e 20 62 65 63 61 75 73 65 20 6f 66 0a 20  pen because of. 
11d10 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62   ** nullRow or b
11d20 65 63 61 75 73 65 20 6f 66 20 61 20 63 6f 72 72  ecause of a corr
11d30 75 70 74 20 64 61 74 61 62 61 73 65 2e 20 2a 2f  upt database. */
11d40 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69  .  if( payloadSi
11d50 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d  ze==0 ){.    Mem
11d60 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
11d70 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
11d80 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11d90 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _out;.  }.  asse
11da0 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  rt( db->aLimit[S
11db0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
11dc0 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  TH]>=0 );.  if( 
11dd0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75  payloadSize > (u
11de0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
11df0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
11e00 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
11e10 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e  oo_big;.  }..  n
11e20 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
11e30 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32  ld;.  assert( p2
11e40 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a  <nField );..  /*
11e50 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
11e60 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72  the table header
11e70 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  .  Store the res
11e80 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73  ults of the pars
11e90 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20  e.  ** into the 
11ea0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61  record header ca
11eb0 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  che fields of th
11ec0 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
11ed0 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79   aType = pC->aTy
11ee0 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  pe;.  if( pC->ca
11ef0 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
11f00 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f  cheCtr ){.    aO
11f10 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66  ffset = pC->aOff
11f20 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  set;.  }else{.  
11f30 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b    assert(aType);
11f40 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a  .    avail = 0;.
11f50 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20      pC->aOffset 
11f60 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79  = aOffset = &aTy
11f70 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  pe[nField];.    
11f80 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
11f90 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  = payloadSize;. 
11fa0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
11fb0 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
11fc0 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65  ;..    /* Figure
11fd0 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79   out how many by
11fe0 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68  tes are in the h
11ff0 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28  eader */.    if(
12000 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a   zRec ){.      z
12010 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20  Data = zRec;.   
12020 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
12030 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
12040 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
12050 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
12060 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
12070 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
12080 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12090 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
120a0 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74  )sqlite3BtreeDat
120b0 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
120c0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
120d0 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65       /* If KeyFe
120e0 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28  tch()/DataFetch(
120f0 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74  ) managed to get
12100 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c   the entire payl
12110 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61  oad,.      ** sa
12120 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  ve the payload i
12130 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63  n the pC->aRow c
12140 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c  ache.  That will
12150 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20   save us from.  
12160 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f      ** having to
12170 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c   make additional
12180 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20   calls to fetch 
12190 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74  the content port
121a0 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20  ion of.      ** 
121b0 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
121c0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
121d0 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20  t( avail>=0 );. 
121e0 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64       if( payload
121f0 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
12200 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52  il ){.        zR
12210 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20  ec = zData;.    
12220 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
12230 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20  u8*)zData;.     
12240 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12250 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
12260 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12270 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
12280 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20   assert is true 
12290 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 65 78 63  in all cases exc
122a0 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20  ept when.    ** 
122b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
122c0 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75  e has been corru
122d0 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e  pted externally.
122e0 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72  .    **    asser
122f0 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76  t( zRec!=0 || av
12300 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65  ail>=payloadSize
12310 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20   || avail>=9 ); 
12320 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67  */.    szHdr = g
12330 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29  etVarint32((u8*)
12340 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a  zData, offset);.
12350 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
12360 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
12370 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
12380 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
12390 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
123a0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
123b0 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
123c0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
123d0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
123e0 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
123f0 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
12400 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
12410 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
12420 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
12430 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
12440 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
12450 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
12460 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
12470 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
12480 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
12490 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
124a0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
124b0 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
124c0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
124d0 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
124e0 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
124f0 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
12500 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
12510 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
12520 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
12530 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
12540 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
12550 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
12560 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  07 ){.      rc =
12570 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
12580 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
12590 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
125a0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f      }..    /* Co
125b0 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65  mpute in len the
125c0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
125d0 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64   of data we need
125e0 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65   to read in orde
125f0 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20  r.    ** to get 
12600 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75  nField type valu
12610 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61  es.  offset is a
12620 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
12630 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20   this.  But.    
12640 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20  ** nField might 
12650 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79  be significantly
12660 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74   less than the t
12670 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  rue number of co
12680 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20  lumns.    ** in 
12690 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69  the table, and i
126a0 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e  n that case, 5*n
126b0 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65  Field+3 might be
126c0 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66   smaller than of
126d0 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20  fset..    ** We 
126e0 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65  want to minimize
126f0 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f   len in order to
12700 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20   limit the size 
12710 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20  of the memory.  
12720 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c    ** allocation,
12730 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61   especially if a
12740 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12750 65 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65  e file has cause
12760 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20  d offset.    ** 
12770 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e  to be oversized.
12780 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74   Offset is limit
12790 65 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76  ed to 98307 abov
127a0 65 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69  e.  But 98307 mi
127b0 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  ght.    ** still
127c0 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d   exceed Robson m
127d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
127e0 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20   limits on some 
127f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a  configurations..
12800 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d      ** On system
12810 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f  s that cannot to
12820 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d  lerate large mem
12830 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
12840 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20   nField*5+3.    
12850 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62  ** will likely b
12860 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73  e much smaller s
12870 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c  ince nField will
12880 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20   likely be less 
12890 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f  than.    ** 20 o
128a0 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75  r so.  This insu
128b0 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20  res that Robson 
128c0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
128d0 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20  n limits are.   
128e0 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64   ** not exceeded
128f0 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70   even for corrup
12900 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  t database files
12910 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e  ..    */.    len
12920 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b   = nField*5 + 3;
12930 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28  .    if( len > (
12940 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e  int)offset ) len
12950 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a   = (int)offset;.
12960 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46  .    /* The KeyF
12970 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65  etch() or DataFe
12980 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20  tch() above are 
12990 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65  fast and will ge
129a0 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20  t the entire.   
129b0 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
129c0 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e  r in most cases.
129d0 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20    But they will 
129e0 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20  fail to get the 
129f0 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20  complete.    ** 
12a00 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66  record header if
12a10 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
12a20 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20  er does not fit 
12a30 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  on a single page
12a40 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42  .    ** in the B
12a50 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61  -Tree.  When tha
12a60 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73  t happens, use s
12a70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
12a80 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20  mBtree() to.    
12a90 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63  ** acquire the c
12aa0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74  omplete header t
12ab0 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ext..    */.    
12ac0 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61  if( !zRec && ava
12ad0 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20  il<len ){.      
12ae0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a  sMem.flags = 0;.
12af0 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20        sMem.db = 
12b00 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
12b10 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
12b20 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
12b30 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
12b40 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
12b50 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
12b60 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
12b70 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
12b80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
12b90 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
12ba0 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72     }.    zEndHdr
12bb0 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
12bc0 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d  len];.    zIdx =
12bd0 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a   (u8 *)&zData[sz
12be0 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63  Hdr];..    /* Sc
12bf0 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e  an the header an
12c00 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c  d use it to fill
12c10 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20   in the aType[] 
12c20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20  and aOffset[].  
12c30 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54    ** arrays.  aT
12c40 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  ype[i] will cont
12c50 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74  ain the type int
12c60 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74  eger for the i-t
12c70 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20  h.    ** column 
12c80 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77  and aOffset[i] w
12c90 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
12ca0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
12cb0 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a  beginning.    **
12cc0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
12cd0 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  o the start of t
12ce0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
12cf0 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  i-th column.    
12d00 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
12d10 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
12d20 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
12d30 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
12d40 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f    aOffset[i] = o
12d50 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 69  ffset;.        i
12d60 66 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20  f( zIdx[0]<0x80 
12d70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d  ){.          t =
12d80 20 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20   zIdx[0];.      
12d90 20 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20      zIdx++;.    
12da0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12db0 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c       zIdx += sql
12dc0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
12dd0 7a 49 64 78 2c 20 26 74 29 3b 0a 20 20 20 20 20  zIdx, &t);.     
12de0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79     }.        aTy
12df0 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
12e00 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
12e10 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12e20 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
12e30 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69    offset += szFi
12e40 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28  eld;.        if(
12e50 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20   offset<szField 
12e60 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f  ){  /* True if o
12e70 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20  ffset overflows 
12e80 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64  */.          zId
12e90 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b  x = &zEndHdr[1];
12ea0 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49    /* Forces SQLI
12eb0 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72  TE_CORRUPT retur
12ec0 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20  n below */.     
12ed0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12ee0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
12ef0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  e{.        /* If
12f00 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20   i is less that 
12f10 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65  nField, then the
12f20 72 65 20 61 72 65 20 66 65 77 65 72 20 66 69 65  re are fewer fie
12f30 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
12f40 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
12f50 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
12f60 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
12f70 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
12f80 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
12f90 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
12fa0 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
12fb0 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
12fc0 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
12fd0 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
12fe0 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
12ff0 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
13000 74 6f 72 65 20 74 68 65 20 64 65 66 61 75 6c 74  tore the default
13010 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 2a   value.        *
13020 2a 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  * for the column
13030 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65   instead of dese
13040 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75  rializing a valu
13050 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
13060 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
13070 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13080 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
13090 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
130a0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
130b0 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66  Mem);.    sMem.f
130c0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
130d0 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68  ..    /* If we h
130e0 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65  ave read more he
130f0 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77  ader data than w
13100 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  as contained in 
13110 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20  the header,.    
13120 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
13130 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13140 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
13150 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
13160 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f   the.    ** reco
13170 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e  rd, or if the en
13180 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
13190 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
131a0 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64  e before the end
131b0 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
131c0 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20  ecord (when all 
131d0 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c  fields present),
131e0 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65   then we must be
131f0 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a   dealing .    **
13200 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
13210 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f  database..    */
13220 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e  .    if( (zIdx >
13230 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66   zEndHdr) || (of
13240 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64 53 69  fset > payloadSi
13250 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  ze).         || 
13260 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
13270 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61  & offset!=payloa
13280 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  dSize) ){.      
13290 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
132a0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
132b0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
132c0 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
132d0 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75   /* Get the colu
132e0 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  mn information. 
132f0 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
13300 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
13310 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69   .  ** deseriali
13320 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f  ze the value fro
13330 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66  m the record. If
13340 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
13350 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20  zero,.  ** then 
13360 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
13370 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74  ough fields in t
13380 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74  he record to sat
13390 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65  isfy the.  ** re
133a0 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20  quest.  In this 
133b0 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61  case, set the va
133c0 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50  lue NULL or to P
133d0 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20  4 if P4 is.  ** 
133e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
133f0 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a  em object..  */.
13400 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32    if( aOffset[p2
13410 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ] ){.    assert(
13420 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13430 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  ;.    if( zRec )
13440 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
13450 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
13460 73 65 20 77 68 65 72 65 20 74 68 65 20 77 68 6f  se where the who
13470 6c 65 20 72 6f 77 20 66 69 74 73 20 6f 6e 20 61  le row fits on a
13480 20 73 69 6e 67 6c 65 20 70 61 67 65 20 2a 2f 0a   single page */.
13490 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
134a0 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  ease(pDest);.   
134b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
134c0 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
134d0 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
134e0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
134f0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
13500 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72        /* This br
13510 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
13520 79 20 77 68 65 6e 20 74 68 65 20 72 6f 77 20 6f  y when the row o
13530 76 65 72 66 6c 6f 77 73 20 6f 6e 74 6f 20 6d 75  verflows onto mu
13540 6c 74 69 70 6c 65 20 70 61 67 65 73 20 2a 2f 0a  ltiple pages */.
13550 20 20 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b        t = aType[
13560 70 32 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  p2];.      if( (
13570 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
13580 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
13590 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
135a0 30 0a 20 20 20 20 20 20 20 26 26 20 28 28 74 3e  0.       && ((t>
135b0 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
135c0 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
135d0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
135e0 21 3d 30 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  !=0).      ){.  
135f0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
13600 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
13610 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  or the typeof() 
13620 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72  function and for
13630 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
13640 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
13650 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
13660 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20  b.  So we might 
13670 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20  as well use.    
13680 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e      ** bogus con
13690 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
136a0 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74   reading content
136b0 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
136c0 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 20 20  L works.        
136d0 2a 2a 20 66 6f 72 20 74 65 78 74 20 61 6e 64 20  ** for text and 
136e0 62 6c 6f 62 20 61 6e 64 20 77 68 61 74 65 76 65  blob and whateve
136f0 72 20 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c  r is in the payl
13700 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69 61 62  oadSize64 variab
13710 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 69  le.        ** wi
13720 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72  ll work for ever
13730 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a  ything else. */.
13740 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13750 74 3c 31 32 20 3f 20 28 63 68 61 72 2a 29 26 70  t<12 ? (char*)&p
13760 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30  ayloadSize64 : 0
13770 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13780 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c         len = sql
13790 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
137a0 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
137b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
137c0 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
137d0 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
137e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
137f0 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
13800 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
13810 2c 20 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 0a  ,  pC->isIndex,.
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20       &sMem);.   
13850 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13860 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13870 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13880 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  mn_out;.        
13890 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
138a0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
138b0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
138c0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
138d0 2a 29 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73  *)zData, t, pDes
138e0 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
138f0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
13900 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
13910 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
13920 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
13930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13940 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
13950 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
13960 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
13970 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13980 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13990 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
139a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
139b0 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
139c0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
139d0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
139e0 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
139f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13a00 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
13a10 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
13a20 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
13a30 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
13a40 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
13a50 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
13a60 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
13a70 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
13a80 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
13a90 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
13aa0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
13ab0 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
13ac0 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
13ad0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
13ae0 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
13af0 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
13b00 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
13b10 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
13b20 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
13b30 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
13b40 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
13b50 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
13b60 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
13b70 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
13b80 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
13b90 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
13ba0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
13bb0 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
13bc0 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
13bd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13be0 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13bf0 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
13c00 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
13c10 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
13c20 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
13c30 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
13c40 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
13c50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13c60 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
13c70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
13c80 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
13c90 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
13ca0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
13cb0 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
13cc0 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
13cd0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
13ce0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
13cf0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
13d00 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
13d10 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
13d20 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
13d30 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
13d40 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
13d50 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
13d60 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
13d70 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
13d80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13d90 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
13da0 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
13db0 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
13dc0 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
13dd0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
13de0 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
13df0 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
13e00 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
13e10 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
13e20 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
13e30 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
13e40 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
13e50 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
13e60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
13e70 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
13e80 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
13e90 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
13ea0 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
13eb0 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
13ec0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
13ed0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
13ee0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
13ef0 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
13f00 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c  nity(pIn1, cAff,
13f10 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
13f20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
13f30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13f40 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
13f50 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
13f60 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
13f70 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
13f80 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
13f90 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
13fa0 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
13fb0 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
13fc0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
13fd0 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
13fe0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
13ff0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
14000 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
14010 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
14020 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
14030 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14040 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14050 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
14060 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14070 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14080 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14090 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
140a0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
140b0 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
140c0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
140d0 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
140e0 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
140f0 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
14100 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
14110 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
14120 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
14130 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
14140 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
14150 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
14160 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
14170 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
14180 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
14190 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
141a0 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
141b0 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
141c0 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
141d0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
141e0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
141f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14200 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14210 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
14220 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14230 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
14240 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
14250 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
14260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14270 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
14280 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
14290 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
142a0 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
142b0 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
142c0 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
142d0 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
142e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
142f0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
14300 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14310 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14320 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
14330 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14340 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
14350 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
14360 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
14370 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
14380 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
14390 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
143a0 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
143b0 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
143c0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
143d0 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
143e0 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
143f0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14400 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
14410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14420 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14430 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
14440 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
14450 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
14460 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
14470 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
14480 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
14490 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
144a0 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
144b0 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
144c0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
144d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
144e0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
144f0 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ecord[] */.  int
14500 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
14510 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
14520 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
14530 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
14540 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
14550 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
14560 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
14570 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
14580 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
14590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
145d0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
145e0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
145f0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
14600 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
14610 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
14620 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
14630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14670 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
14680 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
14690 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
146a0 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
146b0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
146c0 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
146d0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
146e0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
146f0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
14700 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
14710 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
14720 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
14730 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
14740 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
14750 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
14760 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
14770 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
14780 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
14790 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
147a0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
147b0 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
147c0 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
147d0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
147e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
147f0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
14800 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
14810 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
14820 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14830 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
14840 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
14850 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14860 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
14870 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14880 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
14890 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
148a0 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
148b0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
148c0 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
148d0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
148e0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e  >p2+nField<=p->n
148f0 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  Mem+1 );.  pData
14900 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
14910 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
14920 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
14930 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
14940 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
14950 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
14960 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
14970 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
14980 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
14990 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
149a0 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
149b0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
149c0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
149d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
149e0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
149f0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
14a00 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
14a10 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
14a20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
14a30 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
14a40 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
14a50 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
14a60 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
14a70 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
14a80 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70   */.  for(pRec=p
14a90 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
14aa0 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
14ab0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
14ac0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
14ad0 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
14ae0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
14af0 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
14b00 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
14b10 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
14b20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65     }.    if( pRe
14b30 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72  c->flags&MEM_Zer
14b40 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29  o && pRec->n>0 )
14b50 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
14b60 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
14b70 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
14b80 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
14b90 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14ba0 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
14bb0 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
14bc0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
14bd0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
14be0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e  ial_type);.    n
14bf0 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
14c00 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   nHdr += sqlite3
14c10 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
14c20 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
14c30 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
14c40 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
14c50 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
14c60 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
14c70 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
14c80 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
14c90 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
14ca0 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
14cb0 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
14cc0 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
14cd0 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
14ce0 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
14cf0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
14d00 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65  len ){.      nZe
14d10 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ro = 0;.    }.  
14d20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  }..  /* Add the 
14d30 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76  initial header v
14d40 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20  arint and total 
14d50 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48  the size */.  nH
14d60 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20  dr += nVarint = 
14d70 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
14d80 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56  (nHdr);.  if( nV
14d90 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
14da0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a  intLen(nHdr) ){.
14db0 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a      nHdr++;.  }.
14dc0 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
14dd0 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66  Data-nZero;.  if
14de0 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
14df0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
14e00 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
14e10 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
14e20 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
14e30 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
14e40 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
14e50 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
14e60 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
14e70 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
14e80 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14e90 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
14ea0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
14eb0 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
14ec0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
14ed0 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
14ee0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
14ef0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
14f00 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20  MemGrow() could 
14f10 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
14f20 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
14f30 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
14f40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
14f50 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
14f60 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
14f70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
14f80 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
14f90 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
14fa0 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
14fb0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
14fc0 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
14fd0 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
14fe0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
14ff0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
15000 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61  ec++){.    seria
15010 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
15020 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
15030 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
15040 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  );.    i += putV
15050 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
15060 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
15070 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65  ype);      /* se
15080 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d  rial type */.  }
15090 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
150a0 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
150b0 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65   pRec++){  /* se
150c0 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20  rial data */.   
150d0 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   i += sqlite3Vdb
150e0 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
150f0 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29  Record[i], (int)
15100 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c  (nByte-i), pRec,
15110 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15120 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  }.  assert( i==n
15130 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
15140 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
15150 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
15160 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
15170 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
15180 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
15190 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a  Blob | MEM_Dyn;.
151a0 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
151b0 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
151c0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
151d0 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
151e0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
151f0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
15200 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
15210 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
15220 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
15230 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
15240 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
15250 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
15260 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
15270 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15280 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
15290 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
152a0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
152b0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
152c0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
152d0 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76  es (an integer v
152e0 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62  alue) in the tab
152f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20  le or index .** 
15300 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
15310 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20   P1 in register 
15320 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  P2.*/.#ifndef SQ
15330 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
15340 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75  OUNT.case OP_Cou
15350 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  nt: {         /*
15360 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
15370 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
15380 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
15390 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20  rsr;..  pCrsr = 
153a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
153b0 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  ]->pCursor;.  if
153c0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 29 20  ( ALWAYS(pCrsr) 
153d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
153e0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
153f0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
15400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74   }else{.    nEnt
15410 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f  ry = 0;.  }.  pO
15420 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
15430 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
15440 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
15450 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
15460 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
15470 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
15480 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
15490 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
154a0 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
154b0 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
154c0 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
154d0 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
154e0 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
154f0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
15500 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
15510 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
15520 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
15530 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
15540 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
15550 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
15560 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
15590 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
155a0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
155d0 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
155e0 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
155f0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
15600 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
15610 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
15620 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
15630 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
15640 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
15650 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
15660 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
15670 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
15680 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
15690 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
156a0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
156b0 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
156c0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
156d0 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
156e0 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
156f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
15700 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
15710 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
15720 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
15730 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
15740 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
15750 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
15760 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
15770 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
15780 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
15790 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
157a0 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
157b0 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
157c0 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
157d0 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
157e0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
157f0 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
15800 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
15810 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
15820 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
15830 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
15840 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
15850 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
15860 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
15870 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
15880 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
15890 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
158a0 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
158b0 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
158c0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
158d0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
158e0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f  g, db, "cannot o
158f0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
15900 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
15910 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
15920 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
15930 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15940 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15950 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
15960 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
15970 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
15980 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
15990 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
159a0 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
159b0 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
159c0 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
159d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
159e0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
159f0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
15a00 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
15a10 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
15a20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
15a30 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
15a40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
15a50 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
15a60 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
15a70 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
15a80 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
15a90 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
15aa0 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
15ab0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
15ac0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
15ad0 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
15ae0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
15af0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
15b00 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
15b10 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
15b40 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
15b50 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
15b60 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
15b70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
15b80 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
15b90 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
15ba0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
15bb0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
15bc0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
15bd0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
15be0 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
15bf0 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
15c00 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
15c10 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
15c20 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
15c30 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
15c40 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
15c50 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
15c60 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
15c70 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
15c80 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
15c90 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
15ca0 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
15cb0 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
15cc0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
15cd0 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
15ce0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
15cf0 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
15d00 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
15d10 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
15d20 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
15d30 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
15d40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15d50 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
15d60 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
15d70 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
15d80 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
15d90 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
15da0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
15db0 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
15dc0 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
15dd0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
15de0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
15df0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
15e00 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
15e10 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
15e20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
15e30 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
15e40 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
15e50 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
15e60 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
15e70 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
15e80 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
15e90 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
15ea0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
15eb0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
15ec0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
15ed0 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
15ee0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
15ef0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
15f00 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
15f10 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
15f20 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
15f30 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
15f40 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
15f50 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
15f60 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
15f70 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
15f80 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
15f90 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
15fa0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
15fb0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
15fc0 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
15fd0 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
15fe0 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
15ff0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16000 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
16010 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
16020 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16030 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16040 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
16050 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
16060 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
16070 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
16080 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
16090 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
160a0 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
160b0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
160c0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
160d0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
160e0 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
160f0 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16100 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16110 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b  ogress".      );
16120 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16130 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
16140 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
16150 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
16160 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
16170 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16180 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
16190 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
161a0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
161b0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
161c0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
161d0 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
161e0 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
161f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
16200 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
16210 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
16220 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
16230 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16240 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
16250 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
16260 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16270 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16280 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16290 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
162a0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
162b0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
162c0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
162d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
162e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
162f0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
16300 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
16310 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
16320 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
16330 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
16340 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16350 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16360 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
16370 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16380 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16390 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
163a0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
163b0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
163c0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
163d0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
163e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
163f0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
16400 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
16410 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
16420 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16430 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16440 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
16450 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
16460 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
16470 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16480 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
16490 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
164a0 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  pBt, SQLITE_ABOR
164b0 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  T);.          }.
164c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
164d0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
164e0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
164f0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
16500 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
16510 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
16520 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
16530 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
16540 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16550 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
16560 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16570 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16580 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
16590 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
165a0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
165b0 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
165c0 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
165d0 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
165e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
165f0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
16600 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
16610 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
16620 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
16630 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
16640 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
16650 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
16660 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16670 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
16680 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
16690 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
166a0 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
166b0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
166c0 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
166d0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
166e0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
166f0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
16700 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
16710 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
16720 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
16730 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
16740 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16750 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
16760 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
16770 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
16780 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
16790 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
167a0 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
167b0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
167c0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
167d0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
167e0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
167f0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
16800 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
16810 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
16820 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
16830 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
16840 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
16850 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
16860 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
16870 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
16880 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
16890 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
168a0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
168b0 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
168c0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
168d0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
168e0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
168f0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
16900 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
16910 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
16920 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
16930 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16940 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16950 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
16960 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
16970 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
16980 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
16990 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
169a0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
169b0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
169c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
169d0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
169e0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
169f0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
16a00 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
16a10 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
16a20 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
16a30 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16a40 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
16a50 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
16a60 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
16a70 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
16a80 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
16a90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
16aa0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
16ab0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16ac0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
16ad0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
16ae0 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
16af0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
16b00 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
16b10 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
16b20 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
16b30 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
16b40 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
16b50 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
16b60 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
16b70 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
16b80 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
16b90 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
16ba0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
16bb0 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
16bc0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
16bd0 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
16be0 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
16bf0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
16c00 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
16c10 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
16c20 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
16c30 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
16c40 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
16c50 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
16c60 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
16c70 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
16c80 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
16c90 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
16ca0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
16cb0 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
16cc0 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
16cd0 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
16ce0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
16cf0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16d00 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
16d10 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
16d20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
16d30 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
16d40 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
16d50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16d60 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
16d70 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
16d80 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
16d90 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
16da0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
16db0 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
16dc0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
16dd0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
16de0 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
16df0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
16e00 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
16e10 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
16e20 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
16e30 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
16e40 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
16e50 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
16e60 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
16e70 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
16e80 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
16e90 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
16ea0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
16eb0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
16ec0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16ed0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
16ee0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
16ef0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
16f00 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
16f10 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
16f20 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
16f30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
16f40 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
16f50 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
16f60 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
16f70 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
16f80 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
16f90 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
16fa0 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
16fb0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
16fc0 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
16fd0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
16fe0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
16ff0 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17000 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17010 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17020 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17030 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
17040 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
17050 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17060 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17070 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17080 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17090 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
170a0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
170b0 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
170c0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
170d0 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
170e0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
170f0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17100 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
17110 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
17120 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
17130 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
17140 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17150 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
17160 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
17170 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
17180 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17190 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
171a0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
171b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
171c0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
171d0 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
171e0 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
171f0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17200 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17210 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
17220 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
17230 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
17240 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
17250 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
17260 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17270 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17280 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17290 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
172a0 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
172b0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
172c0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
172d0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
172e0 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
172f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17300 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17310 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
17320 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
17330 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
17340 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
17350 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
17360 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17370 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17380 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
17390 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
173a0 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
173b0 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
173c0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
173d0 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
173e0 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
173f0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
17400 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17410 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
17430 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
17440 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17450 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
17460 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
17470 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
17480 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17490 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
174a0 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  on P1 P2 * * *.*
174b0 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
174c0 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74  nsaction.  The t
174d0 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20  ransaction ends 
174e0 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72  when a Commit or
174f0 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63   Rollback.** opc
17500 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ode is encounter
17510 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  ed.  Depending o
17520 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  n the ON CONFLIC
17530 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a  T setting, the.*
17540 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  * transaction mi
17550 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c  ght also be roll
17560 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72  ed back if an er
17570 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
17580 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
17590 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
175a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
175b0 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
175c0 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
175d0 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
175e0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
175f0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
17600 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
17610 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
17620 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
17630 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
17640 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
17650 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
17660 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
17670 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
17680 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
17690 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
176a0 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52  tarted.  A RESER
176b0 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f  VED lock is.** o
176c0 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64  btained on the d
176d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65  atabase file whe
176e0 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
176f0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
17700 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70  .  No.** other p
17710 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74  rocess can start
17720 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74   another write t
17730 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65  ransaction while
17740 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
17750 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79  n is.** underway
17760 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72  .  Starting a wr
17770 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
17780 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72  also creates a r
17790 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
177a0 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e   A.** write tran
177b0 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
177c0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61  started before a
177d0 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62  ny changes can b
177e0 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a  e made to the.**
177f0 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50   database.  If P
17800 32 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  2 is greater tha
17810 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 32 20  n or equal to 2 
17820 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56  then an EXCLUSIV
17830 45 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c 73  E lock is.** als
17840 6f 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  o obtained on th
17850 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
17860 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17870 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
17880 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65  and the Vdbe.use
17890 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61  sStmtJournal fla
178a0 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68  g is.** true (th
178b0 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  is flag is set i
178c0 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d  f the Vdbe may m
178d0 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20  odify more than 
178e0 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a  one row and may.
178f0 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ** throw an ABOR
17900 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20  T exception), a 
17910 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17920 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62  ction may also b
17930 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72  e opened..** Mor
17940 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  e specifically, 
17950 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
17960 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  saction is opene
17970 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61  d iff the databa
17980 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
17990 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f   is currently no
179a0 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  t in autocommit 
179b0 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72  mode, or if ther
179c0 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61  e are other.** a
179d0 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
179e0 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72  . A statement tr
179f0 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73  ansaction allows
17a00 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64   the changes mad
17a10 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42  e by this.** VDB
17a20 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
17a30 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
17a40 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
17a50 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
17a60 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
17a70 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
17a80 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
17a90 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
17aa0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
17ab0 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
17ac0 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
17ad0 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
17ae0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
17af0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
17b00 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  ad-lock is obtai
17b10 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
17b20 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73  ase file..*/.cas
17b30 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
17b40 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
17b50 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
17b60 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
17b70 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
17b80 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  ly==0 || pOp->p2
17b90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
17ba0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
17bb0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
17bc0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
17bd0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
17be0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
17bf0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
17c00 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
17c10 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
17c20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
17c30 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
17c40 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
17c50 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  >p2);.    if( rc
17c60 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17c70 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
17c80 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
17c90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17ca0 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
17cb0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17cc0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
17cd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17ce0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17cf0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o_error;.    }..
17d00 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
17d10 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  && p->usesStmtJo
17d20 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28  urnal .     && (
17d30 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
17d40 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  0 || db->nVdbeRe
17d50 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20  ad>1) .    ){.  
17d60 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
17d70 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
17d80 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20  s(pBt) );.      
17d90 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  if( p->iStatemen
17da0 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
17db0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
17dc0 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d  tement>=0 && db-
17dd0 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29  >nSavepoint>=0 )
17de0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
17df0 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20  tatement++; .   
17e00 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65       p->iStateme
17e10 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
17e20 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65  int + db->nState
17e30 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ment;.      }.. 
17e40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17e50 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
17e60 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
17e70 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  IN, p->iStatemen
17e80 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t-1);.      if( 
17e90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
17ea0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
17eb0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
17ec0 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
17ed0 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d  tement);.      }
17ee0 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65  ..      /* Store
17ef0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
17f00 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
17f10 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72  se handles defer
17f20 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  red constraint. 
17f30 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e       ** counter.
17f40 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   If the statemen
17f50 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  t transaction ne
17f60 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
17f70 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20   back,.      ** 
17f80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69  the value of thi
17f90 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20  s counter needs 
17fa0 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  to be restored t
17fb0 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d  oo.  */.      p-
17fc0 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20  >nStmtDefCons = 
17fd0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
17fe0 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  s;.    }.  }.  b
17ff0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18000 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
18010 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18020 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
18030 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
18040 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
18050 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
18060 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31  ter P2..** P3==1
18070 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
18080 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69  ersion.  P3==2 i
18090 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
180a0 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20  ormat..** P3==3 
180b0 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
180c0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
180d0 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
180e0 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
180f0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18100 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
18110 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18120 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18130 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
18140 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   tables..**.** T
18150 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
18160 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
18170 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
18180 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
18190 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
181a0 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
181b0 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
181c0 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
181d0 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
181e0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
181f0 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
18200 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
18210 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
18220 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  se */.  int iMet
18230 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
18240 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
18250 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
18260 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
18270 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
18280 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
18290 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
182a0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
182b0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
182c0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
182d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
182e0 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
182f0 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
18300 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
18310 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
18320 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
18330 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
18340 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
18350 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
18360 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
18370 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
18380 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
18390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
183a0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
183b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
183c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
183d0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
183e0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
183f0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
18400 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
18410 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
18420 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
18430 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
18440 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
18450 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
18460 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
18470 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
18480 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
18490 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
184a0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
184b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
184c0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
184d0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
184e0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
184f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18500 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
18510 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
18520 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
18530 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
18540 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
18550 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
18560 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
18570 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
18580 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
18590 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
185a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
185b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
185c0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
185d0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
185e0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
185f0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
18600 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
18610 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
18620 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
18630 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
18640 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
18650 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
18660 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
18670 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
18680 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20  1, 0) );.  pIn3 
18690 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
186a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
186b0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
186c0 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
186d0 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
186e0 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
186f0 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
18700 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
18710 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
18720 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
18730 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
18740 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
18750 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
18760 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
18770 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
18780 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
18790 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
187a0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
187b0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
187c0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
187d0 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
187e0 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
187f0 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
18800 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
18810 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
18820 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
18830 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
18840 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
18850 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
18860 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
18870 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
18880 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
18890 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
188a0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
188b0 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
188c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
188d0 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
188e0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
188f0 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
18900 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
18910 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
18920 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18930 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
18940 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
18950 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18960 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72  ../* Opcode: Ver
18970 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  ifyCookie P1 P2 
18980 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
18990 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ck the value of 
189a0 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20  global database 
189b0 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
189c0 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d   0 (the.** schem
189d0 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d  a version) and m
189e0 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65  ake sure it is e
189f0 71 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74  qual to P2 and t
18a00 68 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72  hat the.** gener
18a10 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e  ation counter on
18a20 20 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d   the local schem
18a30 61 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50  a parse equals P
18a40 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3..**.** P1 is t
18a50 68 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62  he database numb
18a60 65 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f  er which is 0 fo
18a70 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
18a80 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  ase file.** and 
18a90 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68  1 for the file h
18aa0 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  olding temporary
18ab0 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65   tables and some
18ac0 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a   higher number.*
18ad0 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20  * for auxiliary 
18ae0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
18af0 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
18b00 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
18b10 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
18b20 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
18b30 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
18b40 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
18b50 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
18b60 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
18b70 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
18b80 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
18b90 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
18ba0 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
18bb0 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65  ema..**.** Eithe
18bc0 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  r a transaction 
18bd0 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65  needs to have be
18be0 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e  en started or an
18bf0 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a   OP_Open needs.*
18c00 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  * to be executed
18c10 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61   (to establish a
18c20 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f   read lock) befo
18c30 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  re this opcode i
18c40 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f  s.** invoked..*/
18c50 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43  .case OP_VerifyC
18c60 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69  ookie: {.  int i
18c70 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
18c80 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
18c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18ca0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18cb0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18cc0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
18cd0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
18ce0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
18cf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
18d00 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
18d10 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
18d20 31 2c 20 30 29 20 29 3b 0a 20 20 61 73 73 65 72  1, 0) );.  asser
18d30 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
18d40 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
18d50 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
18d60 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
18d70 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
18d80 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
18d90 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
18da0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
18db0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
18dc0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
18dd0 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
18de0 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
18df0 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
18e00 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74  ;.  }.  if( iMet
18e10 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20 69 47  a!=pOp->p2 || iG
18e20 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  en!=pOp->p3 ){. 
18e30 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
18e40 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
18e50 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
18e60 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
18e70 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
18e80 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
18e90 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
18ea0 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
18eb0 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
18ec0 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
18ed0 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
18ee0 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
18ef0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
18f00 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
18f10 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
18f20 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
18f30 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
18f40 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
18f50 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
18f60 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
18f70 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
18f80 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
18f90 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
18fa0 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
18fb0 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
18fc0 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
18fd0 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
18fe0 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
18ff0 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
19000 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
19010 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
19020 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
19030 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
19040 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
19050 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
19060 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
19070 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
19080 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
19090 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
190a0 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
190b0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
190c0 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
190d0 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
190e0 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
190f0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
19100 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
19110 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
19120 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
19130 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
19140 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
19150 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
19160 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
19170 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
19180 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
19190 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
191a0 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
191b0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
191c0 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
191d0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a  Op->p1);.    }..
191e0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
191f0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
19200 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
19210 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19220 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
19230 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
19240 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
19250 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
19260 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
19270 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
19280 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
19290 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
192a0 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
192b0 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
192c0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
192d0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
192e0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
192f0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
19300 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
19310 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
19320 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
19330 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
19340 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
19350 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
19360 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
19370 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
19380 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
19390 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
193a0 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
193b0 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
193c0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
193d0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
193e0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
193f0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
19400 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
19410 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
19420 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19430 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
19440 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
19450 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
19460 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
19470 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
19480 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
19490 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
194a0 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
194b0 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
194c0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
194d0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
194e0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
194f0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
19500 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
19510 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
19520 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
19530 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
19540 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
19550 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
19560 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
19570 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
19580 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
19590 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
195a0 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
195b0 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
195c0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
195d0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
195e0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
195f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19600 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
19610 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
19620 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
19630 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
19640 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
19650 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
19660 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
19670 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
19680 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
19690 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
196a0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
196b0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
196c0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
196d0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
196e0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
196f0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19700 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19710 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
19720 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
19730 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
19740 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
19750 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
19760 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
19770 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19780 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19790 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
197a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
197b0 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
197c0 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74  ee also OpenWrit
197d0 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
197e0 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
197f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
19800 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
19810 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
19820 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
19830 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
19840 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
19850 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
19860 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19870 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
19880 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
19890 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
198a0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
198b0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
198c0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
198d0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
198e0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
198f0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19900 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19910 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19920 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19930 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19940 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19950 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19960 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19970 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19980 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19990 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
199a0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
199b0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
199c0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
199d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
199e0 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
199f0 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
19a00 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
19a10 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
19a20 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
19a30 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
19a40 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19a50 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
19a60 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
19a70 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
19a80 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
19a90 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
19aa0 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
19ab0 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
19ac0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
19ad0 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
19ae0 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
19af0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
19b00 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
19b10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
19b20 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
19b30 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
19b40 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b   OP_OpenWrite: {
19b50 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
19b60 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
19b70 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
19b80 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
19b90 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
19ba0 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
19bb0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
19bc0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70  b;..  assert( (p
19bd0 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50  Op->p5&(OPFLAG_P
19be0 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55  2ISREG|OPFLAG_BU
19bf0 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35  LKCSR))==pOp->p5
19c00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19c10 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
19c20 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
19c30 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p5==0 );.  asser
19c40 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
19c50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19c60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
19c70 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64  nRead || p->read
19c80 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
19c90 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
19ca0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19cb0 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
19cc0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
19cd0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
19ce0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
19cf0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
19d00 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
19d10 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
19d20 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
19d30 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
19d40 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
19d50 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
19d60 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
19d70 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
19d80 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
19d90 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
19da0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
19db0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
19dc0 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
19dd0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19de0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19df0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
19e00 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
19e10 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
19e20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
19e30 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
19e40 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
19e50 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
19e60 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
19e70 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
19e80 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
19e90 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
19ea0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
19eb0 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
19ec0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
19ed0 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e   assert( p2<=p->
19ee0 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32  nMem );.    pIn2
19ef0 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
19f00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
19f10 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
19f20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
19f30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
19f40 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
19f50 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
19f60 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
19f70 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
19f80 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
19f90 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
19fa0 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
19fb0 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
19fc0 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
19fd0 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
19fe0 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
19ff0 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1a000 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1a010 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1a020 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1a030 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1a040 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1a050 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1a060 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1a070 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1a080 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1a090 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29   if( NEVER(p2<2)
1a0a0 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20   ) {.      rc = 
1a0b0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1a0c0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
1a0d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a0e0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
1a0f0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1a100 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1a110 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1a120 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1a130 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e      pKeyInfo->en
1a140 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
1a150 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1a160 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b  yInfo->nField+1;
1a170 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a180 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a190 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1a1a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1a1b0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1a1c0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72  >p1>=0 );.  pCur
1a1d0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1a1e0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1a1f0 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20  ield, iDb, 1);. 
1a200 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
1a210 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1a220 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
1a230 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72  .  pCur->isOrder
1a240 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ed = 1;.  rc = s
1a250 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a260 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
1a270 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
1a280 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
1a290 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1a2a0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1a2b0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1a2c0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1a2d0 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  D );.  sqlite3Bt
1a2e0 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70  reeCursorHints(p
1a2f0 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70  Cur->pCursor, (p
1a300 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1a310 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a  BULKCSR));..  /*
1a320 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
1a330 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
1a340 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
1a350 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68  he only value th
1a360 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  at.  ** sqlite3B
1a370 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79  treeCursor() may
1a380 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54   return is SQLIT
1a390 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72  E_OK. */.  asser
1a3a0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1a3b0 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68   );..  /* Set th
1a3c0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1a3d0 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78  able and isIndex
1a3e0 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76   variables. Prev
1a3f0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1a400 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1a410 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1a420 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1a430 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1a440 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1a450 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1a460 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1a470 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1a480 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1a490 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1a4a0 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1a4b0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1a4c0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1a4d0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1a4e0 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75  4_KEYINFO;.  pCu
1a4f0 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  r->isIndex = !pC
1a500 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  ur->isTable;.  b
1a510 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a520 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
1a530 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  l P1 P2 * P4 P5.
1a540 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1a550 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1a560 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1a570 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1a580 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1a590 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1a5a0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1a5b0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1a5c0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1a5d0 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1a5e0 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1a5f0 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1a600 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1a610 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1a620 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a630 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1a640 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1a650 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1a660 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1a670 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1a680 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1a690 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1a6a0 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1a6b0 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1a6c0 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1a6d0 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1a6e0 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1a6f0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1a700 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1a710 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
1a720 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
1a730 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
1a740 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
1a750 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
1a760 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
1a770 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
1a780 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
1a790 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
1a7a0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
1a7b0 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
1a7c0 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
1a7d0 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
1a7e0 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
1a7f0 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
1a800 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
1a810 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
1a820 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
1a830 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2a  l-table idea..**
1a840 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1a850 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1a860 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1a870 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1a880 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1a890 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1a8a0 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1a8b0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1a8c0 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1a8d0 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1a8e0 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1a8f0 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1a900 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1a910 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1a920 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1a930 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1a940 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1a950 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1a960 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1a970 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1a980 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1a990 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1a9a0 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1a9b0 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1a9c0 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1a9d0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1a9e0 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1a9f0 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1aa00 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1aa10 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1aa20 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1aa30 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1aa40 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1aa50 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1aa60 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1aa70 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1aa80 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1aa90 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1aaa0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1aab0 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1aac0 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1aad0 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1aae0 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1aaf0 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1ab00 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1ab10 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65  IENT_DB;..  asse
1ab20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1ab30 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1ab40 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1ab50 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1ab60 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1ab70 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ab80 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1ab90 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1aba0 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1abb0 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1abc0 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1abf0 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1ac00 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1ac10 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1ac20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1ac30 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1ac40 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1ac50 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1ac60 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1ac70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1ac80 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1ac90 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1aca0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1acb0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1acc0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1acd0 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1ace0 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1acf0 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1ad00 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1ad10 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1ad20 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1ad30 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1ad40 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1ad50 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1ad60 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1ad70 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1ad80 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1ad90 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
1ada0 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
1adb0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1adc0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1add0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1ade0 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1adf0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1ae00 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1ae10 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1ae20 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1ae30 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1ae40 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1ae50 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ae60 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1ae70 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1ae80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ae90 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1aea0 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
1aed0 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
1aee0 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1aef0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
1af00 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1af10 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1af20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
1af30 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
1af40 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1af50 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1af60 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1af70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1af80 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1af90 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1afa0 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
1afb0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
1afc0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1afd0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
1afe0 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
1aff0 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
1b000 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d 3e  RDERED);.  pCx->
1b010 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e  isIndex = !pCx->
1b020 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
1b030 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b040 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
1b050 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1b060 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1b070 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1b080 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1b090 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1b0a0 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1b0b0 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1b0c0 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1b0d0 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1b0e0 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1b0f0 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1b100 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f  rt algorithm..*/
1b110 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1b120 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1b130 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 70 43 78  sor *pCx;..  pCx
1b140 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1b150 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1b160 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1b170 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1b180 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1b190 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1b1a0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1b1b0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1b1c0 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
1b1d0 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65  ;.  pCx->isSorte
1b1e0 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  r = 1;.  rc = sq
1b1f0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1b200 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20  nit(db, pCx);.  
1b210 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b220 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1b230 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
1b240 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1b250 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1b260 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1b270 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1b280 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1b290 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1b2a0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1b2b0 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1b2c0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1b2d0 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 77 68  * register P2 wh
1b2e0 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74  en P5==0.  In ot
1b2f0 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1b300 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1b310 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1b320 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1b330 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1b340 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 57 68  register P2.  Wh
1b350 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74  en P5==1, then t
1b360 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70  he.** row is rep
1b370 72 65 73 65 6e 74 65 64 20 62 79 20 50 33 20 63  resented by P3 c
1b380 6f 6e 73 65 63 75 74 69 76 65 20 72 65 67 69 73  onsecutive regis
1b390 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
1b3a0 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ith P2..**.** A 
1b3b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1b3c0 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1b3d0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1b3e0 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1b3f0 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1b400 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1b410 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1b420 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1b430 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1b440 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1b450 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b460 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1b470 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1b480 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1b490 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1b4a0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1b4b0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1b4c0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1b4d0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1b4e0 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1b4f0 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1b500 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1b510 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1b520 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1b530 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1b540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b550 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
1b560 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1b570 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1b580 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1b590 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1b5a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1b5b0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1b5c0 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1b5d0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1b5e0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1b5f0 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
1b600 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74  = 0;.  pCx->mult
1b610 69 50 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70  iPseudo = pOp->p
1b620 35 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  5;.  break;.}../
1b630 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1b640 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1b650 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1b660 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1b670 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1b680 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1b690 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1b6a0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1b6b0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1b6c0 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1b6d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b6e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b6f0 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1b700 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1b710 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1b720 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1b730 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1b740 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b750 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50  Opcode: SeekGe P
1b760 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b770 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1b780 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1b790 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1b7a0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1b7b0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1b7c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1b7d0 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
1b7e0 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
1b7f0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1b800 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1b810 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1b820 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1b830 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1b840 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1b850 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1b860 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1b870 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1b880 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1b890 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1b8a0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1b8b0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1b8c0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1b8d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1b8e0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1b8f0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1b900 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1b910 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1b920 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1b930 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1b940 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1b950 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1b960 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1b970 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1b980 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1b990 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31  pcode: SeekGt P1
1b9a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1b9b0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1b9c0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1b9d0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1b9e0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1b9f0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1ba00 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1ba10 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1ba20 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1ba30 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ba40 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ba50 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ba60 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1ba70 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1ba80 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1ba90 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1baa0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1bab0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1bac0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1bad0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1bae0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1baf0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1bb00 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1bb10 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1bb20 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1bb30 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1bb40 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1bb50 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1bb60 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1bb70 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1bb80 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1bb90 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1bba0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1bbb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1bbc0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1bbd0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1bbe0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1bbf0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1bc00 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1bc10 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1bc20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1bc30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1bc40 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1bc50 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1bc60 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1bc70 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1bc80 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1bc90 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1bca0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1bcb0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1bcc0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1bcd0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1bce0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1bcf0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1bd00 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1bd10 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1bd20 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1bd30 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1bd40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1bd50 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1bd60 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1bd70 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1bd80 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1bd90 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1bda0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1bdb0 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1bdc0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1bdd0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20   Opcode: SeekLe 
1bde0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1bdf0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1be00 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1be10 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1be20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1be30 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1be40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1be50 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1be60 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1be70 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1be80 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1be90 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1bea0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1beb0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1bec0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1bed0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1bee0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1bef0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1bf00 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1bf10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1bf20 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1bf30 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1bf40 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1bf50 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1bf60 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1bf70 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1bf80 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1bf90 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1bfa0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1bfb0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1bfc0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1bfd0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1bfe0 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
1bff0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1c000 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74  /.case OP_SeekLt
1c010 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1c020 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1c030 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20  P_SeekLe:       
1c040 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c050 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65  /.case OP_SeekGe
1c060 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1c070 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1c080 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20  P_SeekGt: {     
1c090 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c0a0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1c0b0 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1c0c0 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1c0d0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1c0e0 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1c0f0 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1c100 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1c110 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1c120 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c130 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c140 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c150 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1c160 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1c170 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c180 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c1a0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1c1b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1c1c0 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53  P_SeekLe == OP_S
1c1d0 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73  eekLt+1 );.  ass
1c1e0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d  ert( OP_SeekGe =
1c1f0 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b  = OP_SeekLt+2 );
1c200 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c210 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGt == OP_SeekL
1c220 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+3 );.  assert(
1c230 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1c240 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1c250 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1c260 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1c270 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1c280 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1c290 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1c2a0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1c2b0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1c2c0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1c2d0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1c2e0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1c2f0 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1c300 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1c310 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1c320 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1c330 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1c340 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1c350 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1c360 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1c370 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
1c380 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1c390 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
1c3a0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1c3b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1c3c0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
1c3d0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1c3e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c3f0 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1c400 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1c410 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1c420 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
1c430 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1c440 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1c450 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1c460 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1c470 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1c480 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1c490 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1c4a0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1c4b0 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1c4c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1c4d0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1c4e0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1c4f0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1c500 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1c510 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
1c520 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1c530 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1c540 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1c550 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c560 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1c570 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1c580 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
1c590 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
1c5a0 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
1c5b0 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1c5c0 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
1c5d0 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
1c5e0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
1c5f0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1c600 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
1c610 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
1c620 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1c630 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1c640 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1c650 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1c660 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
1c670 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
1c680 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
1c690 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
1c6a0 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
1c6b0 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
1c6c0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
1c6d0 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
1c6e0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
1c6f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1c700 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1c710 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1c720 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1c730 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1c750 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1c760 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  rst(pC->pCursor,
1c770 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1c780 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1c790 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1c7a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c7b0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1c7c0 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1c7d0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1c7e0 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc<=OP_SeekLe 
1c7f0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1c800 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1c810 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1c820 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1c830 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1c840 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1c850 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1c860 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c870 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c880 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1c8a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c8b0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1c8d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c8e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c8f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1c900 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1c910 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1c920 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1c930 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1c940 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1c950 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1c960 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1c970 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1c980 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1c990 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1c9a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1c9b0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1c9c0 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1c9d0 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1c9e0 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1c9f0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1ca00 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1ca10 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1ca20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1ca30 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1ca40 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1ca50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1ca60 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1ca70 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1ca80 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1ca90 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1caa0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1cab0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1cac0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1cad0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cae0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1caf0 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1cb00 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1cb10 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1cb20 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1cb30 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1cb40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1cb50 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1cb60 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1cb70 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1cb80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1cb90 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1cba0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1cbb0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1cbc0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1cbd0 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1cbe0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1cbf0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1cc00 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1cc10 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1cc20 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1cc30 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63       **   if( oc
1cc40 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
1cc50 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
1cc60 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66        **     r.f
1cc70 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1cc80 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a  INCRKEY;.      *
1cc90 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20  *   }else{.     
1cca0 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1ccb0 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 0;.      **   
1ccc0 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  }.      */.     
1ccd0 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28   r.flags = (u8)(
1cce0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1ccf0 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1cd00 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1cd10 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1cd20 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1cd30 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1cd40 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1cd50 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1cd60 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLe || r.flags==
1cd70 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1cd80 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1cd90 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1cda0 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1cdb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1cdc0 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c!=OP_SeekLt || 
1cdd0 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20  r.flags==0 );.. 
1cde0 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61       r.aMem = &a
1cdf0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1ce00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1ce10 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1ce20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1ce30 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1ce40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1ce50 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1ce60 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70 61  endif.      Expa
1ce70 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1ce80 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ce90 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1cea0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1ceb0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1cec0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1ced0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1cee0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1cef0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1cf00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1cf10 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1cf20 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
1cf30 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1cf40 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1cf50 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1cf60 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1cf70 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
1cf80 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1cf90 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1cfa0 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1cfb0 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1cfc0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1cfd0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1cfe0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1cff0 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1d000 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20   oc==OP_SeekGt) 
1d010 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1d020 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1d030 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d040 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1d050 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d060 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d070 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d080 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1d090 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
1d0a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
1d0b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1d0c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1d0d0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1d0e0 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1d0f0 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69  eekLe );.      i
1d100 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1d110 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1d120 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekLt) ){.       
1d130 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d140 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1d150 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1d160 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1d170 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1d180 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d190 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1d1a0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d1b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1d1c0 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69         /* res mi
1d1d0 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1d1e0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1d1f0 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1d200 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a  ck to.        **
1d210 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1d220 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1d230 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73    */.        res
1d240 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1d250 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1d260 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1d270 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1d280 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  p2>0 );.    if( 
1d290 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
1d2a0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1d2b0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1d2c0 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1d2d0 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
1d2e0 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
1d2f0 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
1d300 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
1d310 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
1d320 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
1d330 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
1d340 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
1d350 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
1d360 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1d370 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
1d380 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
1d390 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d3a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1d3b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1d3c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d3d0 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1d3e0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1d3f0 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1d400 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1d410 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1d420 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1d430 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1d440 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1d450 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1d460 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1d470 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1d480 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1d490 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1d4a0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1d4b0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1d4c0 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1d4d0 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1d4e0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1d4f0 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1d500 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1d510 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1d520 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1d530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d540 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d550 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d560 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d570 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d580 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1d590 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1d5a0 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1d5b0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1d5c0 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1d5d0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1d5e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1d5f0 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  >p2];.    pC->mo
1d600 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1d610 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1d620 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn2);.    pC->
1d630 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d640 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1d650 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1d660 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  }.  break;.}.  .
1d670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1d680 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1d690 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1d6a0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d6b0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1d6c0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1d6d0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1d6e0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1d6f0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1d700 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1d710 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1d720 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1d730 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1d740 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1d750 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1d760 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1d770 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1d780 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1d790 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1d7a0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1d7b0 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1d7c0 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1d7d0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1d7e0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f  tching entry..*/
1d7f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1d800 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1d810 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1d820 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1d830 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1d840 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1d850 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1d860 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1d870 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1d880 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1d890 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1d8a0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1d8b0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1d8c0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1d8d0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1d8e0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1d8f0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1d900 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1d910 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1d920 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1d930 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1d940 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1d950 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1d960 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1d970 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1d980 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1d990 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1d9a0 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1d9b0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1d9c0 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1d9d0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1d9e0 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1d9f0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1da00 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1da10 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1da20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1da30 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1da40 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1da50 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1da60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1da70 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1da80 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1da90 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1daa0 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
1dab0 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
1dac0 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1dad0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1dae0 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1daf0 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1db00 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1db10 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1db20 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *3 + 7];..#ifdef
1db30 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1db40 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
1db50 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  nt++;.#endif..  
1db60 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1db70 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1db80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1db90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1dba0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dbb0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1dbc0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1dbd0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1dbe0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1dbf0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1dc00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
1dc10 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1dc20 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61  or!=0) ){..    a
1dc30 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1dc40 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
1dc50 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
1dc60 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1dc70 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1dc80 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1dc90 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1dca0 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ;.      r.aMem =
1dcb0 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51   pIn3;.#ifdef SQ
1dcc0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1dcd0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1dce0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1dcf0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1dd00 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1dd10 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
1dd20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1dd30 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
1dd40 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64 78  ATCH;.      pIdx
1dd50 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65  Key = &r;.    }e
1dd60 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 64 78 4b  lse{.      pIdxK
1dd70 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1dd80 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1dd90 6f 72 64 28 0a 20 20 20 20 20 20 20 20 20 20 70  ord(.          p
1dda0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1ddb0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1ddc0 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1ddd0 20 20 20 20 20 20 29 3b 20 0a 20 20 20 20 20 20        ); .      
1dde0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1ddf0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1de00 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1de10 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1de20 6f 62 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ob );.      asse
1de30 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1de40 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1de50 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1de60 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1de70 64 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  d */.      sqlit
1de80 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1de90 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1dea0 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1deb0 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  z, pIdxKey);.   
1dec0 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1ded0 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1dee0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1def0 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1df00 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1df10 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1df20 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1df30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1df40 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1df50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
1df60 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b  Free(db, pFree);
1df70 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1df80 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1df90 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1dfa0 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1dfb0 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1dfc0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1dfd0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1dfe0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1dff0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e000 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1e010 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1e020 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1e030 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1e040 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1e050 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1e060 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1e070 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e080 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1e0a0 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1e0b0 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1e0c0 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1e0d0 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20   index b-tree - 
1e0e0 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20  that is to say, 
1e0f0 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a  a btree which.**
1e100 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65   no data and whe
1e110 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20 72  re the key are r
1e120 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64  ecords generated
1e130 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1e140 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69  d with.** the li
1e150 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74  st field being t
1e160 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1e170 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1e180 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  at the index.** 
1e190 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e  entry refers to.
1e1a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1e1b0 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1e1c0 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1e1d0 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74  d number. Call t
1e1e0 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e  his record .** n
1e1f0 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74 65  umber R. Registe
1e200 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72 73  r P4 is the firs
1e210 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20  t in a set of N 
1e220 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73  contiguous regis
1e230 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b  ters.** that mak
1e240 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64  e up an unpacked
1e250 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20   index key that 
1e260 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
1e270 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1e280 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61  he value of N ca
1e290 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72  n be inferred fr
1e2a0 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e  om the cursor. N
1e2b0 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f   includes the ro
1e2c0 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70  wid.** value app
1e2d0 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  ended to the end
1e2e0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72 65   of the index re
1e2f0 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64  cord. This rowid
1e300 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72   value may.** or
1e310 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20   may not be the 
1e320 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a  same as R..**.**
1e330 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e   If any of the N
1e340 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1e350 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73 74  ning with regist
1e360 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  er P4 contains a
1e370 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20   NULL.** value, 
1e380 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1e390 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74   to P2..**.** Ot
1e3a0 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e  herwise, this in
1e3b0 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
1e3c0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f   if cursor P1 co
1e3d0 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a  ntains an entry.
1e3e0 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69 72  ** where the fir
1e3f0 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20  st (N-1) fields 
1e400 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72 6f  match but the ro
1e410 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  wid value at the
1e420 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69   end.** of the i
1e430 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f  ndex entry is no
1e440 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69 73  t R. If there is
1e450 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1e460 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a  control jumps.**
1e470 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
1e480 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  P2. Otherwise, t
1e490 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1e4a0 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1e4b0 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f  x.** entry is co
1e4c0 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65 72  pied to register
1e4d0 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20   P3 and control 
1e4e0 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1e4f0 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
1e500 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1e510 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e520 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
1e530 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
1e540 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
1e550 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e560 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56  */.  u16 ii;.  V
1e570 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1e580 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e590 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  r;.  u16 nField;
1e5a0 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55  .  Mem *aMx;.  U
1e5b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65    /* B-Tree inde
1e5e0 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a  x search key */.
1e5f0 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20    i64 R;        
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74       /* Rowid st
1e620 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1e630 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d   P3 */..  pIn3 =
1e640 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e650 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70  .  aMx = &aMem[p
1e660 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1e670 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1e680 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1e690 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1e6a0 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1e6b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e6c0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1e6d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e6e0 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1e6f0 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1e700 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e710 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e720 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e730 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1e740 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1e750 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1e760 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1e770 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1e780 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1e790 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1e7a0 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1e7b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e7c0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1e7d0 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1e7e0 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1e7f0 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1e800 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1e810 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1e820 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1e830 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1e840 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1e850 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1e860 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mx[ii].flags & M
1e870 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
1e880 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e890 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  1;.      pCrsr =
1e8a0 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
1e8b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1e8c0 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64  ert( (aMx[nField
1e8d0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1e8e0 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  ll)==0 );..  if(
1e8f0 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
1e900 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65   /* Populate the
1e910 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1e920 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79  y. */.    r.pKey
1e930 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79  Info = pCx->pKey
1e940 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1e950 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b  ld = nField + 1;
1e960 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
1e970 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1e980 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65  EARCH;.    r.aMe
1e990 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65 66 20  m = aMx;.#ifdef 
1e9a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1e9b0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1e9c0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1e9d0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1e9e0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1e9f0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]) ); }.#endif..
1ea00 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74      /* Extract t
1ea10 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72  he value of R fr
1ea20 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  om register P3. 
1ea30 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1ea40 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1ea50 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70  pIn3);.    R = p
1ea60 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f  In3->u.i;..    /
1ea70 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54  * Search the B-T
1ea80 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f  ree index. If no
1ea90 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1eaa0 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75  ord is found, ju
1eab0 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e  mp.    ** to P2.
1eac0 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79   Otherwise, copy
1ead0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1eae0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  e conflicting re
1eaf0 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72  cord to.    ** r
1eb00 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66  egister P3 and f
1eb10 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1eb20 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1eb30 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20  ion.  */.    rc 
1eb40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1eb50 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1eb60 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70  sr, &r, 0, 0, &p
1eb70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b  Cx->seekResult);
1eb80 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67  .    if( (r.flag
1eb90 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s & UNPACKED_PRE
1eba0 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72  FIX_SEARCH) || r
1ebb0 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20  .rowid==R ){.   
1ebc0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1ebd0 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
1ebe0 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20        pIn3->u.i 
1ebf0 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d  = r.rowid;.    }
1ec00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1ec10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1ec20 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1ec30 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65   *.**.** Use the
1ec40 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1ec50 73 74 65 72 20 50 33 20 61 73 20 61 6e 20 69 6e  ster P3 as an in
1ec60 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61  teger key.  If a
1ec70 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68   record .** with
1ec80 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e   that key does n
1ec90 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c  ot exist in tabl
1eca0 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75  e of P1, then ju
1ecb0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
1ecc0 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73   the record does
1ecd0 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c   exist, then fal
1ece0 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20  l through.  The 
1ecf0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a  cursor is left .
1ed00 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1ed10 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
1ed20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
1ed30 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
1ed40 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  ween this operat
1ed50 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64  ion and NotFound
1ed60 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a   is that this.**
1ed70 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d   operation assum
1ed80 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e  es the key is an
1ed90 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61   integer and tha
1eda0 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65 20  t P1 is a table 
1edb0 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f  whereas.** NotFo
1edc0 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20  und assumes key 
1edd0 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  is a blob constr
1ede0 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52  ucted from MakeR
1edf0 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20  ecord and.** P1 
1ee00 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a  is an index..**.
1ee10 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ee20 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73  nd, NotFound, Is
1ee30 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1ee40 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1ee50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1ee60 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
1ee70 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1ee80 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1ee90 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
1eea0 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
1eeb0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1eec0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1eed0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1eee0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1eef0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ef00 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1ef10 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1ef20 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1ef30 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1ef40 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1ef50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1ef60 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1ef70 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1ef80 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
1ef90 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
1efa0 3d 30 29 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  =0) ){.    res =
1efb0 20 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   0;.    iKey = p
1efc0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63  In3->u.i;.    rc
1efd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1efe0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1eff0 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1f000 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1f010 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33  lastRowid = pIn3
1f020 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72  ->u.i;.    pC->r
1f030 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65  owidIsValid = re
1f040 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
1f050 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1f060 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1f070 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1f080 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  E;.    pC->defer
1f090 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1f0a0 20 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b     if( res!=0 ){
1f0b0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1f0c0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61  >p2 - 1;.      a
1f0d0 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1f0e0 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1f0f0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b    }.    pC->seek
1f100 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
1f110 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1f120 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
1f130 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70  an attempt to op
1f140 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72  en a read cursor
1f150 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   on the .    ** 
1f160 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
1f170 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ble returns SQLI
1f180 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f  TE_EMPTY..    */
1f190 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1f1a0 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1f1b0 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1f1c0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  lid==0 );.    pC
1f1d0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
1f1e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f1f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1f200 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1f210 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  *.**.** Find the
1f220 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
1f230 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f240 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1f250 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
1f260 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
1f270 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1f280 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
1f290 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
1f2a0 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
1f2b0 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
1f2c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
1f2d0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1f2e0 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
1f2f0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
1f300 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
1f310 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f320 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f330 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1f340 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
1f350 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
1f360 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
1f370 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
1f380 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
1f390 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
1f3a0 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
1f3b0 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
1f3c0 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1f3d0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
1f3e0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
1f3f0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
1f400 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
1f410 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
1f420 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
1f430 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
1f440 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
1f450 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
1f460 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
1f470 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1f480 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
1f490 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
1f4a0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
1f4b0 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
1f4c0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
1f4d0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
1f4e0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
1f4f0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
1f500 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1f510 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1f520 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
1f530 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
1f540 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
1f550 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
1f560 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
1f570 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
1f580 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
1f590 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
1f5a0 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
1f5b0 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
1f5c0 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
1f5d0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
1f5e0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
1f5f0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
1f600 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
1f610 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
1f620 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
1f630 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
1f640 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
1f650 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
1f660 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1f670 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
1f680 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1f690 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
1f6a0 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
1f6b0 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
1f6c0 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
1f6d0 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
1f6e0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
1f6f0 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1f700 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
1f710 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
1f720 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
1f730 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
1f740 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
1f750 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
1f760 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
1f770 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
1f780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1f790 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
1f7a0 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
1f7b0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
1f7c0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
1f7d0 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
1f7e0 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
1f7f0 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
1f800 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
1f810 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f820 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f830 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1f840 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f850 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f860 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70  );.  if( NEVER(p
1f870 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29  C->pCursor==0) )
1f880 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
1f890 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
1f8a0 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
1f8b0 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
1f8c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1f8d0 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
1f8e0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1f8f0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
1f900 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
1f910 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
1f920 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
1f930 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1f940 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1f950 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1f960 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1f970 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1f980 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1f990 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1f9a0 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1f9b0 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1f9c0 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1f9d0 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1f9e0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1f9f0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1fa00 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1fa10 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1fa20 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1fa30 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1fa40 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1fa50 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1fa60 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1fa70 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1fa80 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1fa90 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1faa0 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1fab0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1fac0 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1fad0 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1fae0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1faf0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1fb00 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1fb10 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1fb20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1fb30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
1fb40 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1fb50 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
1fb60 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1fb70 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1fb80 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1fb90 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1fba0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1fbb0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1fbc0 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1fbd0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1fbe0 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1fbf0 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1fc00 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1fc10 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1fc20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1fc30 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1fc40 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1fc50 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1fc60 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1fc70 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1fc80 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1fc90 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1fca0 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1fcb0 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1fcc0 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1fcd0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1fce0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1fcf0 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1fd00 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1fd10 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1fd20 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1fd30 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1fd40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1fd50 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1fd60 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1fd70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fd80 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1fd90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1fda0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1fdb0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1fdc0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1fdd0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1fde0 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1fdf0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1fe00 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1fe10 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1fe20 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
1fe30 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
1fe40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1fe50 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1fe60 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1fe70 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1fe80 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1fe90 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
1fea0 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
1feb0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1fec0 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
1fed0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1fee0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1fef0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1ff00 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1ff10 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1ff20 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1ff30 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1ff40 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ff50 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1ff60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ff70 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1ff80 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1ff90 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1ffa0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1ffb0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1ffc0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1ffd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1ffe0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1fff0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
20000 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
20010 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
20020 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
20030 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
20040 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
20050 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
20060 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
20070 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
20080 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
20090 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
200a0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
200b0 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
200c0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
200d0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
200e0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
200f0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20100 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20110 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
20120 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20130 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
20140 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
20150 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
20160 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
20170 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
20180 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
20190 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
201a0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
201b0 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
201c0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
201d0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
201e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
201f0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
20200 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20210 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
20220 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
20230 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
20240 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
20250 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
20260 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
20270 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
20280 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
20290 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
202a0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
202b0 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
202c0 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
202d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
202e0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
202f0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
20300 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
20310 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
20320 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
20330 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
20340 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
20350 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
20360 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
20370 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
20380 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
20390 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
203a0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
203b0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
203c0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
203d0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
203e0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
203f0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
20400 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
20410 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
20420 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
20430 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
20440 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
20450 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
20460 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
20470 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
20480 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
20490 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
204a0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
204b0 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
204c0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
204d0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
204e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
204f0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
20500 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
20510 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
20520 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
20550 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
20560 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
20570 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
20580 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
20590 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
205a0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
205b0 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20   lastRowid;.    
205c0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
205d0 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
205e0 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
205f0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b  tive */.      v+
20600 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20610 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63  -zero */.      c
20620 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68  nt = 0;.      wh
20630 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71  ile(   ((rc = sq
20640 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20650 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
20660 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
20670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206a0 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
206b0 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
206c0 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
206d0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
206e0 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20  ++cnt<100)){.   
206f0 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f       /* collisio
20700 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20  n - try another 
20710 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a  random rowid */.
20720 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20730 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
20740 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
20750 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a     if( cnt<5 ){.
20760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79            /* try
20770 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20   "small" random 
20780 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69  rowids for the i
20790 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20  nitial attempts 
207a0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  */.          v &
207b0 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
207c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
207d0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
207e0 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
207f0 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
20800 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
20810 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b     }.        v++
20820 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
20830 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  zero */.      }.
20840 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20850 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
20860 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
20870 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20880 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
20890 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
208a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
208b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
208c0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
208d0 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
208e0 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
208f0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
20900 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20910 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
20920 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
20930 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20940 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20950 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
20960 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
20970 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
20980 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
20990 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  5.**.** Write an
209a0 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
209b0 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
209c0 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
209d0 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
209e0 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
209f0 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
20a00 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
20a10 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
20a20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
20a30 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
20a40 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
20a50 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
20a60 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
20a70 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
20a80 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
20a90 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
20aa0 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
20ab0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
20ac0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
20ad0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
20ae0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
20af0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
20b00 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
20b10 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
20b20 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
20b30 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
20b40 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
20b50 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
20b60 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
20b70 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
20b80 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
20b90 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
20ba0 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
20bb0 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
20bc0 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
20bd0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20be0 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
20bf0 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
20c00 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
20c10 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
20c20 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
20c30 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
20c40 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
20c50 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
20c60 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
20c70 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
20c80 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
20c90 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
20ca0 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
20cb0 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
20cc0 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
20cd0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
20ce0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
20cf0 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
20d00 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
20d10 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
20d20 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
20d30 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
20d40 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
20d50 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
20d60 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
20d70 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
20d80 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
20d90 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
20da0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
20db0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
20dc0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
20dd0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
20de0 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
20df0 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
20e00 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
20e10 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
20e20 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
20e30 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
20e40 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
20e50 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
20e60 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
20e70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
20e80 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
20e90 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
20ea0 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
20eb0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
20ec0 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
20ed0 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
20ee0 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
20ef0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
20f00 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
20f10 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
20f20 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
20f30 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
20f40 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
20f50 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
20f60 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
20f70 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
20f80 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
20f90 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
20fa0 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
20fb0 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
20fc0 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
20fd0 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
20fe0 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
20ff0 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
21000 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
21010 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
21020 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
21030 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
21040 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
21050 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
21060 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
21070 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
21080 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
21090 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
210a0 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
210b0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
210c0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
210d0 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
210e0 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
210f0 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
21100 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
21110 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
21120 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
21130 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
21140 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
21150 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
21160 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
21170 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
21180 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
21190 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
211a0 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
211b0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
211c0 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
211d0 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
211e0 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
211f0 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
21200 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
21210 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
21220 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
21230 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
21240 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
21250 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
21260 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
21270 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65  eger ROWID or ke
21280 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  y for the record
21290 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
212a0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
212b0 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
212c0 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
212d0 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
212e0 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
212f0 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a  nZero;        /*
21300 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d   Number of zero-
21310 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20  bytes to append 
21320 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
21330 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
21340 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
21350 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
21360 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
21370 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
21380 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
21390 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
213a0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
213b0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
213c0 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e  zTbl; /* Table n
213d0 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
213e0 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e opdate hook */
213f0 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
21400 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
21410 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
21420 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
21430 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
21440 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
21450 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
21460 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21470 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21480 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
21490 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
214a0 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
214b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
214c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
214d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
214e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
214f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21500 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
21510 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21520 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
21530 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
21540 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
21550 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
21560 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
21570 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
21580 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
21590 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
215a0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
215b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
215c0 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
215d0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
215e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
215f0 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
21600 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
21610 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21620 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21630 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
21640 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
21650 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
21660 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
21670 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
21680 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
21690 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
216a0 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
216b0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
216c0 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
216d0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
216e0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
216f0 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
21700 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
21710 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
21720 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
21730 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
21740 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
21750 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
21760 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
21770 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
21780 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
21790 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
217a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
217b0 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
217c0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
217d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
217e0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
217f0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
21800 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
21810 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
21820 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
21830 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
21840 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21860 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
21870 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
21880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21890 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
218a0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
218b0 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
218c0 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
218d0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
218e0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
218f0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21900 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21910 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
21920 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
21930 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
21940 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
21950 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
21960 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
21970 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
21980 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
21990 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
219a0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
219b0 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
219c0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
219d0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
219e0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
219f0 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
21a00 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21a10 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
21a20 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21a30 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
21a40 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
21a50 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
21a60 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
21a70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
21a80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
21a90 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
21aa0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
21ab0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
21ac0 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
21ad0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
21ae0 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
21af0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
21b00 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21b10 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
21b20 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
21b30 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
21b40 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
21b50 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
21b60 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
21b70 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
21b80 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
21b90 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
21ba0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
21bb0 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
21bc0 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
21bd0 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
21be0 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
21bf0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
21c00 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
21c10 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
21c20 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
21c30 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
21c40 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
21c50 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
21c60 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
21c70 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
21c80 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
21c90 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
21ca0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
21cb0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
21cc0 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
21cd0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
21ce0 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
21cf0 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
21d00 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
21d10 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
21d20 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
21d30 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
21d40 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
21d50 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
21d60 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
21d70 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
21d80 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
21d90 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
21da0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
21db0 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
21dc0 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
21dd0 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
21de0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
21df0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21e00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21e10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21e20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21e30 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21e40 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
21e50 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
21e60 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
21e70 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
21e80 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
21e90 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
21ea0 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
21eb0 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
21ec0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
21ed0 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
21ee0 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
21ef0 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
21f00 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
21f10 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
21f20 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21f30 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
21f40 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
21f50 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
21f60 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
21f70 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
21f80 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
21f90 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
21fa0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
21fb0 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
21fc0 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
21fd0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
21fe0 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
21ff0 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
22000 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
22010 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
22020 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
22030 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
22040 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
22050 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
22060 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
22070 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
22080 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
22090 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
220a0 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
220b0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
220c0 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
220d0 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
220e0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
220f0 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
22100 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
22110 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
22120 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
22130 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
22140 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
22150 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
22160 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22170 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
22180 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
22190 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
221a0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
221b0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
221c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
221d0 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
221e0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
221f0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
22200 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
22210 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
22220 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
22230 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22240 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
22250 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
22260 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
22270 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
22280 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22290 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
222a0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
222b0 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
222c0 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
222d0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
222e0 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
222f0 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
22300 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
22310 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
22320 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
22330 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
22340 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
22350 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
22360 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
22370 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
22380 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
22390 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
223a0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
223b0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
223c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
223d0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
223e0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
223f0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
22400 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
22410 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
22420 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
22430 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
22440 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
22450 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
22460 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
22470 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
22480 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
22490 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
224a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
224b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
224c0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
224d0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
224e0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
224f0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
22500 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
22510 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
22520 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
22530 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  3.**.** P1 is a 
22540 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
22550 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
22560 63 6f 6d 70 61 72 65 73 20 74 68 65 20 72 65 63  compares the rec
22570 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20  ord blob in .** 
22580 72 65 67 69 73 74 65 72 20 50 33 20 77 69 74 68  register P3 with
22590 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
225a0 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
225b0 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
225c0 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78  ts to..** If, ex
225d0 63 6c 75 64 69 6e 67 20 74 68 65 20 72 6f 77 69  cluding the rowi
225e0 64 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  d fields at the 
225f0 65 6e 64 2c 20 74 68 65 20 74 77 6f 20 72 65 63  end, the two rec
22600 6f 72 64 73 20 61 72 65 20 61 20 6d 61 74 63 68  ords are a match
22610 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67  ,.** fall throug
22620 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
22630 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72  struction. Other
22640 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  wise, jump to in
22650 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
22660 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
22670 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
22680 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
22690 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70  t res;..  pC = p
226a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
226b0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
226c0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 70 49  rter(pC) );.  pI
226d0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
226e0 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  p3];.  rc = sqli
226f0 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
22700 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 26  pare(pC, pIn3, &
22710 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73 20  res);.  if( res 
22720 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
22730 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
22740 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
22750 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
22760 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
22770 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
22780 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
22790 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
227a0 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
227b0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
227c0 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
227d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
227e0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
227f0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
22800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22820 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a 20 20  ->isSorter );.  
22830 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22840 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
22850 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
22860 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
22870 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
22880 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
22890 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
228a0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
228b0 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
228c0 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
228d0 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
228e0 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
228f0 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
22900 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22910 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
22920 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22930 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
22940 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
22950 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
22960 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
22970 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
22980 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
22990 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
229a0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
229b0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
229c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
229d0 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
229e0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
229f0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22a00 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
22a10 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22a20 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
22a30 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
22a40 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
22a50 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
22a60 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67   onto the P3 reg
22a70 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
22a80 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
22a90 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22aa0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
22ab0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22ac0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
22ad0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
22ae0 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
22af0 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
22b00 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
22b10 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
22b20 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
22b30 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
22b40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22b50 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
22b60 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34  ;.  u32 n;.  i64
22b70 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   n64;..  pOut = 
22b80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
22b90 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
22ba0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
22bb0 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77  /* Note that Row
22bc0 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20  Key and RowData 
22bd0 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74  are really exact
22be0 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74  ly the same inst
22bf0 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73  ruction */.  ass
22c00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22c10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22c20 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22c30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22c40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
22c50 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20 29 3b 0a  >isSorter==0 );.
22c60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22c70 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
22c80 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61  code!=OP_RowData
22c90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22ca0 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70  ->isIndex || pOp
22cb0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
22cc0 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
22cd0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22ce0 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
22cf0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22d00 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
22d10 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
22d20 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22d30 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
22d40 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
22d50 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
22d60 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
22d70 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
22d80 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
22d90 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
22da0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
22db0 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
22dc0 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
22dd0 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
22de0 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
22df0 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
22e00 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
22e10 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
22e20 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
22e30 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
22e40 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22e50 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
22e60 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
22e70 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
22e80 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
22e90 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
22ea0 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
22eb0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22ec0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22ed0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22ee0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22ef0 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
22f00 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
22f10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
22f20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
22f30 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
22f40 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
22f50 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
22f60 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
22f70 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
22f80 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
22f90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
22fa0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22fb0 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
22fc0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
22fd0 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
22fe0 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
22ff0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
23000 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
23010 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
23020 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
23030 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
23040 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
23050 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
23060 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
23070 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
23080 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
23090 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
230a0 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
230b0 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
230c0 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
230d0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
230e0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
230f0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
23100 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
23110 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
23120 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
23130 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
23140 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
23150 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
23160 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
23170 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
23180 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
23190 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
231a0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
231b0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
231c0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
231d0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
231e0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
231f0 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
23200 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
23210 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
23220 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
23230 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
23240 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
23250 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
23260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23270 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
23280 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
23290 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
232a0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
232b0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
232c0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
232d0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
232e0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
232f0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
23300 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
23310 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
23320 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
23330 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
23340 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
23350 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
23360 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
23370 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
23380 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
23390 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
233a0 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
233b0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
233c0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
233d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
233e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
233f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23400 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
23410 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
23420 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
23430 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
23440 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23450 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23460 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
23470 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23480 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23490 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
234a0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
234b0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
234c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
234d0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
234e0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
234f0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23500 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
23510 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
23520 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
23530 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
23540 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
23550 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
23560 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
23570 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
23580 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
23590 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
235a0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
235b0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
235c0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
235d0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
235e0 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
235f0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23600 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
23610 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72  , &v);.    impor
23620 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
23630 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
23640 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23650 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
23660 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
23670 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
23680 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
23690 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
236a0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
236b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
236c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
236d0 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
236e0 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
236f0 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
23700 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
23710 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23720 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23730 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
23740 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
23750 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
23760 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
23770 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
23780 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
23790 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
237a0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
237b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
237c0 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
237d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
237e0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
237f0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
23800 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
23810 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
23820 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
23830 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
23840 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
23850 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
23860 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
23870 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
23880 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
23890 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
238a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
238b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
238c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
238d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
238e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
238f0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
23900 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23910 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
23920 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70  pC->pCursor || p
23930 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
23940 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
23950 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
23960 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
23970 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
23980 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
23990 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
239a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
239b0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
239c0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
239d0 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
239e0 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
239f0 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
23a00 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
23a10 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
23a20 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
23a30 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
23a40 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
23a50 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
23a60 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23a70 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
23a80 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
23a90 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
23aa0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
23ab0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
23ac0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
23ad0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
23ae0 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
23af0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23b00 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23b10 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23b20 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23b30 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
23b40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23b50 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23b60 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23b70 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23b80 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23b90 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23ba0 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
23bb0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23bc0 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
23bd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23be0 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
23bf0 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75  s);.  }.  pC->nu
23c00 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
23c10 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
23c20 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
23c30 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
23c40 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
23c50 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23c60 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  LE;.  if( pOp->p
23c70 32 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20  2>0 && res ){.  
23c80 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23c90 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
23ca0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
23cb0 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
23cc0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23cd0 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
23ce0 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
23cf0 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
23d00 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
23d10 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
23d20 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
23d30 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
23d40 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
23d50 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
23d60 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
23d70 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
23d80 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
23d90 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
23da0 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
23db0 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
23dc0 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
23dd0 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
23de0 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
23df0 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
23e00 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
23e10 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
23e20 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
23e30 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
23e40 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
23e50 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
23e60 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
23e70 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
23e80 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
23e90 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
23ea0 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
23eb0 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
23ec0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
23ed0 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
23ee0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
23ef0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23f00 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
23f10 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
23f20 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
23f30 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
23f40 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
23f50 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
23f60 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
23f70 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20  SORT-1]++;.  /* 
23f80 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
23f90 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
23fa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
23fb0 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
23fc0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
23fd0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
23fe0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
23ff0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
24000 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
24010 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
24020 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
24030 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
24040 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
24050 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
24060 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
24070 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
24080 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
24090 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
240a0 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
240b0 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
240c0 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
240d0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
240e0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
240f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
24100 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
24110 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
24120 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24130 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
24140 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
24150 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24160 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24170 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24180 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
241a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
241b0 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f  C->isSorter==(pO
241c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
241d0 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
241e0 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73  es = 1;.  if( is
241f0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
24200 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24210 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64  beSorterRewind(d
24220 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
24230 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72  }else{.    pCrsr
24240 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
24250 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
24260 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
24270 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
24280 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
24290 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20    pC->atFirst = 
242a0 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
242b0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
242c0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
242d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
242e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
242f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
24300 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
24310 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
24320 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
24330 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
24340 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
24350 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
24360 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
24370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24380 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
24390 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a  1 P2 * P4 P5.**.
243a0 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
243b0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
243c0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
243d0 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
243e0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
243f0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24400 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
24410 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
24420 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
24430 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
24440 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
24450 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
24460 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
24470 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
24480 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
24490 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
244a0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
244b0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
244c0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
244d0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
244e0 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
244f0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
24500 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
24510 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
24520 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
24530 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  eNext()..**.** I
24540 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
24550 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
24560 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
24570 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
24580 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
24590 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
245a0 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
245b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
245c0 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
245d0 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
245e0 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42  2 * * P5.**.** B
245f0 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
24600 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
24610 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
24620 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
24630 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
24640 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24650 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
24660 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
24670 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
24680 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24690 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
246a0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
246b0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
246c0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
246d0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
246e0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
246f0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
24700 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
24710 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
24720 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
24730 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
24740 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
24750 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
24760 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
24770 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
24780 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a  reePrevious()..*
24790 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
247a0 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
247b0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
247c0 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
247d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
247e0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
247f0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
24800 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73  remented..*/.cas
24810 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
24820 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
24830 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
24840 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24850 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b  .case OP_Next: {
24860 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24870 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24880 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
24890 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
248a0 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74  ERRUPT;.  assert
248b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
248c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
248d0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
248e0 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79 53 69  pOp->p5<=ArraySi
248f0 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
24900 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24910 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
24920 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pC==0 ){.    
24930 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74  break;  /* See t
24940 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20  icket #2273 */. 
24950 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
24960 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d  >isSorter==(pOp-
24970 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
24980 65 72 4e 65 78 74 29 20 29 3b 0a 20 20 69 66 28  erNext) );.  if(
24990 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
249a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
249b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
249c0 74 65 72 4e 65 78 74 20 29 3b 0a 20 20 20 20 72  terNext );.    r
249d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
249e0 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
249f0 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
24a00 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20  {.    res = 1;. 
24a10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
24a20 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
24a30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a40 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20  pC->pCursor );. 
24a50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24a60 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
24a70 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24a80 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24a90 65 4e 65 78 74 20 29 3b 0a 20 20 20 20 61 73 73  eNext );.    ass
24aa0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24ab0 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
24ac0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
24ad0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
24ae0 6f 75 73 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ous );.    rc = 
24af0 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
24b00 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
24b10 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e  es);.  }.  pC->n
24b20 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
24b30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24b40 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24b50 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  E;.  if( res==0 
24b60 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
24b70 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66 28  >p2 - 1;.    if(
24b80 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43   pOp->p5 ) p->aC
24b90 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31  ounter[pOp->p5-1
24ba0 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
24bb0 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
24bc0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
24bd0 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  ++;.#endif.  }. 
24be0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
24bf0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
24c00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
24c10 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
24c20 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69   * P5.**.** Regi
24c30 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
24c40 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
24c50 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
24c60 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
24c70 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
24c80 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
24c90 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
24ca0 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
24cb0 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
24cc0 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
24cd0 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
24ce0 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
24cf0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
24d00 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
24d10 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
24d20 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
24d30 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  nd..**.** This i
24d40 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
24d50 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
24d60 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
24d70 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
24d80 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
24d90 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
24da0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
24db0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
24dc0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
24dd0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
24de0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
24df0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
24e00 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
24e10 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e   int nKey;.  con
24e20 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a  st char *zKey;..
24e30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24e40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24e50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24e60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24e70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24e80 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24e90 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65  ert( pC->isSorte
24ea0 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  r==(pOp->opcode=
24eb0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
24ec0 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
24ed0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
24ee0 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
24ef0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
24f00 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
24f10 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41  pCursor;.  if( A
24f20 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
24f30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
24f40 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
24f50 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
24f60 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20  Blob(pIn2);.    
24f70 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
24f80 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69  K ){.      if( i
24f90 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
24fa0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
24fb0 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
24fc0 74 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29  te(db, pC, pIn2)
24fd0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
24fe0 20 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49         nKey = pI
24ff0 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a  n2->n;.        z
25000 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
25010 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
25020 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
25030 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79  Crsr, zKey, nKey
25040 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d  , "", 0, 0, pOp-
25050 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20  >p3, .          
25060 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
25070 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
25080 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
25090 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
250a0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20        );.       
250b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
250c0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
250d0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 63 61  ;.        pC->ca
250e0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
250f0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d  E_STALE;.      }
25100 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
25110 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25120 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
25130 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
25140 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
25150 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
25160 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
25170 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
25180 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
25190 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
251a0 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
251b0 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
251c0 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
251d0 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
251e0 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
251f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25200 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
25210 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
25220 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
25230 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
25240 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
25250 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
25260 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
25270 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  >p3<=p->nMem+1 )
25280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25290 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
252a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
252b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
252c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
252d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
252e0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
252f0 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
25300 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
25310 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
25320 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
25330 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
25340 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e  )pOp->p3;.    r.
25350 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72  flags = 0;.    r
25360 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
25370 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
25380 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
25390 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
253a0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
253b0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
253c0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
253d0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
253e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
253f0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
25400 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
25410 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
25420 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
25430 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
25440 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25450 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
25460 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  );.    }.    ass
25470 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25480 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25490 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
254a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
254b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
254c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
254d0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
254e0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
254f0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
25500 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
25510 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
25520 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
25530 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
25540 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
25550 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
25560 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
25570 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
25580 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
25590 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
255a0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
255b0 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
255c0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
255d0 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
255e0 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
255f0 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
25600 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
25610 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
25620 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
25630 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25640 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
25650 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25660 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25670 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25680 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25690 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
256a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
256b0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
256c0 72 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  r;.  pOut->flags
256d0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
256e0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
256f0 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
25700 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
25710 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
25720 20 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29   if( NEVER(rc) )
25730 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25740 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73  to_error;.    as
25750 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25760 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
25770 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
25780 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
25790 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
257a0 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  w ){.      rc = 
257b0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
257c0 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26  wid(db, pCrsr, &
257d0 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66  rowid);.      if
257e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
257f0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
25800 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25810 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
25820 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
25830 77 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  wid;.      pOut-
25840 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
25850 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
25860 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25870 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
25880 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
25890 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
258a0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
258b0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
258c0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
258d0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
258e0 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
258f0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
25900 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
25910 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
25920 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
25930 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
25940 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
25950 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
25960 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
25970 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
25980 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
25990 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
259a0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
259b0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
259c0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
259d0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
259e0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
259f0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
25a00 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
25a10 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
25a20 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
25a30 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68   .** prior to th
25a40 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
25a50 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63  his make the opc
25a60 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
25a70 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68  xGT except.** th
25a80 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72  at if the key fr
25a90 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69  om register P3 i
25aa0 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
25ab0 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72  e key in the cur
25ac0 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75  sor,.** the resu
25ad0 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72  lt is false wher
25ae0 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20  eas it would be 
25af0 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e  true with IdxGT.
25b00 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
25b10 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
25b20 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34   P5.**.** The P4
25b30 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
25b40 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
25b50 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
25b60 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
25b70 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
25b80 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
25b90 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
25ba0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
25bb0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
25bc0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
25bd0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
25be0 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68   the ROWID on th
25bf0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
25c00 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
25c10 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
25c20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
25c30 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ue then jump to 
25c40 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  P2..** Otherwise
25c50 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
25c60 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
25c70 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
25c80 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74  P5 is non-zero t
25c90 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  hen the key valu
25ca0 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62  e is increased b
25cb0 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69  y an epsilon pri
25cc0 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f  or .** to the co
25cd0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20  mparison.  This 
25ce0 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65  makes the opcode
25cf0 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45   work like IdxLE
25d00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
25d10 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
25d20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
25d30 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20  IdxGE: {        
25d40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
25d50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
25d60 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
25d70 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
25d80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25d90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25da0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25db0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25dc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25dd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
25de0 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
25df0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
25e00 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
25e10 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
25e20 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25e30 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
25e40 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
25e50 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
25e60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25e70 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
25e80 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  2 );.    r.pKeyI
25e90 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
25ea0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
25eb0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
25ec0 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  i;.    if( pOp->
25ed0 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c  p5 ){.      r.fl
25ee0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
25ef0 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45  NCRKEY | UNPACKE
25f00 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
25f10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25f20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
25f30 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
25f40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d  ;.    }.    r.aM
25f50 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
25f60 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
25f70 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69  TE_DEBUG.    { i
25f80 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
25f90 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
25fa0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
25fb0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
25fc0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72  ; }.#endif.    r
25fd0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
25fe0 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c  dxKeyCompare(pC,
25ff0 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20   &r, &res);.    
26000 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
26010 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  =OP_IdxLT ){.   
26020 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
26030 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26040 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26050 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b  ode==OP_IdxGE );
26060 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  .      res++;.  
26070 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e    }.    if( res>
26080 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
26090 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20  pOp->p2 - 1 ;.  
260a0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
260b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
260c0 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
260d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
260e0 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
260f0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
26100 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
26110 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
26120 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
26130 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
26140 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
26150 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
26160 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26170 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
26180 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
26190 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
261a0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
261b0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
261c0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
261d0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
261e0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
261f0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
26200 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
26210 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
26220 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
26230 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
26240 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
26250 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
26260 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
26270 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
26280 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
26290 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
262a0 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
262b0 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
262c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
262d0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
262e0 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
262f0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
26300 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
26310 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
26320 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
26330 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
26340 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26350 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
26360 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
26370 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
26380 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
26390 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
263a0 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
263b0 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
263c0 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
263d0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
263e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
263f0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
26400 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
26410 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
26420 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
26430 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26440 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
26450 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
26460 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
26470 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ase */.  int iMo
26480 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b  ved;.  int iCnt;
26490 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a  .  Vdbe *pVdbe;.
264a0 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73    int iDb;..  as
264b0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
264c0 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  y==0 );.#ifndef 
264d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
264e0 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
264f0 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
26500 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
26510 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
26520 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
26530 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
26540 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
26550 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64  & pVdbe->bIsRead
26560 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62  er .     && pVdb
26570 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
26580 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
26590 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  0 .    ){.      
265a0 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
265b0 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
265c0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a   db->nVdbeRead;.
265d0 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66  #endif.  pOut->f
265e0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
265f0 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b  .  if( iCnt>1 ){
26600 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
26610 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
26620 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
26630 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
26640 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
26650 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
26660 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
26670 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
26680 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
26690 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
266a0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
266b0 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
266c0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
266d0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
266e0 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
266f0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
26700 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
26710 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
26720 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
26730 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
26740 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
26750 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
26760 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
26770 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62  ageMoved(db, iDb
26780 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70  , iMoved, pOp->p
26790 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c  1);.      /* All
267a0 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72   OP_Destroy oper
267b0 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20  ations occur on 
267c0 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a  the same btree *
267d0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
267e0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
267f0 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63  lt==0 || resetSc
26800 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62  hemaOnFault==iDb
26810 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65  +1 );.      rese
26820 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
26830 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65   iDb+1;.    }.#e
26840 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
26850 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26860 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
26870 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
26880 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
26890 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
268a0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
268b0 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
268c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
268d0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
268e0 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
268f0 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
26900 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
26910 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
26920 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
26930 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
26940 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
26950 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26960 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
26970 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
26980 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
26990 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
269a0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
269b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
269c0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
269d0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
269e0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
269f0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
26a00 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
26a10 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
26a20 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
26a30 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
26a40 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
26a50 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
26a60 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
26a70 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
26a80 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
26a90 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
26aa0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
26ab0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
26ac0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
26ad0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26ae0 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
26af0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
26b00 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
26b10 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
26b20 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
26b30 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
26b40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
26b50 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
26b60 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
26b70 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26b80 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
26b90 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
26ba0 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e  t nChange;. .  n
26bb0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
26bc0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
26bd0 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
26be0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
26bf0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
26c00 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
26c10 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
26c20 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
26c30 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
26c40 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
26c50 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
26c60 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
26c70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
26c80 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
26c90 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
26ca0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
26cb0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
26cc0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
26cd0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
26ce0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
26cf0 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
26d00 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
26d10 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
26d20 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
26d30 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
26d40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26d50 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
26d60 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c  2 * * *.**.** Al
26d70 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62  locate a new tab
26d80 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  le in the main d
26d90 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26da0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
26db0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
26dc0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
26dd0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
26de0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
26df0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
26e00 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
26e10 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
26e20 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
26e30 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
26e40 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
26e50 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65   between a table
26e60 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73   and an index is
26e70 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20   this:  A table 
26e80 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34  must.** have a 4
26e90 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65  -byte integer ke
26ea0 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61  y and can have a
26eb0 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20  rbitrary data.  
26ec0 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20  An index.** has 
26ed0 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79  an arbitrary key
26ee0 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a   but no data..**
26ef0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72  .** See also: Cr
26f00 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20  eateIndex.*/./* 
26f10 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e  Opcode: CreateIn
26f20 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  dex P1 P2 * * *.
26f30 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
26f40 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
26f50 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
26f60 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
26f70 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
26f80 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
26f90 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
26fa0 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
26fb0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
26fc0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
26fd0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
26fe0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
26ff0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
27000 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
27010 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
27020 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
27030 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
27040 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
27050 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
27060 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
27070 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
27080 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
27090 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
270a0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
270b0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
270c0 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
270d0 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  s;.  Db *pDb;.. 
270e0 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
270f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27100 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
27110 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
27120 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
27130 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
27140 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
27150 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
27160 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
27170 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
27180 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27190 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
271a0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
271b0 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
271c0 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
271d0 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
271e0 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
271f0 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
27200 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
27210 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59   = BTREE_BLOBKEY
27220 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
27230 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
27240 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
27250 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
27260 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
27270 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27280 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
27290 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
272a0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
272b0 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
272c0 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
272d0 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
272e0 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
272f0 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
27300 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
27310 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
27320 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
27330 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
27340 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
27350 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
27360 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
27370 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
27380 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
27390 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
273a0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
273b0 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
273c0 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
273d0 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
273e0 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
273f0 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
27400 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
27410 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
27420 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
27430 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
27440 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
27450 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
27460 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
27470 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
27480 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
27490 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
274a0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
274b0 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
274c0 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
274d0 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
274e0 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
274f0 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
27500 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
27510 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
27520 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
27530 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
27540 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
27550 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
27560 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
27570 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
27580 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
27590 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
275a0 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
275b0 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
275c0 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
275d0 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
275e0 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
275f0 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
27600 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
27610 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
27620 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
27630 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
27640 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
27650 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
27660 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
27670 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
27680 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
27690 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
276a0 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
276b0 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
276c0 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
276d0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
276e0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
276f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
27700 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
27710 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
27720 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
27730 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
27740 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
27750 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
27760 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
27770 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
27780 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
27790 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
277a0 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
277b0 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
277c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
277d0 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
277e0 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
277f0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
27800 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
27810 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
27820 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
27830 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65  rc ) sqlite3Rese
27840 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
27850 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69  nection(db);.  i
27860 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
27870 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
27880 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
27890 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
278a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
278b0 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
278c0 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
278d0 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
278e0 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
278f0 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
27900 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
27910 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
27920 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
27930 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
27940 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
27950 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
27960 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
27970 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
27980 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
27990 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
279a0 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
279b0 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
279c0 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
279d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
279e0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
279f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
27a00 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
27a10 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
27a20 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
27a30 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
27a40 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
27a50 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
27a60 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
27a70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
27a80 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
27a90 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
27aa0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
27ab0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
27ac0 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
27ad0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
27ae0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
27af0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
27b00 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
27b10 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
27b20 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
27b30 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
27b40 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
27b50 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
27b60 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
27b70 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
27b80 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
27b90 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
27ba0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
27bb0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
27bc0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27bd0 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
27be0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
27bf0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
27c00 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
27c10 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
27c20 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
27c30 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
27c40 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
27c50 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
27c60 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
27c70 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
27c80 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
27c90 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
27ca0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
27cb0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
27cc0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
27cd0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
27ce0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
27cf0 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
27d00 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
27d10 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
27d20 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
27d30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27d40 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
27d50 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27d60 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
27d70 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
27d80 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
27d90 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
27da0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
27db0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
27dc0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
27dd0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
27de0 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
27df0 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27e00 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27e10 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27e20 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27e30 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27e40 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27e50 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27e60 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
27e70 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27e80 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
27e90 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27ea0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
27eb0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
27ec0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
27ed0 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
27ee0 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
27ef0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
27f00 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
27f10 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
27f20 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
27f30 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
27f40 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
27f50 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
27f60 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
27f70 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
27f80 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
27f90 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
27fa0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
27fb0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
27fc0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
27fd0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
27fe0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
27ff0 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
28000 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
28010 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
28020 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
28030 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
28040 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
28050 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
28060 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
28070 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
28080 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
28090 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
280a0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
280b0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
280c0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
280d0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
280e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
280f0 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
28100 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
28110 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
28120 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
28130 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
28140 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
28150 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
28160 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
28170 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
28180 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
28190 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
281a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
281b0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
281c0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
281d0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
281e0 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
281f0 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
28200 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
28210 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
28220 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
28230 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
28240 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
28250 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
28260 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
28270 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
28280 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
28290 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
282a0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
282b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
282c0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
282d0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
282e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
282f0 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
28300 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
28310 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
28320 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
28330 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
28340 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
28350 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
28360 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
28370 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
28380 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
28390 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
283a0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
283b0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
283c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
283d0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
283e0 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
283f0 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
28400 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28410 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
28420 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
28430 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72  >nMem );.  pnErr
28440 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
28450 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
28460 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
28470 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
28480 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
28490 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
284a0 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
284b0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
284c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
284d0 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
284e0 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
284f0 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
28500 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
28510 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
28520 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
28530 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
28540 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
28550 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
28560 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
28570 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a  pOp->p5))!=0 );.
28580 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72    z = sqlite3Btr
28590 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b  eeIntegrityCheck
285a0 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35  (db->aDb[pOp->p5
285b0 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52  ].pBt, aRoot, nR
285c0 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
285f0 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20  ->u.i, &nErr);. 
28600 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
28610 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45  b, aRoot);.  pnE
28620 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b  rr->u.i -= nErr;
28630 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
28640 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
28650 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
28660 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
28670 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  0 );.  }else if(
28680 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74   z==0 ){.    got
28690 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73  o no_mem;.  }els
286a0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
286b0 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31  beMemSetStr(pIn1
286c0 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  , z, -1, SQLITE_
286d0 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72  UTF8, sqlite3_fr
286e0 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ee);.  }.  UPDAT
286f0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
28700 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
28710 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
28720 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  g(pIn1, encoding
28730 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
28740 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
28750 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
28760 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ECK */../* Opcod
28770 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20  e: RowSetAdd P1 
28780 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
28790 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
287a0 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
287b0 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
287c0 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
287d0 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
287e0 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
287f0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
28800 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
28810 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
28820 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
28830 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
28840 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
28850 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
28860 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
28870 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
28880 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
28890 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
288a0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
288b0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
288c0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
288d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
288e0 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
288f0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
28900 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
28910 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
28920 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
28930 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
28940 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
28950 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
28960 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
28970 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
28980 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74  P3 * *.**.** Ext
28990 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
289a0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
289b0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
289c0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
289d0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
289e0 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
289f0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
28a00 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
28a10 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
28a20 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
28a30 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
28a40 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
28a50 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
28a60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
28a70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
28a80 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  val;.  CHECK_FOR
28a90 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49  _INTERRUPT;.  pI
28aa0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28ab0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
28ac0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28ad0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
28ae0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
28af0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
28b00 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
28b10 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
28b20 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
28b30 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
28b40 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
28b50 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
28b60 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
28b70 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
28b80 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
28b90 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
28ba0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
28bb0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
28bc0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
28bd0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
28be0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
28bf0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
28c00 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  3 P4.**.** Regis
28c10 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
28c20 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
28c30 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
28c40 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
28c50 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
28c60 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
28c70 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
28c80 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
28c90 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
28ca0 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
28cb0 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
28cc0 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
28cd0 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
28ce0 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
28cf0 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
28d00 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
28d10 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
28d20 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
28d30 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
28d40 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
28d50 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
28d60 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
28d70 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
28d80 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
28d90 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
28da0 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
28db0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
28dc0 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
28dd0 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
28de0 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
28df0 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
28e00 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
28e10 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
28e20 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
28e30 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
28e40 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
28e50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
28e60 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
28e70 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
28e80 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
28e90 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
28ea0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
28eb0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
28ec0 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
28ed0 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
28ee0 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
28ef0 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
28f00 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
28f10 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
28f20 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
28f30 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
28f40 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
28f50 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
28f60 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
28f70 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
28f80 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
28f90 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
28fa0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
28fb0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
28fc0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
28fd0 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
28fe0 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
28ff0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
29000 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
29010 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
29020 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
29030 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
29040 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
29050 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
29080 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
29090 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
290a0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
290b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
290c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
290d0 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
290e0 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
290f0 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
29100 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
29110 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
29120 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
29130 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
29140 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
29150 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
29160 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
29170 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
29180 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
29190 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
291a0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
291b0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
291c0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
291d0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
291e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
291f0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
29200 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29210 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
29220 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
29230 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
29240 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
29250 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
29260 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
29270 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
29280 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
29290 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Set, .          
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292b0 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d       (u8)(iSet>=
292c0 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a  0 ? iSet & 0xf :
292d0 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20   0xff),.        
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69         pIn3->u.i
29300 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
29310 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
29320 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
29330 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
29340 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
29350 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
29360 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
29370 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
29380 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
29390 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
293a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
293b0 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
293c0 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
293d0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45   P3 P4 *.**.** E
293e0 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
293f0 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
29400 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
29410 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
29420 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
29430 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
29440 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
29450 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
29460 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
29470 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
29480 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
29490 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
294a0 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
294b0 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
294c0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
294d0 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
294e0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
294f0 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
29500 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
29510 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
29520 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
29530 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
29540 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
29550 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
29560 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
29570 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
29580 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
29590 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
295a0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
295b0 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
295c0 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
295d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
295e0 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
295f0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
29600 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  am..*/.case OP_P
29610 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
29620 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
29630 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
29640 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
29650 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
29660 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
29670 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
29680 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
29690 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
296a0 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
296b0 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
296c0 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
296d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
296e0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
296f0 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
29700 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
29710 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
29720 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
29730 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
29740 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
29750 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
29760 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
29770 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
29780 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
29790 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
297a0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
297b0 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
297c0 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
297d0 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
297e0 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
297f0 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
29800 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
29810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
29820 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
29830 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
29840 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
29850 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
29860 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
29870 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
29880 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
29890 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
298a0 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
298b0 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
298c0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
298d0 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
298e0 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
298f0 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
29900 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
29910 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
29920 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
29930 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
29940 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
29950 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
29960 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
29970 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
29980 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
29990 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
299a0 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
299b0 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
299c0 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
299d0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
299e0 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
299f0 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
29a00 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
29a10 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
29a20 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
29a30 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
29a40 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
29a50 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
29a60 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
29a70 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
29a80 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
29a90 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
29aa0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
29ab0 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
29ac0 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
29ad0 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
29ae0 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
29af0 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
29b00 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
29b10 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
29b20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
29b30 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
29b40 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
29b50 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
29b60 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
29b70 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
29b80 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
29b90 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
29ba0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
29bb0 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
29bc0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
29bd0 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
29be0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
29bf0 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
29c00 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
29c10 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
29c20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
29c30 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
29c40 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
29c50 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
29c60 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
29c70 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
29c80 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
29c90 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
29ca0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
29cb0 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
29cc0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
29cd0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
29ce0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
29cf0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
29d00 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
29d10 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
29d20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
29d30 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
29d40 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
29d50 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
29d60 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
29d70 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
29d80 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
29d90 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
29da0 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
29db0 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
29dc0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
29dd0 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
29de0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
29df0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
29e00 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
29e10 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
29e20 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
29e30 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
29e40 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
29e50 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
29e60 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
29e70 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
29e80 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
29e90 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
29ea0 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
29eb0 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
29ec0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
29ed0 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
29ee0 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
29ef0 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
29f00 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
29f10 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
29f20 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
29f30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
29f40 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
29f50 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
29f60 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
29f70 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
29f80 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20  beCursor *).    
29f90 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
29fa0 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69  gram->nOnce * si
29fb0 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46  zeof(u8);.    pF
29fc0 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
29fd0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
29fe0 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
29ff0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
2a000 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
2a010 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
2a020 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
2a030 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
2a040 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
2a050 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
2a060 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
2a070 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
2a080 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
2a090 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
2a0a0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
2a0b0 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
2a0c0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2a0d0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46  >pc = pc;.    pF
2a0e0 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
2a0f0 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
2a100 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
2a110 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
2a120 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
2a130 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
2a140 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
2a150 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2a160 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
2a170 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
2a180 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
2a190 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
2a1a0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70  am->token;.    p
2a1b0 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67  Frame->aOnceFlag
2a1c0 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b   = p->aOnceFlag;
2a1d0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e  .    pFrame->nOn
2a1e0 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63  ceFlag = p->nOnc
2a1f0 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64  eFlag;..    pEnd
2a200 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2a210 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
2a220 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
2a230 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
2a240 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
2a250 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
2a260 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
2a270 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 76  >flags = MEM_Inv
2a280 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  alid;.      pMem
2a290 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
2a2a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
2a2b0 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
2a2c0 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
2a2d0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
2a2e0 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
2a2f0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
2a300 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  em );.    assert
2a310 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
2a320 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2a330 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
2a340 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70  t( pc==pFrame->p
2a350 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
2a360 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
2a370 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
2a380 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
2a390 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
2a3a0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
2a3b0 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
2a3c0 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43  nChange;.  p->nC
2a3d0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
2a3e0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2a3f0 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
2a400 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
2a410 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
2a420 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
2a430 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
2a440 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
2a450 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
2a460 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
2a470 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
2a480 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31  )&aMem[p->nMem+1
2a490 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
2a4a0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
2a4b0 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
2a4c0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
2a4d0 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75  ->aOnceFlag = (u
2a4e0 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d  8 *)&p->apCsr[p-
2a4f0 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e  >nCursor];.  p->
2a500 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f  nOnceFlag = pPro
2a510 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70  gram->nOnce;.  p
2a520 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74  c = -1;.  memset
2a530 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30  (p->aOnceFlag, 0
2a540 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b  , p->nOnceFlag);
2a550 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
2a560 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
2a570 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2a580 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2a590 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
2a5a0 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
2a5b0 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
2a5c0 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
2a5d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
2a5e0 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
2a5f0 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
2a600 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
2a610 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
2a620 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
2a630 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
2a640 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
2a650 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
2a660 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
2a670 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
2a680 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
2a690 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
2a6a0 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
2a6b0 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
2a6c0 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
2a6d0 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
2a6e0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
2a6f0 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
2a700 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2a710 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
2a720 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2a730 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
2a740 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
2a750 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2a760 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
2a770 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
2a780 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2a790 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  e */.  VdbeFrame
2a7a0 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20   *pFrame;.  Mem 
2a7b0 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d  *pIn;.  pFrame =
2a7c0 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
2a7d0 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
2a7e0 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
2a7f0 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
2a800 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
2a810 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
2a820 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
2a830 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
2a840 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
2a850 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2a860 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2a870 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2a880 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2a890 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
2a8a0 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
2a8b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  * * *.**.** Incr
2a8c0 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
2a8d0 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
2a8e0 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
2a8f0 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
2a900 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
2a910 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
2a920 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2a930 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2a940 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
2a950 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
2a960 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2a970 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
2a980 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
2a990 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
2a9a0 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
2a9b0 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
2a9c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2a9d0 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
2a9e0 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
2a9f0 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  {.  if( pOp->p1 
2aa00 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
2aa10 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
2aa20 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
2aa30 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
2aa40 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
2aa50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2aa60 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
2aa70 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
2aa80 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2aa90 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
2aaa0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2aab0 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
2aac0 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
2aad0 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
2aae0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2aaf0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2ab00 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2ab10 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
2ab20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
2ab30 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2ab40 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
2ab50 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
2ab60 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
2ab70 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
2ab80 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
2ab90 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
2aba0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2abb0 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
2abc0 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
2abd0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2abe0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
2abf0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2ac00 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
2ac10 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2ac20 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
2ac30 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
2ac40 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
2ac50 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
2ac60 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
2ac70 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  p1 ){.    if( db
2ac80 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2ac90 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  =0 ) pc = pOp->p
2aca0 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  2-1;.  }else{.  
2acb0 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
2acc0 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d  traint==0 ) pc =
2acd0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
2ace0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2acf0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2ad00 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2ad10 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2ad20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2ad30 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2ad40 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2ad50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
2ad60 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2ad70 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2ad80 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2ad90 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2ada0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2adb0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2adc0 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2add0 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2ade0 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2adf0 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2ae00 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2ae10 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2ae20 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2ae30 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2ae40 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2ae50 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2ae60 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2ae70 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2ae80 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2ae90 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2aea0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2aeb0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2aec0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2aed0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2aee0 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  in2 */.  Mem *pI
2aef0 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20  n1;.  VdbeFrame 
2af00 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
2af10 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
2af20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2af30 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
2af40 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
2af50 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2af60 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
2af70 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2af80 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
2af90 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2afa0 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
2afb0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2afc0 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
2afd0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2afe0 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
2aff0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2b000 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
2b010 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2b020 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
2b030 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
2b040 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
2b050 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
2b060 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2b070 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2b080 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
2b090 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
2b0a0 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
2b0b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
2b0c0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2b0d0 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
2b0e0 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
2b0f0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2b100 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2b110 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2b120 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2b130 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2b140 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2b150 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2b160 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2b170 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2b180 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2b190 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2b1a0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2b1b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b1c0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2b1d0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2b1e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
2b1f0 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2b200 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2b210 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2b220 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
2b230 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
2b240 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2b250 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
2b260 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
2b270 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2b280 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2b290 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2b2a0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2b2b0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2b2c0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2b2d0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2b2e0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2b2f0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2b300 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2b310 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2b320 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2b330 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2b340 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2b350 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2b360 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
2b370 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
2b380 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2b390 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2b3a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b3b0 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
2b3c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
2b3d0 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
2b3e0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b3f0 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
2b400 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76  l P3 to the.** v
2b410 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2b420 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73   P1.  If the res
2b430 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30  ult is exactly 0
2b440 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2b450 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2b460 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2b470 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2b480 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2b490 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2b4a0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2b4b0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2b4c0 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2b4d0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2b4e0 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
2b4f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2b500 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2b510 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b520 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2b530 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2b540 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
2b550 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49  Op->p3;.  if( pI
2b560 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
2b570 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2b580 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2b590 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b5a0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2b5b0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
2b5c0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
2b5d0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2b5e0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
2b5f0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
2b600 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
2b610 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2b620 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
2b630 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
2b640 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
2b650 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
2b660 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
2b670 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
2b680 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
2b690 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
2b6a0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
2b6b0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
2b6c0 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
2b6d0 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
2b6e0 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
2b6f0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
2b700 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
2b710 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
2b720 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2b730 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
2b740 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
2b750 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
2b760 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  c = &aMem[pOp->p
2b770 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
2b780 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
2b790 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
2b7a0 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
2b7b0 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
2b7c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
2b7d0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
2b7e0 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
2b7f0 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  pRec;.    memAbo
2b800 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52  utToChange(p, pR
2b810 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ec);.    sqlite3
2b820 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2b830 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74  (pRec);.  }.  ct
2b840 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
2b850 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72  4.pFunc;.  asser
2b860 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2b870 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
2b880 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d   );.  ctx.pMem =
2b890 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2b8a0 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e  p->p3];.  pMem->
2b8b0 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  n++;.  ctx.s.fla
2b8c0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2b8d0 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20   ctx.s.z = 0;.  
2b8e0 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
2b8f0 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  0;.  ctx.s.xDel 
2b900 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20  = 0;.  ctx.s.db 
2b910 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72  = db;.  ctx.isEr
2b920 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70  ror = 0;.  ctx.p
2b930 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  Coll = 0;.  ctx.
2b940 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20  skipFlag = 0;.  
2b950 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
2b960 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
2b970 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
2b980 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
2b990 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
2b9a0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
2b9b0 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
2b9c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2b9d0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
2b9e0 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
2b9f0 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
2ba00 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
2ba10 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
2ba20 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
2ba30 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
2ba40 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
2ba50 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
2ba60 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
2ba70 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2ba80 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2ba90 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2baa0 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
2bab0 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
2bac0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rror;.  }.  if( 
2bad0 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  ctx.skipFlag ){.
2bae0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2baf0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
2bb00 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20  ollSeq );.    i 
2bb10 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
2bb20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65    if( i ) sqlite
2bb30 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2bb40 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20  (&aMem[i], 1);. 
2bb50 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62   }..  sqlite3Vdb
2bb60 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
2bb70 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .s);..  break;.}
2bb80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2bb90 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
2bba0 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65   *.**.** Execute
2bbb0 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
2bbc0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2bbd0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
2bbe0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
2bbf0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
2bc00 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
2bc10 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
2bc20 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
2bc30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2bc40 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
2bc50 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
2bc60 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
2bc70 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2bc80 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
2bc90 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
2bca0 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
2bcb0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
2bcc0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
2bcd0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
2bce0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
2bcf0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
2bd00 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
2bd10 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
2bd20 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
2bd30 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
2bd40 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
2bd50 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
2bd60 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
2bd70 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
2bd80 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
2bd90 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
2bda0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
2bdb0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
2bdc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
2bdd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
2bde0 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  nMem );.  pMem =
2bdf0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2be00 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2be10 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2be20 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2be30 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2be40 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2be50 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2be60 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2be70 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2be80 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2be90 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2bea0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2beb0 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2bec0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2bed0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2bee0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2bef0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2bf00 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2bf10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2bf20 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2bf30 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2bf40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2bf50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bf60 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2bf70 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2bf80 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2bf90 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2bfa0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2bfb0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2bfc0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2bfd0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2bfe0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2bff0 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2c000 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2c010 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2c020 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2c030 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2c040 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2c050 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2c060 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2c070 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2c080 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2c090 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2c0a0 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2c0b0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2c0c0 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2c0d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2c0e0 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2c0f0 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2c100 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2c110 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2c120 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2c130 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2c140 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2c150 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2c160 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2c170 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2c180 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2c190 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2c1a0 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2c1d0 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2c1e0 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2c1f0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2c200 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2c210 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2c220 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2c230 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2c240 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2c250 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2c260 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2c270 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2c280 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2c290 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2c2a0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2c2b0 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2c2c0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2c2d0 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2c2e0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2c2f0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2c300 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b  INT_RESTART.  );
2c310 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
2c320 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f  heckpoint(db, pO
2c330 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
2c340 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b  &aRes[1], &aRes[
2c350 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  2]);.  if( rc==S
2c360 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
2c370 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2c380 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
2c390 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
2c3a0 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
2c3b0 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
2c3c0 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
2c3d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2c3e0 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
2c3f0 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
2c400 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
2c410 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
2c420 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
2c430 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
2c440 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
2c450 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
2c460 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2c470 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2c480 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2c490 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2c4a0 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2c4b0 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2c4c0 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2c4d0 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2c4e0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2c4f0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2c500 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2c510 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2c520 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2c530 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2c540 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2c550 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2c560 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2c570 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2c580 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2c590 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2c5a0 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2c5b0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2c5c0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2c5d0 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2c5e0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2c5f0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2c600 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2c610 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2c620 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c640 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2c650 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2c660 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2c670 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2c680 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2c690 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2c6a0 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2c6b0 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2c6c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2c6d0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2c6e0 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c700 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2c710 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2c720 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c730 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2c740 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2c750 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2c760 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2c770 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2c780 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2c790 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2c7a0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2c7b0 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2c7c0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2c7d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c7e0 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2c7f0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c800 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c810 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2c820 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2c830 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2c840 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2c850 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c860 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2c870 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2c880 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2c890 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c8a0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c8b0 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2c8c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c8d0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2c8e0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2c8f0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2c900 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2c910 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2c920 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2c930 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2c940 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2c950 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2c960 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2c970 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2c980 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2c990 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2c9a0 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2c9b0 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2c9c0 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2c9d0 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2c9e0 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2c9f0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2ca00 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2ca10 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2ca20 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2ca30 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2ca40 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2ca50 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2ca60 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2ca70 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2ca80 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2ca90 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2caa0 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2cab0 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2cac0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2cad0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2cae0 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2caf0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2cb00 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2cb10 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2cb20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2cb30 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2cb40 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2cb50 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2cb60 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2cb70 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2cb80 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2cb90 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2cba0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2cbb0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2cbc0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cbd0 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2cbe0 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2cbf0 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2cc00 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2cc10 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2cc20 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2cc30 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2cc40 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2cc50 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2cc60 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2cc70 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2cc80 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2cc90 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2cca0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ccb0 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2ccc0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2ccd0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2cce0 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2ccf0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2cd00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cd10 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2cd20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2cd30 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2cd40 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2cd50 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2cd60 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2cd70 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2cd80 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2cd90 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2cda0 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2cdb0 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2cdc0 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2cdd0 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2cde0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2cdf0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2ce00 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2ce10 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2ce20 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2ce30 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2ce40 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2ce50 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2ce60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ce70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2ce80 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2ce90 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2cea0 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2ceb0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2cec0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2ced0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2cee0 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2cef0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2cf00 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2cf10 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2cf20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2cf30 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2cf40 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2cf50 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2cf60 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2cf70 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2cf80 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2cf90 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2cfa0 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2cfb0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2cfc0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2cfd0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2cfe0 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2cff0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2d000 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2d010 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2d020 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2d030 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2d040 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2d050 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2d060 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2d070 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2d080 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d090 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2d0a0 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2d0b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2d0c0 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2d0d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2d0e0 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2d0f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2d100 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2d110 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2d120 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2d130 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2d140 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2d150 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2d160 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2d170 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2d180 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2d190 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2d1a0 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2d1b0 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2d1c0 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2d1d0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2d1e0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2d1f0 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2d200 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2d210 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2d220 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2d230 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2d240 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2d250 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d260 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2d270 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d280 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2d290 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d2a0 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2d2b0 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2d2c0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2d2d0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2d2e0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2d2f0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2d300 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2d310 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2d320 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2d330 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2d340 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2d350 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2d360 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2d370 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2d380 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d390 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2d3a0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2d3b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d3c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2d3d0 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2d3e0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2d3f0 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2d400 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2d410 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2d420 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2d430 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2d440 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2d450 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2d460 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2d470 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2d480 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2d490 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2d4a0 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2d4b0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2d4c0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2d4d0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2d4e0 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2d4f0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2d500 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2d510 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2d520 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d530 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2d540 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
2d550 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2d560 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
2d570 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
2d580 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2d590 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2d5a0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2d5b0 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2d5c0 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2d5d0 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  m(pBt);.  if( rc
2d5e0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
2d5f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2d600 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
2d610 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
2d620 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d630 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
2d640 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
2d650 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
2d660 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
2d670 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69  s to become expi
2d680 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20  red. An expired 
2d690 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69  statement.** fai
2d6a0 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
2d6b0 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
2d6c0 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20  SCHEMA if it is 
2d6d0 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a  ever executed .*
2d6e0 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73  * (via sqlite3_s
2d6f0 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49  tep())..** .** I
2d700 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
2d710 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
2d720 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
2d730 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
2d740 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
2d750 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
2d760 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
2d770 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64  ment is affected
2d780 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  . .*/.case OP_Ex
2d790 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
2d7a0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
2d7b0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2d7c0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
2d7d0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2d7e0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
2d7f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d800 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d810 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2d820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
2d830 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
2d840 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  4 *.**.** Obtain
2d850 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
2d860 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
2d870 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2d880 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
2d890 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
2d8a0 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
2d8b0 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
2d8c0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
2d8d0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2d8e0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
2d8f0 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
2d900 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
2d910 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
2d920 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
2d930 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
2d940 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
2d950 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
2d960 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
2d970 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
2d980 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
2d990 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
2d9a0 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
2d9b0 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
2d9c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
2d9d0 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
2d9e0 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
2d9f0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
2da00 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
2da10 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
2da20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
2da30 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
2da40 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
2da50 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
2da60 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
2da70 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
2da80 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
2da90 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
2daa0 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
2dab0 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
2dac0 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
2dad0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
2dae0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
2daf0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
2db00 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30 20  ask)1)<<p1))!=0 
2db10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
2db20 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
2db30 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
2db40 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2db50 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
2db60 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
2db70 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
2db80 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
2db90 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
2dba0 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
2dbb0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2dbc0 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
2dbd0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2dbe0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2dbf0 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
2dc00 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
2dc10 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
2dc20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2dc30 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2dc40 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2dc50 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
2dc60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2dc70 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2dc80 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
2dc90 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
2dca0 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
2dcb0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
2dcc0 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
2dcd0 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
2dce0 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
2dcf0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
2dd00 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
2dd10 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
2dd20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
2dd30 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
2dd40 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
2dd50 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
2dd60 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
2dd70 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
2dd80 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
2dd90 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
2dda0 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
2ddb0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
2ddc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
2ddd0 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
2dde0 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
2ddf0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
2de00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2de10 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
2de20 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
2de30 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2de40 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
2de50 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2de60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2de70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2de80 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2de90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2dea0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2deb0 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
2dec0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2ded0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2dee0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2def0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
2df00 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
2df10 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
2df20 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2df30 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
2df40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2df50 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
2df60 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2df70 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
2df80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2df90 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2dfa0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2dfb0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2dfc0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dfd0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2dfe0 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
2dff0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2e000 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2e010 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2e020 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
2e030 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
2e040 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
2e050 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2e060 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
2e070 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2e080 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
2e090 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2e0a0 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
2e0b0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2e0c0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2e0d0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2e0e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e0f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e100 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2e110 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e120 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2e130 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
2e140 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2e150 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2e160 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2e170 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2e180 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2e190 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2e1a0 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
2e1b0 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
2e1c0 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
2e1d0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
2e1e0 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
2e1f0 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
2e200 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
2e210 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2e220 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
2e230 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2e240 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2e250 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2e260 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2e270 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
2e280 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2e290 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
2e2a0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2e2b0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2e2c0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2e2d0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2e2e0 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2e2f0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2e300 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2e310 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2e320 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2e330 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2e340 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70  abCursor);.  imp
2e350 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2e360 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
2e370 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
2e380 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2e390 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
2e3a0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
2e3b0 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
2e3c0 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
2e3d0 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
2e3e0 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
2e3f0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
2e400 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
2e410 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
2e420 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
2e430 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
2e440 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
2e450 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
2e460 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
2e470 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
2e480 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
2e490 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
2e4a0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2e4b0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2e4c0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2e4d0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2e4e0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2e4f0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e500 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e510 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e520 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e530 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e540 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2e550 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2e560 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2e570 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2e580 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2e590 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2e5a0 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2e5b0 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2e5c0 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2e5d0 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2e5e0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2e5f0 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2e600 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2e610 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2e620 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2e630 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2e640 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2e650 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2e660 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2e670 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2e680 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2e690 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2e6a0 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2e6b0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2e6c0 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2e6d0 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2e6e0 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2e6f0 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2e700 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2e710 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2e720 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2e730 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2e740 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2e750 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2e760 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2e770 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2e780 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2e790 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2e7a0 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2e7b0 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2e7c0 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2e7d0 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2e7e0 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2e7f0 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2e800 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2e810 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2e820 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2e830 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2e840 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2e850 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2e860 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2e870 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2e880 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2e890 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2e8a0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2e8b0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2e8c0 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2e8d0 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2e8e0 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2e8f0 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2e900 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2e910 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2e920 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2e930 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2e940 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2e950 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e960 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2e970 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2e980 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2e990 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2e9a0 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2e9b0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2e9c0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2e9d0 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2e9e0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2e9f0 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2ea00 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2ea10 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2ea20 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2ea30 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2ea40 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2ea50 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2ea60 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2ea70 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2ea80 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2ea90 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2eaa0 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2eab0 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2eac0 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2ead0 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2eae0 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2eaf0 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2eb00 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2eb10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2eb20 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2eb30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2eb40 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2eb50 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2eb60 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2eb70 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2eb80 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2eb90 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2eba0 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2ebb0 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2ebc0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2ebd0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2ebe0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2ebf0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2ec00 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2ec10 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2ec20 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2ec30 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2ec40 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2ec50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ec60 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2ec70 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2ec80 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2ec90 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2eca0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2ecb0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2ecc0 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2ecd0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2ece0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2ecf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ed00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2ed10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ed20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2ed30 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2ed40 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2ed50 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2ed60 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2ed70 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2ed80 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2ed90 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2eda0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2edb0 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2edc0 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2edd0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2ede0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2edf0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2ee00 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2ee10 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2ee20 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2ee30 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2ee40 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2ee50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2ee60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2ee70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2ee80 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2ee90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2eea0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2eeb0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2eec0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
2eed0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
2eee0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2eef0 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
2ef00 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2ef10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ef20 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2ef30 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2ef40 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2ef50 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2ef60 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2ef70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2ef80 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2ef90 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2efa0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2efb0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2efc0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2efd0 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2efe0 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2eff0 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2f000 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2f010 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2f020 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2f030 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2f040 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2f050 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2f060 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2f070 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2f080 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2f090 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2f0a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2f0b0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2f0c0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2f0d0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2f0e0 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2f0f0 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
2f100 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2f110 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f120 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2f130 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56  ->p2);.  importV
2f140 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2f150 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2f160 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2f170 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2f180 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2f190 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2f1a0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2f1b0 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2f1c0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2f1d0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2f1e0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2f1f0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2f200 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2f210 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2f220 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2f230 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2f240 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2f250 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2f260 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2f270 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2f280 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2f290 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2f2a0 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2f2b0 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2f2c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2f2d0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2f2e0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2f2f0 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2f300 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2f310 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2f320 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2f330 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2f340 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2f350 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f360 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2f370 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2f380 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2f390 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2f3a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2f3b0 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2f3c0 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2f3d0 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2f3e0 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2f3f0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2f400 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2f410 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2f420 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2f430 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2f440 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2f450 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2f460 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2f470 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2f480 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2f490 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2f4a0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2f4b0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2f4c0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2f4d0 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2f4e0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2f4f0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2f500 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2f510 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f520 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f530 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2f540 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2f550 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2f560 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2f570 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2f580 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2f590 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2f5a0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2f5b0 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2f5c0 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2f5d0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2f5e0 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2f5f0 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2f600 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2f610 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2f620 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2f630 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2f640 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2f650 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2f660 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2f670 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2f680 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2f690 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2f6a0 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2f6b0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2f6c0 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2f6d0 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2f6e0 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2f6f0 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2f700 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2f710 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2f720 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2f730 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2f740 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2f750 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2f760 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2f770 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69  bMethod = 0;.  i
2f780 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2f790 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2f7a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2f7b0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2f7c0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2f7d0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2f7e0 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  }..  if( !res ){
2f7f0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
2f800 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
2f810 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
2f820 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2f830 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f840 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f850 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f860 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f870 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f880 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f890 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2f8a0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2f8b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2f8c0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2f8d0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2f8e0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2f8f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2f900 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2f910 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2f920 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2f930 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2f940 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2f950 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2f960 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2f970 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2f980 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2f990 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2f9a0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2f9b0 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2f9c0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2f9d0 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2f9e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f9f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2fa00 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2fa10 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2fa20 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2fa30 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
2fa40 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2fa50 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2fa60 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
2fa70 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
2fa80 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
2fa90 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
2faa0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
2fab0 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
2fac0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
2fad0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
2fae0 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
2faf0 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2fb00 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
2fb10 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fb20 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2fb30 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
2fb40 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
2fb50 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2fb60 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e      rc = pVtab->
2fb70 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2fb80 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
2fb90 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61  );.    importVta
2fba0 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2fbb0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
2fbc0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
2fbd0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2fbe0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fbf0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2fc00 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
2fc10 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
2fc20 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2fc30 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2fc40 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2fc50 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2fc60 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2fc70 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2fc80 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2fc90 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
2fca0 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
2fcb0 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
2fcc0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
2fcd0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
2fce0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
2fcf0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
2fd00 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
2fd10 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
2fd20 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
2fd30 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
2fd40 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2fd50 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
2fd60 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
2fd70 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
2fd80 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
2fd90 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
2fda0 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
2fdb0 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
2fdc0 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
2fdd0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
2fde0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
2fdf0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
2fe00 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
2fe10 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
2fe20 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
2fe30 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
2fe40 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
2fe50 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
2fe60 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
2fe70 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
2fe80 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
2fe90 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2fea0 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
2feb0 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
2fec0 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
2fed0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
2fee0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
2fef0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
2ff00 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
2ff10 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
2ff20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
2ff30 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
2ff40 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
2ff50 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
2ff60 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
2ff70 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
2ff80 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
2ff90 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
2ffa0 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
2ffb0 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
2ffc0 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
2ffd0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
2ffe0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
2fff0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
30000 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
30010 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30020 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
30030 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
30040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
30050 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
30060 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
30070 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
30080 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
30090 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
300a0 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
300b0 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
300c0 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
300d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
300e0 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
300f0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
30100 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
30110 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
30120 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
30130 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
30140 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
30150 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
30160 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ace.  );.  asser
30170 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
30180 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  0 );.  pVtab = p
30190 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
301a0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
301b0 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
301c0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
301d0 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
301e0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
301f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
30200 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
30210 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
30220 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20  date) ){.    u8 
30230 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
30240 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
30250 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  ict;.    apArg =
30260 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
30270 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
30280 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
30290 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
302a0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
302b0 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
302c0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
302d0 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
302e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
302f0 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
30300 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
30310 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
30320 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
30330 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
30340 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
30350 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
30360 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
30370 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
30380 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
30390 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
303a0 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 69 6d  Conflict;.    im
303b0 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
303c0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
303d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
303e0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
303f0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
30400 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
30410 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
30420 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
30430 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
30440 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
30450 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
30460 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
30470 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
30480 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
30490 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
304a0 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
304b0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
304c0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
304d0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
304e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
304f0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
30500 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
30510 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
30520 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
30530 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
30540 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
30550 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
30560 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30570 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30580 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30590 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
305a0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
305b0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
305c0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
305d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
305e0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
305f0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
30600 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
30610 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
30620 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
30630 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
30640 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
30650 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
30660 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
30670 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
30680 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30690 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
306a0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
306b0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
306c0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
306d0 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
306e0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
306f0 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
30700 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
30710 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
30720 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
30730 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
30740 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
30750 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
30760 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
30770 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
30780 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
30790 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
307a0 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
307b0 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
307c0 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
307d0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
307e0 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
307f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
30800 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
30810 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
30820 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
30830 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ease */.  unsign
30840 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
30850 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
30860 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
30870 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
30880 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
30890 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
308a0 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
308b0 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
308c0 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
308d0 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
308e0 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
308f0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
30900 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
30910 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
30920 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
30930 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
30940 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30950 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30960 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70  OMIT_TRACE./* Op
30970 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20  code: Trace * * 
30980 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  * P4 *.**.** If 
30990 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
309a0 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
309b0 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
309c0 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
309d0 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
309e0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
309f0 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
30a00 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
30a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
30a20 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54  ce: {.  char *zT
30a30 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  race;.  char *z;
30a40 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  ..  if( db->xTra
30a50 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
30a60 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
30a70 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
30a80 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
30a90 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
30aa0 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
30ab0 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
30ac0 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
30ad0 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
30ae0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
30af0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
30b00 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
30b10 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
30b20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
30b30 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
30b40 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54  ce)!=0.   && (zT
30b50 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
30b60 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
30b70 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
30b80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62  {.    sqlite3Deb
30b90 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
30ba0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
30bb0 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ce);.  }.#endif 
30bc0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
30bd0 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  */.  break;.}.#e
30be0 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
30bf0 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
30c00 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
30c10 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
30c20 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
30c30 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
30c40 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
30c50 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
30c60 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
30c70 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
30c80 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
30c90 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
30ca0 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
30cb0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
30cc0 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
30cd0 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
30ce0 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
30cf0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
30d00 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
30d10 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
30d20 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
30d30 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
30d40 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
30d50 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
30d60 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
30d70 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
30d80 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
30d90 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
30da0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
30db0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
30dc0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
30dd0 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
30de0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
30df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
30e40 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
30e50 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
30e60 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
30e70 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
30e80 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
30e90 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
30ea0 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
30eb0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
30ec0 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
30ed0 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
30ee0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
30ef0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
30f00 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
30f10 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
30f20 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
30f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f70 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
30f80 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
30f90 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
30fa0 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
30fb0 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
30fc0 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
30fd0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
30fe0 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
30ff0 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
31000 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
31010 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
31020 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
31030 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
31040 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
31050 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50  igPc, &aOp[origP
31060 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  c]);.#endif.    
31070 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
31080 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
31090 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
310a0 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
310b0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
310c0 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
310d0 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
310e0 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
310f0 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
31100 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
31110 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
31120 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
31130 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
31140 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
31150 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
31160 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
31170 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
31180 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
31190 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
311a0 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
311b0 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
311c0 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
311d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
311e0 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
311f0 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
31200 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74  0 ) fprintf(p->t
31210 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72  race,"rc=%d\n",r
31220 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
31230 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
31240 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
31250 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
31260 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
31270 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
31280 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  e, pOp->p2, &aMe
31290 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
312a0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
312b0 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
312c0 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
312d0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
312e0 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
312f0 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
31300 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
31310 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
31320 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
31330 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
31340 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
31350 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
31360 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
31370 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
31380 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
31390 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
313a0 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
313b0 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
313c0 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
313d0 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
313e0 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
313f0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
31400 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
31410 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65  p->rc = rc;.  te
31420 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
31430 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
31440 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
31450 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d  _log(rc, "statem
31460 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64  ent aborts at %d
31470 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20  : [%s] %s", .   
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31490 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  pc, p->zSql, p->
314a0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
314b0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
314c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
314d0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64  _IOERR_NOMEM ) d
314e0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
314f0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  = 1;.  rc = SQLI
31500 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  TE_ERROR;.  if( 
31510 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
31520 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  lt>0 ){.    sqli
31530 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
31540 61 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d  a(db, resetSchem
31550 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d  aOnFault-1);.  }
31560 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
31570 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
31580 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
31590 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
315a0 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
315b0 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
315c0 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
315d0 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
315e0 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
315f0 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74  turn:.  db->last
31600 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
31610 64 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  d;.  p->aCounter
31620 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
31630 55 53 5f 56 4d 5f 53 54 45 50 2d 31 5d 20 2b 3d  US_VM_STEP-1] +=
31640 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20   (int)nVmStep;. 
31650 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76   sqlite3VdbeLeav
31660 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  e(p);.  return r
31670 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
31680 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
31690 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
316a0 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
316b0 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
316c0 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
316d0 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
316e0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
316f0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
31700 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
31710 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
31720 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
31730 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
31740 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
31750 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
31760 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
31770 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
31780 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
31790 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
317a0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
317b0 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
317c0 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
317d0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
317e0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
317f0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
31800 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
31810 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
31820 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
31830 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
31840 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
31850 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
31860 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
31870 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
31880 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
31890 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
318a0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
318b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
318c0 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
318d0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
318e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
318f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31900 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
31910 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
31920 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
31930 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
31940 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
31950 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
31960 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
31970 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
31980 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
31990 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
319a0 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
319b0 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
319c0 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
319d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
319e0 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
319f0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
31a00 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31a10 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
31a20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
31a30 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
31a40 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.