/ Hex Artifact Content
Login

Artifact dede894c2990329f8bc5a70da7de44ce8c3c6bf5:


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 32 2a 73 69 7a 65 6f 66 28 75 33 32  ) + 2*sizeof(u32
1ed0: 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20  )*nField + .    
1ee0: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1ef0: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1f00: 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20  sorSize():0);.. 
1f10: 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d   assert( iCur<p-
1f20: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
1f30: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
1f40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1f50: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1f60: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
1f70: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
1f80: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
1f90: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
1fa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
1fb0: 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30  w(pMem, nByte, 0
1fc0: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1fd0: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1fe0: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1ff0: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
2000: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
2010: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
2020: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
2030: 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c  ;.    pCx->nFiel
2040: 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20  d = nField;.    
2050: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
2060: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
2070: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2080: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2090: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
20a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
20c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
20d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
20f0: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2100: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2110: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2120: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
2130: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2140: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2150: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
2160: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
2170: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
2180: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2190: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
21a0: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
21b0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
21c0: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
21d0: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
21e0: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
21f0: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2200: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2210: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2220: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2230: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
2240: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
2250: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
2260: 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72   ){.    double r
2270: 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69  Value;.    i64 i
2280: 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e  Value;.    u8 en
2290: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
22a0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
22b0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  ags&MEM_Str)==0 
22c0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
22d0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
22e0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
22f0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2300: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2310: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f  f( 0==sqlite3Ato
2320: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56  i64(pRec->z, &iV
2330: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2340: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65  nc) ){.      pRe
2350: 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b  c->u.i = iValue;
2360: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2370: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
2380: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2390: 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65  pRec->r = rValue
23a0: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
23b0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
23c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
23d0: 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69  .** Processing i
23e0: 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74  s determine by t
23f0: 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61  he affinity para
2400: 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c  meter:.**.** SQL
2410: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a  ITE_AFF_INTEGER:
2420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  .** SQLITE_AFF_R
2430: 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  EAL:.** SQLITE_A
2440: 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20  FF_NUMERIC:.**  
2450: 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74    Try to convert
2460: 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65   pRec to an inte
2470: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2480: 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66  on or a .**    f
2490: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65  loating-point re
24a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
24b0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
24c0: 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20  sentation.**    
24d0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
24e0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
24f0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2500: 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20  tation is.**    
2510: 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64  always preferred
2520: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66  , even if the af
2530: 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20  finity is REAL, 
2540: 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e  because.**    an
2550: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2560: 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20  ntation is more 
2570: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
2580: 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53  on disk..**.** S
2590: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a  QLITE_AFF_TEXT:.
25a0: 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52  **    Convert pR
25b0: 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70  ec to a text rep
25c0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  resentation..**.
25d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ** SQLITE_AFF_NO
25e0: 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e  NE:.**    No-op.
25f0: 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e    pRec is unchan
2600: 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ged..*/.static v
2610: 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74  oid applyAffinit
2620: 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20  y(.  Mem *pRec, 
2630: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2640: 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61  value to apply a
2650: 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20  ffinity to */.  
2660: 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20  char affinity,  
2670: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
2680: 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
2690: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20  d */.  u8 enc   
26a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
26b0: 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f  e this text enco
26c0: 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28  ding */.){.  if(
26d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
26e0: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
26f0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
2700: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2710: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
2720: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2730: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
2740: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
2750: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
2760: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
2770: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
2780: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2790: 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  tation..    */. 
27a0: 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d     if( 0==(pRec-
27b0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
27c0: 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  && (pRec->flags&
27d0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
27e0: 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t)) ){.      sql
27f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
2800: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b  gify(pRec, enc);
2810: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2820: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2830: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2840: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
2850: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
2860: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
2870: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2880: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2890: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
28a0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
28b0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
28c0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
28d0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
28e0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
28f0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2900: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
2910: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2930: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2940: 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
2950: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2960: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2970: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2980: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2990: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
29a0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
29b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
29c0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
29d0: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
29e0: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
29f0: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2a00: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2a10: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2a20: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2a30: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2a40: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2a50: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2a60: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2a70: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2a80: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2a90: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2aa0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
2ab0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2ac0: 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  al;.  if( pMem->
2ad0: 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  type==SQLITE_TEX
2ae0: 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75  T ){.    applyNu
2af0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2b00: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2b10: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2b20: 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  (pMem);.  }.  re
2b30: 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b  turn pMem->type;
2b40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2b50: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2b60: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2b70: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2b80: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2b90: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2ba0: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2bb0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2bc0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2bd0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2be0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2bf0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2c00: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2c10: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2c20: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2c30: 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  nc);.}..#ifdef S
2c40: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2c50: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2c60: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2c70: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2c80: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2c90: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2ca0: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2cb0: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2cc0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2cd0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2ce0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2cf0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2d00: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2d10: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2d20: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2d30: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2d40: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2d50: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2d60: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2d70: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2d80: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2d90: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2da0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2db0: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2dc0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2dd0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2de0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2df0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2e00: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2e10: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2e20: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2e30: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2e40: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2e50: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2e60: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2e70: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2e80: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2e90: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2ea0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
2eb0: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
2ec0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
2ed0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
2ee0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
2ef0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2f00: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2f10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2f20: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2f30: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
2f40: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2f50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2f60: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
2f70: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
2f80: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
2f90: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fa0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
2fb0: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
2fc0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
2fd0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
2fe0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2ff0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3000: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3010: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3020: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3030: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3040: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3050: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3060: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3070: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3080: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3090: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
30a0: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
30b0: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
30c0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
30d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
30e0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
30f0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3100: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3110: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3120: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3130: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3140: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3150: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3160: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3170: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3180: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3190: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
31a0: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
31b0: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
31c0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
31d0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
31e0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
31f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3200: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3230: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3240: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3250: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3260: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3270: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3280: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3290: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
32a0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
32b0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
32c0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
32d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
32e0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
32f0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3300: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3310: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3320: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3330: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3340: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3350: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3360: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3370: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3380: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3390: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
33a0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
33b0: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
33c0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
33d0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
33e0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
33f0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3400: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3410: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3420: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3430: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3440: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3450: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3460: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3470: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3480: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3490: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
34a0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
34b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
34c0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
34d0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
34e0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
34f0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3500: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3510: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3520: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3530: 4d 45 4d 5f 49 6e 76 61 6c 69 64 20 29 7b 0a 20  MEM_Invalid ){. 
3540: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3550: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3560: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3570: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3580: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3590: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
35a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
35b0: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
35c0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
35d0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
35e0: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
35f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3600: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3610: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3620: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3630: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3640: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3650: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3660: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3670: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3680: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3690: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
36a0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
36b0: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
36c0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
36d0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
36e0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
36f0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
3700: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3710: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
3720: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
3730: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
3740: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3750: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3760: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3770: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3780: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3790: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
37a0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65  intf("\n");.}.#e
37b0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
37c0: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
37d0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
37e0: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
37f0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
3800: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
3810: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
3820: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
3830: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
3840: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
3850: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
3860: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
3870: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
3880: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
3890: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
38a0: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
38b0: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
38c0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
38d0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
38e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b  ./*.** The CHECK
38f0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 6d  _FOR_INTERRUPT m
3900: 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65 72  acro defined her
3910: 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69  e looks to see i
3920: 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
3930: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f 75  _interrupt() rou
3940: 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63 61  tine has been ca
3950: 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61 73  lled.  If it has
3960: 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70   been, then.** p
3970: 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65  rocessing of the
3980: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69 73   VDBE program is
3990: 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a   interrupted..**
39a0: 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 61  .** This macro a
39b0: 64 64 65 64 20 74 6f 20 65 76 65 72 79 20 69 6e  dded to every in
39c0: 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20 64  struction that d
39d0: 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72  oes a jump in or
39e0: 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d  der to.** implem
39f0: 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69  ent a loop.  Thi
3a00: 73 20 74 65 73 74 20 75 73 65 64 20 74 6f 20 62  s test used to b
3a10: 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67 6c  e on every singl
3a20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a  e instruction,.*
3a30: 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e 74  * but that meant
3a40: 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e 67   we more testing
3a50: 20 74 68 61 6e 20 77 65 20 6e 65 65 64 65 64 2e   than we needed.
3a60: 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e    By only testin
3a70: 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e  g the.** flag on
3a80: 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69 6f   jump instructio
3a90: 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28 73 6d  ns, we get a (sm
3aa0: 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72 6f  all) speed impro
3ab0: 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69  vement..*/.#defi
3ac0: 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  ne CHECK_FOR_INT
3ad0: 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28 20  ERRUPT \.   if( 
3ae0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
3af0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
3b00: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
3b10: 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44  pt;...#ifndef ND
3b20: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3b30: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3b40: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3b50: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3b60: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3b70: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3b80: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3b90: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3ba0: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3bb0: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3bc0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3bd0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3be0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3bf0: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3c00: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3c10: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3c20: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3c30: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3c40: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3c50: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3c60: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3c70: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3c80: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3c90: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3ca0: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3cb0: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3cc0: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3cd0: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3ce0: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3cf0: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3d00: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3d10: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3d20: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
3d30: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3d40: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3d50: 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e  m as we can then
3d60: 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73   return..**.** s
3d70: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
3d80: 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61  ady() must be ca
3d90: 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73  lled before this
3da0: 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
3db0: 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68  r to.** close th
3dc0: 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61  e program with a
3dd0: 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61   final OP_Halt a
3de0: 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65  nd to set up the
3df0: 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e   callbacks.** an
3e00: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
3e10: 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a  age pointer..**.
3e20: 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f  ** Whenever a ro
3e30: 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61  w or result data
3e40: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74   is available, t
3e50: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
3e60: 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b   either.** invok
3e70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c  e the result cal
3e80: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
3e90: 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72  is one) or retur
3ea0: 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  n with.** SQLITE
3eb0: 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  _ROW..**.** If a
3ec0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
3ed0: 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b  e to open a lock
3ee0: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
3ef0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
3f00: 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e  * will either in
3f10: 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61  voke the busy ca
3f20: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
3f30: 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77   is one) or it w
3f40: 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51  ill.** return SQ
3f50: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
3f60: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
3f70: 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65  urs, an error me
3f80: 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e  ssage is written
3f90: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
3fa0: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ned.** from sqli
3fb0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
3fc0: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d   p->zErrMsg is m
3fd0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
3fe0: 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20  that memory..** 
3ff0: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  The error code i
4000: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72  s stored in p->r
4010: 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  c and this routi
4020: 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ne returns SQLIT
4030: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49  E_ERROR..**.** I
4040: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65  f the callback e
4050: 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ver returns non-
4060: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70  zero, then the p
4070: 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20  rogram exits.** 
4080: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
4090: 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65  ere will be no e
40a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74  rror message but
40b0: 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64   the p->rc field
40c0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51   is.** set to SQ
40d0: 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74  LITE_ABORT and t
40e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
40f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4100: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65  RROR..**.** A me
4110: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
4120: 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e  error causes p->
4130: 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20  rc to be set to 
4140: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64  SQLITE_NOMEM and
4150: 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65   this.** routine
4160: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
4170: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f  E_ERROR..**.** O
4180: 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72  ther fatal error
4190: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
41a0: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  ERROR..**.** Aft
41b0: 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  er this routine 
41c0: 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71  has finished, sq
41d0: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
41e0: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  e() should be.**
41f0: 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75   used to clean u
4200: 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20  p the mess that 
4210: 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e  was left behind.
4220: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4230: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4240: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4250: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4260: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
4270: 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  =0;             
4280: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
4290: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
42a0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
42b0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
42c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
42d0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
42f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4300: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4310: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4320: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4330: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4340: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4350: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4360: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4370: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4380: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4390: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
43a0: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
43b0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
43c0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
43d0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
43e0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
43f0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4410: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4420: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4430: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
4440: 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20  VmStep = 0;     
4450: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
4460: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74  rtual machine st
4470: 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  eps */.#ifndef S
4480: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4490: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75  ESS_CALLBACK.  u
44a0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
44b0: 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e  sLimit = 0;/* In
44c0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
44d0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
44e0: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
44f0: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
4500: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
4510: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4520: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
4530: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4540: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4550: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4560: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4580: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4590: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
45a0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
45b0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
45c0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
45d0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
45e0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
45f0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a  erand */.  int *
4600: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
4610: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61        /* Permuta
4620: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
4630: 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a  for OP_Compare *
4640: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
4650: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
4660: 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c  d;  /* Saved val
4670: 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69  ue of the last i
4680: 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23  nsert ROWID */.#
4690: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
46a0: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
46d0: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
46e0: 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f  pcode */.  int o
46f0: 72 69 67 50 63 3b 20 20 20 20 20 20 20 20 20 20  rigPc;          
4700: 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d        /* Program
4710: 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72   counter at star
4720: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4730: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4740: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4750: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4760: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4770: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4780: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4790: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
47a0: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
47b0: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
47c0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
47d0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
47e0: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
47f0: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4800: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4810: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4820: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4830: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4840: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4850: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4860: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4870: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4880: 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  || p->rc==SQLITE
4890: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
48a0: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
48b0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
48c0: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
48d0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
48e0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
48f0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4900: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4910: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4920: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4930: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4940: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4950: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4960: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4980: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4990: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
49a0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
49b0: 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62    assert( 0 < db
49c0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ->nProgressOps )
49d0: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
49e0: 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64  imit = (unsigned
49f0: 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c  )p->aCounter[SQL
4a00: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
4a10: 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28  M_STEP];.    if(
4a20: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d   nProgressLimit=
4a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f  =0 ){.      nPro
4a40: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
4a50: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4a60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4a70: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25  nProgressLimit %
4a80: 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e  = (unsigned)db->
4a90: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
4aa0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23    }.  }.#endif.#
4ab0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4ac0: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4ad0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4ae0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4af0: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4b00: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4b10: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4b20: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4b30: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4b40: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4b50: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4b60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4b70: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4b80: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4b90: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4ba0: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
4bb0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4bc0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4bd0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4be0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4bf0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4c00: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4c10: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
4c20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4c30: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4c40: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4c50: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
4c60: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4c70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4c80: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
4c90: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
4ca0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
4cb0: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
4cc0: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
4cd0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
4ce0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
4cf0: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
4d00: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
4d10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
4d20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4d30: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4d40: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
4d50: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
4d60: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
4d70: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4d80: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4d90: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4da0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4db0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4dc0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4dd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4de0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4df0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4e00: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4e10: 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63  OFILE.    origPc
4e20: 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74   = pc;.    start
4e30: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4e40: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4e50: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4e60: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4e70: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4e80: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4e90: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4ea0: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4eb0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4ec0: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
4ed0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4ee0: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
4ef0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4f00: 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70  (stdout, pc, pOp
4f10: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4f20: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4f30: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4f40: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
4f50: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
4f60: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
4f70: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
4f80: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
4f90: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
4fa0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4fb0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
4fc0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4fd0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
4fe0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4ff0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
5000: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5010: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5020: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5030: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
5040: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5050: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
5060: 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69  On any opcode wi
5070: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
5080: 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72  release" tag, fr
5090: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
50a0: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
50b0: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
50c0: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
50d0: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
50e0: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
50f0: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
5100: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
5110: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
5120: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
5130: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
5140: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
5150: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
5160: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5170: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5180: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5190: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
51a0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
51b0: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
51c0: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
51d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
51e0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
51f0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5200: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5210: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5220: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
5230: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
5240: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
5250: 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52  ;.      VdbeMemR
5260: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
5270: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
5280: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
5290: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
52a0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
52b0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
52c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
52d0: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
52e0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
52f0: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5300: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5310: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5320: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5330: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5340: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5350: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5360: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5370: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5380: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5390: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
53a0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
53b0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
53c0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
53d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
53e0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
53f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5400: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5410: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5420: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5430: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5440: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5450: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5460: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5470: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5480: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5490: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
54a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
54b0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
54d0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
54e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
54f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5500: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5510: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5520: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5530: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5540: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5550: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5560: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5570: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5580: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5590: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55a0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55b0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55c0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55d0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
55f0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5600: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5610: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5620: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5630: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5640: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5650: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5660: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5670: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5680: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5690: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56a0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56b0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5710: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5720: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5730: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5740: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5750: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5760: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5770: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5780: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5790: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57a0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57b0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57c0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57d0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57e0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
57f0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5800: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5810: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5820: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5830: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5840: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5850: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5860: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5870: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5880: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5890: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58a0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58b0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58c0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58d0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58e0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
58f0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5900: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5910: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5920: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5930: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5940: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5950: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5960: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5970: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5980: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5990: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59a0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59b0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59c0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59d0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59e0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
59f0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a00: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a10: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a20: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a30: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a40: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a50: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a60: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a70: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a80: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5a90: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5aa0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ab0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ac0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ad0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5ae0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5af0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b00: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b10: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b20: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b30: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b40: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b50: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b60: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b70: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b80: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5b90: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5ba0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bb0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bc0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5bd0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5be0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5bf0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c00: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c10: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c20: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c30: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c40: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c50: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c60: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c70: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c80: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5c90: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5ca0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cb0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cc0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5cd0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5ce0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5cf0: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d00: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d10: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d20: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d30: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d40: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d50: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d60: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d70: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d80: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5d90: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5da0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5db0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dc0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5dd0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e30: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e40: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e50: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e60: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e70: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e80: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5e90: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5ea0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5eb0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ec0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ed0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
5ee0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
5ef0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20   jump */.  pc = 
5f00: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20  pOp->p2 - 1;..  
5f10: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
5f20: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
5f30: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
5f40: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
5f50: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
5f60: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
5f70: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
5f80: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
5f90: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
5fa0: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
5fb0: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
5fc0: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
5fd0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
5fe0: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
5ff0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6000: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6010: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6020: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6030: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6040: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6050: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6060: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6070: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6080: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6090: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
60a0: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
60b0: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
60c0: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
60d0: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
60e0: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
60f0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6100: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6110: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6120: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6130: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6140: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6150: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6160: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6170: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6180: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6190: 70 74 3a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  pt:.  CHECK_FOR_
61a0: 49 4e 54 45 52 52 55 50 54 3b 0a 23 69 66 6e 64  INTERRUPT;.#ifnd
61b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
61c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
61d0: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
61e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
61f0: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
6200: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
6210: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
6220: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
6230: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
6240: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
6250: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
6260: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
6270: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
6280: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6290: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
62a0: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
62b0: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
62c0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
62d0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
62e0: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
62f0: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
6300: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
6310: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
6320: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
6330: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
6340: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
6350: 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65  imit ){.    asse
6360: 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  rt( db->nProgres
6370: 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e  sOps!=0 );.    n
6380: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
6390: 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50  nVmStep + db->nP
63a0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56  rogressOps - (nV
63b0: 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72  mStep%db->nProgr
63c0: 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28  essOps);.    if(
63d0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
63e0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
63f0: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
6400: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
6410: 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
6420: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
6430: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6440: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6450: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6460: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6470: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6480: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6490: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
64a0: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
64b0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
64c0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
64d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
64e0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
64f0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6500: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
6510: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6520: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6530: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6540: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6550: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6560: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6570: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
6580: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6590: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
65a0: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
65b0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
65c0: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
65d0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
65e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
65f0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
6600: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
6610: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
6620: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
6630: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6640: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
6650: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6670: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6680: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6690: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
66a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
66b0: 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31    pc = (int)pIn1
66c0: 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->u.i;.  break;.
66d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59  }../* Opcode:  Y
66e0: 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ield P1 * * * *.
66f0: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
6700: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
6710: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
6720: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6730: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6740: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6750: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  in1 */.  int pcD
6760: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
6770: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6780: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6790: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
67a0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
67b0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
67c0: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
67d0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
67e0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
67f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6800: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6810: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6820: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6830: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
6840: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
6850: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
6860: 72 5b 50 33 5d 20 6e 75 6c 6c 20 74 68 65 6e 20  r[P3] null then 
6870: 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  halt.**.** Check
6880: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6890: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
68a0: 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  t is NULL then H
68b0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
68c0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
68d0: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
68e0: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
68f0: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
6900: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
6910: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
6920: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
6930: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
6940: 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70  -op..** The P5 p
6950: 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20  arameter should 
6960: 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  be 1..*/.case OP
6970: 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20  _HaltIfNull: {  
6980: 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
6990: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
69a0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
69b0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
69c0: 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b  Null)==0 ) break
69d0: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
69e0: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74  ugh into OP_Halt
69f0: 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65   */.}../* Opcode
6a00: 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20  :  Halt P1 P2 * 
6a10: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74  P4 P5.**.** Exit
6a20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6a30: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6a40: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
6a50: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
6a60: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
6a70: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
6a80: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
6a90: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
6aa0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
6ab0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6ac0: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
6ad0: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6ae0: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6af0: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6b00: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6b10: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6b20: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6b30: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6b40: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
6b50: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
6b60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
6b70: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
6b80: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
6b90: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
6ba0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6bb0: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6bc0: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6bd0: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6be0: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6bf0: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6c00: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6c10: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6c20: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6c30: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6c40: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
6c50: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
6c60: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
6c70: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
6c80: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
6c90: 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20  * P5 is a value 
6ca0: 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c  between 0 and 4,
6cb0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74   inclusive, that
6cc0: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34   modifies the P4
6cd0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20   string..**.**  
6ce0: 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65    0:  (no change
6cf0: 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20  ).**    1:  NOT 
6d00: 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66  NULL contraint f
6d10: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
6d20: 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  2:  UNIQUE const
6d30: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
6d40: 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b  .**    3:  CHECK
6d50: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
6d60: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20  ed: P4.**    4: 
6d70: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6d80: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
6d90: 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  P4.**.** If P5 i
6da0: 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50  s not zero and P
6db0: 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  4 is NULL, then 
6dc0: 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72  everything after
6dd0: 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f   the ":" is.** o
6de0: 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  mitted..**.** Th
6df0: 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65  ere is an implie
6e00: 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69  d "Halt 0 0 0" i
6e10: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72  nstruction inser
6e20: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
6e30: 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20  end of.** every 
6e40: 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a  program.  So a j
6e50: 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73  ump past the las
6e60: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  t instruction of
6e70: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20   the program.** 
6e80: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  is the same as e
6e90: 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a  xecuting Halt..*
6ea0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20  /.case OP_Halt: 
6eb0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
6ec0: 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  zType;.  const c
6ed0: 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20  har *zLogFmt;.. 
6ee0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
6ef0: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
6f00: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
6f10: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
6f20: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
6f30: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
6f40: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
6f50: 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
6f60: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
6f70: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
6f80: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
6f90: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
6fa0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6fb0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
6fc0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
6fd0: 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pc = sqlite3Vdbe
6fe0: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
6ff0: 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f  ame);.    lastRo
7000: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
7010: 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  wid;.    if( pOp
7020: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
7030: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
7040: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
7050: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7060: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7070: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7080: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
7090: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
70a0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
70b0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
70c0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
70d0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
70e0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
70f0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7100: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
7110: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
7120: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7130: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7140: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7150: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7160: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7170: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7180: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
7190: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
71a0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
71b0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
71c0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
71d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
71e0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
71f0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7200: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7210: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
7220: 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20    if( p->rc ){. 
7230: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
7240: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
7250: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
7260: 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22  t azType[] = { "
7270: 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51  NOT NULL", "UNIQ
7280: 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20  UE", "CHECK",.  
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45             "FORE
72c0: 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20  IGN KEY" };.    
72d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
72e0: 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c  5>=1 && pOp->p5<
72f0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =4 );.      test
7300: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31  case( pOp->p5==1
7310: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7320: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29  se( pOp->p5==2 )
7330: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7340: 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a  ( pOp->p5==3 );.
7350: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7360: 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20  pOp->p5==4 );.  
7370: 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79      zType = azTy
7380: 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20  pe[pOp->p5-1];. 
7390: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
73a0: 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d  zType = 0;.    }
73b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79  .    assert( zTy
73c0: 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  pe!=0 || pOp->p4
73d0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f  .z!=0 );.    zLo
73e0: 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74  gFmt = "abort at
73f0: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
7400: 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20  ;.    if( zType 
7410: 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
7420: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
7430: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
7440: 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73  sg, db, "%s cons
7450: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25  traint failed: %
7460: 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
7470: 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70              zTyp
7480: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7490: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
74a0: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
74b0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
74c0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
74d0: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
74e0: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  z);.    }else{. 
74f0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7500: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7510: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7520: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a  raint failed", z
7530: 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Type);.    }.   
7540: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
7550: 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70  ->p1, zLogFmt, p
7560: 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
7570: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72  ErrMsg);.  }.  r
7580: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
7590: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
75a0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
75b0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
75c0: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
75d0: 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20  _ERROR );.  if( 
75e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
75f0: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  ){.    p->rc = r
7600: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
7610: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
7620: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7630: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
7640: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
7650: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
7660: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7670: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
7680: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
7690: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
76a0: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
76b0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
76c0: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
76d0: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
76e0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
76f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
7700: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
7710: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7720: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
7730: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
7740: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
7750: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
7760: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7770: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7780: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7790: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
77a0: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
77b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
77c0: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
77d0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
77e0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
77f0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7800: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7810: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7820: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7830: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7840: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7850: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
7860: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7870: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7880: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
7890: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
78a0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
78b0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
78c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
78d0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
78e0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
78f0: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
7900: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7910: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
7920: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
7930: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
7940: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
7950: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7960: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7970: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7980: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7990: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
79a0: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
79b0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
79c0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
79d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
79e0: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
79f0: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
7a00: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
7a10: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
7a20: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
7a30: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
7a40: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7a50: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
7a60: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
7a70: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7a80: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7a90: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7aa0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7ab0: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7ac0: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
7ad0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
7ae0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
7af0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
7b00: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
7b10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7b20: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7b30: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7b40: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7b50: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7b60: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7b70: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7b80: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7b90: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7ba0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7bb0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7bc0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
7bd0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7be0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7bf0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
7c00: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
7c10: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7c20: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7c30: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
7c40: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7c50: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7c60: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7c70: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7c80: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7c90: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7ca0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7cb0: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7cc0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
7cd0: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
7ce0: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
7cf0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
7d00: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
7d10: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
7d20: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7d30: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7d40: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7d50: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7d60: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7d70: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7d80: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7d90: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7da0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7db0: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7dc0: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
7dd0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
7de0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
7df0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
7e00: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
7e10: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7e20: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7e30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
7e40: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7e50: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7e60: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7e70: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
7e80: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
7e90: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
7ea0: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
7eb0: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
7ec0: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
7ed0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7ee0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
7ef0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
7f00: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7f10: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7f20: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7f30: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7f40: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
7f50: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
7f60: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
7f70: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
7f80: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
7f90: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
7fa0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7fb0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7fd0: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
7fe0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7ff0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8000: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8010: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8020: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8030: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8040: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8050: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8060: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8070: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8080: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8090: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
80a0: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
80b0: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
80c0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
80d0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
80e0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
80f0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8100: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8110: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8120: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8130: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8140: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8150: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8160: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
8170: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
8180: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
8190: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
81a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
81b0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
81c0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
81d0: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
81e0: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
81f0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
8200: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8210: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8220: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8230: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
8240: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
8250: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
8260: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
8270: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
8280: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
8290: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
82a0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65   pOut);.    Vdbe
82b0: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
82c0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
82d0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
82e0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
82f0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
8300: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8310: 2a 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P4.** Synopsis
8320: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8330: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8340: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8350: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8360: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8370: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8380: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8390: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
83a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
83b0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
83c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
83d0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
83e0: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
83f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
8400: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
8410: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
8420: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
8430: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8440: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8450: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
8460: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
8470: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
8480: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8490: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
84a0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
84b0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
84c0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
84d0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
84e0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
84f0: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
8500: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
8510: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
8520: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
8530: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
8540: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
8550: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8560: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
8570: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
8580: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8590: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
85a0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
85b0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
85c0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
85d0: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
85e0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
85f0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
8600: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8610: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
8620: 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70  p4.z==p->azVar[p
8630: 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70  Op->p1-1] );.  p
8640: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
8650: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
8660: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
8670: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
8680: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8690: 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  g;.  }.  sqlite3
86a0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
86b0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
86c0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
86d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
86e0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
86f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8700: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
8710: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8720: 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33  r[P2@P3]=r[P1@P3
8730: 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  ].**.** Move the
8740: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
8750: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 20 6f 76  ter P1..P1+P3 ov
8760: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
8770: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 20  ters P2..P2+P3. 
8780: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
8790: 31 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65 66 74  1+P3 are.** left
87a0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
87b0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
87c0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
87d0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
87e0: 33 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 20  3 and P2..P2+P3 
87f0: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
8800: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
8810: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
8820: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
8830: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
8840: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
8850: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
8860: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
8870: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
8880: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
8890: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
88a0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
88b0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
88c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
88d0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
88e0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
88f0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
8900: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
8910: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
8920: 3d 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  =0 && p1>0 && p2
8930: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8940: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
8950: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
8960: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
8970: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
8980: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
8990: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
89a0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
89b0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
89c0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
89d0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
89e0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
89f0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8a00: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
8a10: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
8a20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c   pOut);.    zMal
8a30: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
8a40: 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  loc;.    pOut->z
8a50: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8a60: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
8a70: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
8a80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8a90: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
8aa0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
8ab0: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
8ac0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65  >pScopyFrom<&aMe
8ad0: 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b  m[p1+pOp->p3] ){
8ae0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
8af0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20  opyFrom += p1 - 
8b00: 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23  pOp->p2;.    }.#
8b10: 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e  endif.    pIn1->
8b20: 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f  zMalloc = zMallo
8b30: 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  c;.    REGISTER_
8b40: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
8b50: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
8b60: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
8b70: 69 6c 65 28 20 6e 2d 2d 20 29 3b 0a 20 20 62 72  ile( n-- );.  br
8b80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8b90: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
8ba0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8bb0: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
8bc0: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
8bd0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
8be0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
8bf0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
8c00: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
8c10: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8c20: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
8c30: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
8c40: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
8c50: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
8c60: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
8c70: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
8c80: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
8c90: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
8ca0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
8cb0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
8cc0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8cd0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8ce0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8cf0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8d00: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
8d10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8d20: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8d30: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
8d40: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
8d50: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
8d60: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
8d70: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
8d80: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
8d90: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
8da0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8db0: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
8dc0: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
8dd0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
8de0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
8df0: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
8e00: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8e10: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
8e20: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8e30: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
8e40: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
8e50: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8e60: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
8e70: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
8e80: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8e90: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
8ea0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
8eb0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
8ec0: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
8ed0: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
8ee0: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
8ef0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
8f00: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
8f10: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
8f20: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
8f30: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
8f40: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
8f50: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
8f60: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
8f70: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
8f80: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
8f90: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
8fa0: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
8fb0: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
8fc0: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
8fd0: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
8fe0: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
8ff0: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
9000: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
9010: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
9020: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
9030: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9040: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9050: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9060: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9070: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9080: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
9090: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
90a0: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
90b0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
90c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
90d0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
90e0: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
90f0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
9100: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  In1;.#endif.  br
9110: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9120: 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20  e: ResultRow P1 
9130: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
9140: 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b  psis:  output=r[
9150: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
9160: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
9170: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
9180: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
9190: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
91a0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
91b0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
91c0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
91d0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
91e0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
91f0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
9200: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
9210: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
9220: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
9230: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
9240: 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20  e top P1 values 
9250: 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  as the result.**
9260: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
9270: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
9280: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
9290: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
92a0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
92b0: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
92c0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
92d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
92e0: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
92f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
9300: 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   );..#ifndef SQL
9310: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
9320: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
9330: 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73  Run the progress
9340: 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65   counter just be
9350: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
9360: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
9370: 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26  Progress!=0.   &
9380: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
9390: 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20  ressLimit.   && 
93a0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
93b0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
93c0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
93d0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
93e0: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65  T;.    goto vdbe
93f0: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d  _error_halt;.  }
9400: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
9410: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
9420: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
9430: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
9440: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
9450: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
9460: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9470: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
9480: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
9490: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
94a0: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
94b0: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
94c0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
94d0: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
94e0: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
94f0: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
9500: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
9510: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
9520: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
9530: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
9540: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
9550: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
9560: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
9570: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9580: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
9590: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
95a0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
95b0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
95c0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
95d0: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
95e0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
95f0: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
9600: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
9610: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
9620: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
9630: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
9640: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
9650: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
9660: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
9670: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
9680: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
9690: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
96a0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
96b0: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
96c0: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
96d0: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
96e0: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
96f0: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
9700: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
9710: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
9720: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
9730: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
9740: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
9750: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
9760: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
9770: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
9780: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
9790: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
97a0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
97b0: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
97c0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
97d0: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
97e0: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
97f0: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
9800: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
9810: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
9820: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
9830: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
9840: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
9850: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
9860: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
9870: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
9880: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
9890: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
98a0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
98b0: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
98c0: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
98d0: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
98e0: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
98f0: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
9900: 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
9910: 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20  SQLITE_OK) ){.  
9920: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
9930: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
9940: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
9950: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
9960: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
9970: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
9980: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
9990: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
99a0: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
99b0: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
99c0: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
99d0: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
99e0: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
99f0: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
9a00: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
9a10: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
9a20: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
9a30: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
9a40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9a50: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
9a60: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
9a70: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
9a80: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
9a90: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
9aa0: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
9ab0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
9ac0: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
9ad0: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
9ae0: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
9af0: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
9b00: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
9b10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9b20: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
9b30: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
9b40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9b50: 74 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69  toreType(&pMem[i
9b60: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
9b70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
9b80: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
9b90: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
9ba0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
9bb0: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
9bc0: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
9bd0: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63   */.  p->pc = pc
9be0: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
9bf0: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
9c00: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
9c10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
9c20: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
9c30: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
9c40: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
9c50: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
9c60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9c70: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
9c80: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
9c90: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
9ca0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9cb0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9cc0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
9cd0: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
9ce0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
9cf0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
9d00: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
9d10: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
9d20: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
9d30: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
9d40: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
9d50: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
9d60: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
9d70: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
9d80: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
9d90: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
9da0: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
9db0: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
9dc0: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
9dd0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9de0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
9df0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
9e00: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
9e10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9e20: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
9e30: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
9e40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9e50: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
9e60: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
9e70: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
9e80: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
9e90: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
9ea0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9eb0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9ec0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
9ed0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
9ee0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
9ef0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
9f00: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
9f10: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
9f20: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9f30: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
9f40: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
9f50: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
9f60: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
9f70: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
9f80: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
9f90: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
9fa0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
9fb0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
9fc0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
9fd0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
9fe0: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
9ff0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
a000: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
a010: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
a020: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
a030: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
a040: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
a050: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
a060: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
a070: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
a080: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
a090: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
a0a0: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
a0b0: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
a0c0: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
a0d0: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
a0e0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
a0f0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
a100: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
a110: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
a120: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
a130: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a140: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a150: 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]+r[P2].**.
a160: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
a170: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
a180: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
a190: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
a1a0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
a1b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a1c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a1d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
a1e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a1f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a200: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
a210: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a220: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
a230: 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a  ]*r[P2].**.**.**
a240: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
a250: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a260: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
a270: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a280: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a290: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a2a0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a2b0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a2c0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a2d0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a2e0: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
a2f0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a300: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a310: 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]-r[P1].**.**
a320: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
a330: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a340: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
a350: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a360: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a370: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a380: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a390: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
a3a0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
a3b0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a3c0: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
a3d0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a3e0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a3f0: 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]/r[P1].**.**
a400: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
a410: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a420: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
a430: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a440: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a450: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a460: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
a470: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
a480: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
a490: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
a4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
a4b0: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
a4c0: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
a4d0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a4e0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
a4f0: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
a500: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a510: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
a520: 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ]%r[P1].**.** Co
a530: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
a540: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
a550: 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  r register P2 is
a560: 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20   divided by .** 
a570: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
a580: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a590: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
a5a0: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
a5b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a5c0: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
a5d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
a5e0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
a5f0: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
a600: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a610: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a630: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
a640: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
a650: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
a660: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
a670: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
a680: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
a690: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
a6a0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
a6c0: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
a6d0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
a6e0: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
a6f0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
a700: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
a710: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
a720: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
a730: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
a740: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
a750: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
a760: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
a770: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
a780: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
a790: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
a7a0: 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  ands */.  int fl
a7b0: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
a7c0: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
a7d0: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
a7e0: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
a7f0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
a800: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
a810: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
a820: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
a830: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
a840: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
a850: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
a860: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
a870: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
a880: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
a890: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
a8a0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
a8b0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
a8c0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a8d0: 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  1];.  applyNumer
a8e0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29  icAffinity(pIn1)
a8f0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
a900: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70  [pOp->p2];.  app
a910: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
a920: 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  y(pIn2);.  pOut 
a930: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
a940: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
a950: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
a960: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
a970: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
a980: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a990: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a9a0: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ull;.  if( (pIn1
a9b0: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e  ->flags & pIn2->
a9c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a9d0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  ==MEM_Int ){.   
a9e0: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
a9f0: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
aa00: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
aa10: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
aa20: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
aa30: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
aa40: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
aa50: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
aa60: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
aa70: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
aa80: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
aa90: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
aaa0: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
aab0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
aac0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
aad0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
aae0: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
aaf0: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
ab00: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
ab10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
ab20: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
ab30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
ab40: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
ab50: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
ab60: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
ab70: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
ab80: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
ab90: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
aba0: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
abb0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
abc0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
abd0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
abe0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
abf0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ac00: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ac10: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
ac20: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
ac30: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
ac40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
ac50: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
ac60: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
ac70: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ac80: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ac90: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
aca0: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
acb0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
acc0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
acd0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
ace0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
acf0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
ad00: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
ad10: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
ad20: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
ad30: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
ad40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
ad50: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
ad60: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
ad70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ad80: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
ad90: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
ada0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
adb0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
adc0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
add0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
ade0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
adf0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
ae00: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
ae10: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
ae20: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
ae30: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
ae40: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
ae50: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
ae60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ae70: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
ae80: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
ae90: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
aea0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
aeb0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
aec0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
aed0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
aee0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
aef0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
af00: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
af10: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
af20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
af30: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
af40: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
af50: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
af60: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
af70: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
af80: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
af90: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
afa0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
afb0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
afc0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
afd0: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
afe0: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
aff0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b000: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
b010: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
b020: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
b030: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
b040: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b050: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
b060: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
b070: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
b080: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
b090: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
b0a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b0b0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
b0c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b0d0: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
b0e0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
b0f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
b100: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
b110: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
b120: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
b130: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
b140: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
b150: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
b160: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
b170: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
b180: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
b190: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
b1a0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
b1b0: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
b1c0: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
b1d0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
b1e0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
b1f0: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
b200: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
b210: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
b220: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
b230: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
b240: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
b250: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
b260: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
b270: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
b280: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
b290: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
b2a0: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
b2b0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
b2c0: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
b2d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
b2e0: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
b2f0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
b300: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
b310: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
b320: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
b330: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
b340: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
b350: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
b360: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
b370: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
b380: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
b390: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
b3a0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
b3b0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
b3c0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
b3d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b3e0: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
b3f0: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
b400: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b410: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
b420: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
b430: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b440: 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a  func(r[P2@P5]).*
b450: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
b460: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
b470: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
b480: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
b490: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
b4a0: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
b4b0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
b4c0: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
b4d0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
b4e0: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
b4f0: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
b500: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
b510: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
b520: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
b530: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
b540: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
b550: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
b560: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
b570: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
b580: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
b590: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
b5a0: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
b5b0: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
b5c0: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
b5d0: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
b5e0: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
b5f0: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
b600: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
b610: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
b620: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
b630: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
b640: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
b650: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
b660: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
b670: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
b680: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
b690: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
b6a0: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
b6b0: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
b6c0: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
b6d0: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
b6e0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
b6f0: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
b700: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
b710: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
b720: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
b730: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
b740: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
b750: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
b760: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
b770: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
b780: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
b790: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
b7a0: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
b7b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b7c0: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
b7d0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
b7e0: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
b7f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
b800: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
b810: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
b820: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
b830: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
b840: 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
b850: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
b860: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
b870: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
b880: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
b890: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
b8a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
b8b0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
b8c0: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
b8d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
b8e0: 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20  Valid(pArg) );. 
b8f0: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
b900: 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  rg;.    Deepheme
b910: 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20  ralize(pArg);.  
b920: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b930: 53 74 6f 72 65 54 79 70 65 28 70 41 72 67 29 3b  StoreType(pArg);
b940: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
b950: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
b960: 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Arg);.  }..  ass
b970: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
b980: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
b990: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
b9a0: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63  p->p4.pFunc;.  c
b9b0: 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63  tx.iOp = pc;.  c
b9c0: 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20  tx.pVdbe = p;.. 
b9d0: 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
b9e0: 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
b9f0: 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
ba00: 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
ba10: 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74  ** the pointer t
ba20: 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61  o ctx.s so in ca
ba30: 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
ba40: 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a  tion can use.  *
ba50: 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  * the already al
ba60: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
ba70: 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
ba80: 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a  ting a new one..
ba90: 20 20 2a 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63    */.  memcpy(&c
baa0: 74 78 2e 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65  tx.s, pOut, size
bab0: 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74  of(Mem));.  pOut
bac0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
bad0: 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  ll;.  pOut->xDel
bae0: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d   = 0;.  pOut->zM
baf0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d  alloc = 0;.  Mem
bb00: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
bb10: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
bb20: 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75    ctx.fErrorOrAu
bb30: 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  x = 0;.  if( ctx
bb40: 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67  .pFunc->funcFlag
bb50: 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
bb60: 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
bb70: 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
bb80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
bb90: 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
bba0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20  4_COLLSEQ );.   
bbb0: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
bbc0: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
bbd0: 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70  Seq );.    ctx.p
bbe0: 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  Coll = pOp[-1].p
bbf0: 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64  4.pColl;.  }.  d
bc00: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
bc10: 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74  astRowid;.  (*ct
bc20: 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28  x.pFunc->xFunc)(
bc30: 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
bc40: 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
bc50: 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74  -23230 */.  last
bc60: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
bc70: 52 6f 77 69 64 3b 0a 0a 20 20 69 66 28 20 64 62  Rowid;..  if( db
bc80: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
bc90: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
bca0: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
bcb0: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
bcc0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
bcd0: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
bce0: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
bcf0: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
bd00: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
bd10: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
bd20: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
bd30: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
bd40: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
bd50: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
bd60: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
bd70: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
bd80: 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
bd90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
bda0: 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
bdb0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
bdc0: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
bdd0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
bde0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
bdf0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
be00: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72  */.  if( ctx.fEr
be10: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
be20: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
be30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
be40: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
be50: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
be60: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
be70: 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
be80: 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
be90: 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
bea0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
beb0: 65 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20  eAuxData(p, pc, 
bec0: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20  pOp->p1);.  }.. 
bed0: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
bee0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
bef0: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
bf00: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
bf10: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
bf20: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
bf30: 64 69 6e 67 29 3b 0a 20 20 61 73 73 65 72 74 28  ding);.  assert(
bf40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pOut->flags==ME
bf50: 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63  M_Null );.  memc
bf60: 70 79 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c  py(pOut, &ctx.s,
bf70: 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20   sizeof(Mem));. 
bf80: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
bf90: 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20  MemTooBig(pOut) 
bfa0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
bfb0: 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a  big;.  }..#if 0.
bfc0: 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66    /* The app-def
bfd0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61  ined function ha
bfe0: 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67  s done something
bff0: 20 74 68 61 74 20 61 73 20 63 61 75 73 65 64 20   that as caused 
c000: 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d  this.  ** statem
c010: 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20  ent to expire.  
c020: 28 50 65 72 68 61 70 73 20 74 68 65 20 66 75 6e  (Perhaps the fun
c030: 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c  ction called sql
c040: 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a  ite3_exec().  **
c050: 20 77 69 74 68 20 61 20 43 52 45 41 54 45 20 54   with a CREATE T
c060: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29  ABLE statement.)
c070: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65  .  */.  if( p->e
c080: 78 70 69 72 65 64 20 29 20 72 63 20 3d 20 53 51  xpired ) rc = SQ
c090: 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64  LITE_ABORT;.#end
c0a0: 69 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54  if..  REGISTER_T
c0b0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
c0c0: 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
c0d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
c0e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c0f0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
c100: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c110: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
c120: 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]&r[P2].**.
c130: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
c140: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
c150: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c160: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c170: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c180: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c190: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c1a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c1b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c1c0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c1d0: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
c1e0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c1f0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c  s:  r[P3]=r[P1]|
c200: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c210: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
c220: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c230: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c240: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c250: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c260: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c270: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c280: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c290: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c2a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
c2b0: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
c2c0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c2d0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
c2e0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
c2f0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
c300: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
c310: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
c320: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
c330: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
c340: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
c350: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
c360: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
c370: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c380: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c390: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c3a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c3b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
c3c0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
c3d0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
c3e0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
c3f0: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
c400: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
c410: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c420: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
c430: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
c440: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
c450: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
c460: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
c470: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
c480: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c490: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c4a0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c4b0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c4c0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
c4d0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c4f0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
c500: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c510: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
c520: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
c530: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c540: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
c550: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c560: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
c570: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c580: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
c590: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c5a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
c5b0: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
c5c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c5d0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
c5e0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
c5f0: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
c600: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
c610: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
c620: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
c630: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
c640: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
c650: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
c660: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c670: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
c680: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
c690: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c6a0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
c6b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
c6c0: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
c6d0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
c6e0: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
c6f0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
c700: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
c710: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
c720: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
c730: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
c740: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
c750: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
c760: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
c770: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
c780: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
c790: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
c7a0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
c7b0: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
c7c0: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
c7d0: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
c7e0: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
c7f0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
c800: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
c810: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
c820: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
c830: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
c840: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
c850: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
c860: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
c870: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
c880: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
c890: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
c8a0: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
c8b0: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
c8c0: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
c8d0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
c8e0: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
c8f0: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
c900: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
c910: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
c920: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
c930: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
c940: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
c950: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
c960: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
c970: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
c980: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
c990: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
c9a0: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
c9b0: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
c9c0: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
c9d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
c9e0: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
c9f0: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
ca00: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
ca10: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
ca20: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ca30: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
ca40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ca50: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
ca60: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ca70: 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32    r[P1]=r[P1]+P2
ca80: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
ca90: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
caa0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
cab0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
cac0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
cad0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
cae0: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
caf0: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
cb00: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
cb10: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
cb20: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
cb30: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
cb40: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cb50: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
cb60: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
cb70: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
cb80: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
cb90: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
cba0: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
cbb0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cbc0: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
cbd0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
cbe0: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
cbf0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cc00: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
cc10: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
cc20: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
cc30: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
cc40: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
cc50: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
cc60: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
cc70: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
cc80: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
cc90: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
cca0: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
ccb0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
ccc0: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
ccd0: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
cce0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
ccf0: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
cd00: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cd10: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
cd20: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cd30: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
cd40: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
cd50: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
cd60: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
cd70: 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  g);.    if( (pIn
cd80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
cd90: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
cda0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
cdb0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
cdc0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
cdd0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
cde0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
cdf0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ce00: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
ce10: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
ce20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
ce30: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
ce40: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
ce50: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
ce60: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
ce70: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
ce80: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
ce90: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
cea0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
ceb0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
cec0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
ced0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
cee0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
cef0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
cf00: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
cf10: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
cf20: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
cf30: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
cf40: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
cf50: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
cf60: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
cf70: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
cf80: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
cf90: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
cfa0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
cfb0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
cfc0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
cfd0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
cfe0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
cff0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d000: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d010: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d020: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d030: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d040: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d050: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d060: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d070: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d080: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d090: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d0a0: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
d0b0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
d0c0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d0d0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d0e0: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
d0f0: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
d100: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
d110: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
d120: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d130: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
d140: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
d150: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
d160: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
d170: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
d180: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
d190: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d1a0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d1b0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d1c0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d1d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
d1e0: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
d1f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d200: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
d210: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d220: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d230: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d240: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d250: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d260: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
d270: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
d280: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
d290: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
d2a0: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
d2b0: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
d2c0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
d2d0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
d2e0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
d2f0: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
d300: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
d310: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
d320: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
d330: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
d340: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
d350: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
d360: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
d370: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
d380: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
d390: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
d3a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d3b0: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
d3c0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
d3d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d3e0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
d3f0: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
d400: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
d410: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d420: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
d430: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
d440: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
d450: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
d460: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
d470: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
d480: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
d490: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d4a0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d4b0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d4c0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d4d0: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
d500: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
d510: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d520: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
d530: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d540: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
d550: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d560: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
d570: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
d580: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
d590: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
d5a0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
d5b0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
d5c0: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
d5d0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
d5e0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d5f0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
d600: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
d610: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
d620: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
d630: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
d640: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d650: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
d660: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d670: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
d680: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d690: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d6a0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d6b0: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
d6c0: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
d6d0: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
d6e0: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
d6f0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
d700: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
d710: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
d720: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
d730: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
d740: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
d750: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
d760: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
d770: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
d780: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
d790: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d7a0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d7b0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d7c0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d7d0: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
d7e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d7f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d800: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
d810: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d820: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d830: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
d840: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
d850: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
d860: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
d870: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
d880: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
d890: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d8a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d8b0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d8c0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
d8d0: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
d8e0: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
d8f0: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
d900: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
d910: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d920: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
d930: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
d940: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
d950: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
d960: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d970: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
d980: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
d990: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
d9a0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
d9b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d9c0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d9d0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d9e0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
d9f0: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
da10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
da20: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
da30: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
da40: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
da50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
da60: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
da70: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
da80: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
da90: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
daa0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
dab0: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
dac0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
dad0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
dae0: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
daf0: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
db00: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
db10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
db20: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
db30: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
db40: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
db50: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
db60: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
db70: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
db80: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
db90: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
dba0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
dbb0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
dbc0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
dbd0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
dbe0: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
dbf0: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
dc00: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
dc10: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
dc20: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
dc30: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
dc40: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
dc50: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
dc60: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
dc70: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dc80: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
dc90: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
dca0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
dcb0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
dcc0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
dcd0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dce0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
dcf0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
dd00: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
dd10: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
dd20: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
dd30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
dd40: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
dd50: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
dd60: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
dd70: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dd80: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dd90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dda0: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
ddb0: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
ddc0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ddd0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dde0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
ddf0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
de00: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
de10: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
de20: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
de30: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
de40: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
de50: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
de60: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
de70: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
de80: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
de90: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dea0: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
deb0: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dec0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
ded0: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dee0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
def0: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
df00: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
df10: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
df20: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
df30: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
df40: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
df50: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
df60: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
df70: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
df80: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
df90: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
dfa0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
dfb0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
dfc0: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
dfd0: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
dfe0: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
dff0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e000: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e010: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e020: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e030: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e040: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e050: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e060: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e070: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e080: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e090: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e0a0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e0b0: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e0c0: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e0d0: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e0e0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e0f0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e100: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e110: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e120: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e130: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e140: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e150: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e160: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e170: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e180: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e190: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e1a0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e1b0: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e1c0: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e1d0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e1e0: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e1f0: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e200: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e210: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e220: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e230: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e240: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e250: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e260: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e270: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e280: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e290: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e2a0: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e2b0: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e2c0: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e2d0: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e2e0: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e2f0: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e300: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e310: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e320: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e330: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e340: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e350: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e360: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e370: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e380: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e390: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e3a0: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e3b0: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e3c0: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e3d0: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e3e0: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e3f0: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e400: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e410: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e420: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e430: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e440: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e450: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e460: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e470: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e480: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e490: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e4a0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e4b0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e4c0: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e4d0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e4e0: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e4f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e500: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e510: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e520: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e530: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e540: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e550: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e560: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e570: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e580: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e590: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e5a0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e5b0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e5c0: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e5d0: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e5e0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e5f0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e600: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e610: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e620: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e630: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e640: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e650: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e660: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e670: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e680: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e690: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e6a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e6b0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e6c0: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e6d0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e6e0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e6f0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e700: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e710: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e720: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e730: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e740: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e750: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e760: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e770: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e780: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e790: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e7a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e7b0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e7c0: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e7d0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e7e0: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e7f0: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e800: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e810: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e820: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e830: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e840: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e850: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e860: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e870: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e880: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e890: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e8a0: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e8b0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e8c0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e8d0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e8e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e8f0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e900: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e910: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e920: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e930: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e940: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e950: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e960: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e970: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e980: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e990: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e9a0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e9b0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e9c0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e9d0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e9e0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e9f0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
ea00: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
ea10: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ea20: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
ea30: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
ea40: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ea50: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ea60: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ea70: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ea80: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ea90: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
eaa0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
eab0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
eac0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
ead0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
eae0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
eaf0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
eb00: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
eb10: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
eb20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
eb30: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
eb40: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
eb50: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eb60: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eb70: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eb80: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eb90: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eba0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ebb0: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ebc0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ebd0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ebe0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ebf0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ec00: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ec10: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ec20: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
ec30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ec40: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
ec50: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
ec60: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
ec70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
ec80: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ec90: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ecb0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
ecc0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ecd0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ecf0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
ed00: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ed10: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
ed20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ed30: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
ed40: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ed50: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ed60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ed70: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ed80: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ed90: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
eda0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
edb0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
edc0: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
edd0: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ede0: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
edf0: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ee00: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ee10: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ee20: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
ee30: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ee40: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ee50: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ee60: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ee70: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ee80: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ee90: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
eea0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
eeb0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
eec0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
eed0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
eee0: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
eef0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ef00: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ef10: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ef20: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
ef30: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
ef40: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
ef50: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
ef60: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
ef70: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
ef80: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ef90: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
efa0: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
efb0: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
efc0: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
efd0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
efe0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
eff0: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
f000: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
f010: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
f020: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f030: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
f040: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
f050: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
f060: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
f070: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
f080: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
f090: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f0a0: 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  1&MEM_Null)!=0. 
f0b0: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
f0c0: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
f0d0: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
f0e0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a  MEM_Cleared)==0.
f0f0: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
f100: 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65   res = 0;  /* Re
f110: 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20  sults are equal 
f120: 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
f130: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
f140: 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65    /* Results are
f150: 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20   not equal */.  
f160: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
f170: 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  .      /* SQLITE
f180: 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72  _NULLEQ is clear
f190: 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e   and at least on
f1a0: 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
f1b0: 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  L,.      ** then
f1c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
f1d0: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
f1e0: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
f1f0: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
f200: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f210: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
f220: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
f230: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f240: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
f250: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
f260: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73  p2-1;.      }els
f270: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
f280: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f290: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
f2a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f2b0: 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54  .        MemSetT
f2c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f2d0: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
f2e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f2f0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
f300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
f310: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
f320: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
f330: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f340: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
f350: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
f360: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
f370: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
f380: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
f390: 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
f3a0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
f3b0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
f3c0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c  ing);.      appl
f3d0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
f3e0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
f3f0: 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  ng);.      if( d
f400: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
f410: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
f420: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
f430: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f440: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
f450: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
f460: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
f470: 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e  pIn1);.    Expan
f480: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
f490: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
f4a0: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
f4b0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
f4c0: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  ll);.  }.  switc
f4d0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
f4e0: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
f4f0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
f500: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f510: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
f520: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
f530: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f540: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
f550: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
f560: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f570: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
f580: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
f590: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
f5a0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
f5b0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
f5c0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
f5d0: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
f5e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
f5f0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f600: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
f610: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
f620: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f630: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
f640: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
f650: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f660: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
f670: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
f680: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
f690: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f6a0: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
f6b0: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
f6c0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
f6d0: 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
f6e0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
f6f0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
f700: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
f710: 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e  isters. */.  pIn
f720: 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31  1->flags = (pIn1
f730: 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70  ->flags&~MEM_Typ
f740: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
f750: 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a  &MEM_TypeMask);.
f760: 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
f770: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn3->flags&~ME
f780: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
f790: 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61  lags3&MEM_TypeMa
f7a0: 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sk);.  break;.}.
f7b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
f7c0: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
f7d0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
f7e0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
f7f0: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
f800: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
f810: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
f820: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
f830: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
f840: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
f850: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
f860: 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
f870: 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
f880: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f890: 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
f8a0: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
f8b0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
f8c0: 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
f8d0: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
f8e0: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
f8f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
f900: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
f910: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
f920: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
f930: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
f940: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
f950: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
f960: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
f970: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
f980: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f990: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
f9a0: 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
f9b0: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
f9c0: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
f9d0: 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
f9e0: 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
f9f0: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
fa00: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
fa10: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
fa20: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
fa30: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
fa40: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
fa50: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
fa60: 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
fa70: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
fa80: 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
fa90: 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
faa0: 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
fab0: 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
fac0: 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
fad0: 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
fae0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
faf0: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
fb00: 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
fb10: 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
fb20: 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
fb30: 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
fb40: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
fb50: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
fb60: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
fb70: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
fb80: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
fb90: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
fba0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
fbb0: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
fbc0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
fbd0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
fbe0: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
fbf0: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
fc00: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
fc10: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
fc20: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
fc30: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
fc40: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
fc50: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
fc60: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
fc70: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
fc80: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
fc90: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
fca0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
fcb0: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
fcc0: 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
fcd0: 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
fce0: 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
fcf0: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
fd00: 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
fd10: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
fd20: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
fd30: 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
fd40: 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
fd50: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
fd60: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
fd70: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
fd80: 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
fd90: 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
fda0: 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
fdb0: 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
fdc0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
fdd0: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
fde0: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
fdf0: 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
fe00: 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
fe10: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
fe20: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
fe30: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
fe40: 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
fe50: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
fe60: 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
fe70: 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
fe80: 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
fe90: 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
fea0: 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
feb0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
fec0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
fed0: 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
fee0: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
fef0: 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
ff00: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
ff10: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
ff20: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
ff30: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
ff40: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
ff50: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
ff60: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
ff70: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
ff80: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
ff90: 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
ffa0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
ffb0: 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
ffc0: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
ffd0: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
ffe0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
fff0: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
10000 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10010 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
10020 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
10030 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10040 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
10050 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
10060 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
10070 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
10080 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
10090 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
100a0 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
100b0 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
100c0 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
100d0 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
100e0 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
100f0 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
10100 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
10110 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
10120 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
10130 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
10140 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
10150 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
10160 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
10170 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10180 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
10190 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
101a0 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
101b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
101c0 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
101d0 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
101e0 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
101f0 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10200 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10210 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10220 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10230 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10240 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
10250 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
10260 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
10270 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
10280 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
10290 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
102a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
102b0 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
102c0 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
102d0 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d  pOp->p1 - 1;.  }
102e0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
102f0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
10300 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
10310 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10320 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d  pOp->p3 - 1;.  }
10330 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10340 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
10350 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
10360 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
10370 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
10380 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
10390 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
103a0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
103b0 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
103c0 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
103d0 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
103e0 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
103f0 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10400 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
10410 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10420 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
10430 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10440 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10450 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
10460 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
10470 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
10480 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
10490 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
104a0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
104b0 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
104c0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
104d0 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
104e0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
104f0 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10500 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
10510 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
10520 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10530 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
10540 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
10550 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10560 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
10570 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
10580 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
10590 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
105a0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
105b0 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
105c0 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
105d0 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
105e0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
105f0 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
10600 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
10610 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10620 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
10630 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10640 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
10650 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
10660 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
10670 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
10680 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
10690 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
106a0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
106b0 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
106c0 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
106d0 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
106e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
106f0 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10700 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10710 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
10720 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
10730 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10740 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
10750 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
10760 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10770 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
10780 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
10790 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
107a0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
107b0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
107c0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
107d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
107e0 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
107f0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10800 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
10810 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
10820 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
10830 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
10840 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10850 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
10860 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
10870 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
10880 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
10890 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
108a0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
108b0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
108c0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
108d0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
108e0 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
108f0 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10900 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
10910 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
10920 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
10930 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10940 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
10950 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10960 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
10970 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
10980 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
10990 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
109a0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
109b0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
109c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
109d0 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
109e0 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
109f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
10a00 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
10a10 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10a20 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
10a30 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
10a40 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
10a50 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
10a60 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10a70 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
10a80 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
10a90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10aa0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
10ab0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10ac0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10ad0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
10ae0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10af0 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
10b00 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
10b10 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
10b20 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
10b30 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10b40 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10b50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
10b60 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
10b70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10b80 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
10b90 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
10ba0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
10bb0 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
10bc0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
10bd0 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
10be0 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
10bf0 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
10c00 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
10c10 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
10c20 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
10c30 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
10c40 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
10c50 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10c60 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
10c70 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
10c80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10c90 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
10ca0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
10cb0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10cc0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10cd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10ce0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
10cf0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
10d00 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
10d10 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
10d20 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10d30 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
10d40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
10d50 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
10d60 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f  **.** Check if O
10d70 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69  P_Once flag P1 i
10d80 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75  s set. If so, ju
10d90 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
10da0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
10db0 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67  .** set the flag
10dc0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
10dd0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
10de0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
10df0 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
10e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10e10 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
10e20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
10e30 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  lag );.  if( p->
10e40 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
10e50 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
10e60 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
10e70 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
10e80 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
10e90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10ea0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
10eb0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10ec0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
10ed0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10ee0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
10ef0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
10f00 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
10f10 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
10f20 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
10f30 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10f40 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10f50 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10f60 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f  jump if P3 is no
10f70 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
10f80 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
10f90 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10fa0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10fb0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10fc0 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
10fd0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
10fe0 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
10ff0 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
11000 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
11010 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
11020 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11030 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11040 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20  e jump if P3 is 
11050 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
11060 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
11070 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11080 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
11090 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
110a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
110b0 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
110c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
110d0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
110e0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
110f0 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
11100 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
11110 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11120 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
11130 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11140 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11150 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
11160 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
11170 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
11180 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
11190 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
111a0 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
111b0 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29  c;.  }.  if( c )
111c0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
111d0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
111e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
111f0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
11200 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11210 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c    if r[P1]==NULL
11220 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11230 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11240 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11250 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
11260 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
11270 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
11280 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
11290 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
112a0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
112b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
112c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
112d0 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
112e0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
112f0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11300 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11310 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
11320 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11330 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
11340 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11350 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11360 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11370 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
11380 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
11390 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
113a0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
113b0 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
113c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
113d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
113e0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
113f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11400 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
11410 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
11420 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11430 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
11440 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
11450 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
11460 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
11470 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
11480 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
11490 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
114a0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
114b0 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
114c0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
114d0 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
114e0 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
114f0 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
11500 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11510 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
11520 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
11530 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
11540 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
11550 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
11560 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
11570 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
11580 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
11590 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
115a0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
115b0 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
115c0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
115d0 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
115e0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
115f0 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
11600 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
11610 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
11620 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
11630 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
11640 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
11650 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
11660 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
11670 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
11680 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
11690 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
116a0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
116b0 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
116c0 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
116d0 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
116e0 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
116f0 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
11700 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
11710 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
11720 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
11730 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
11740 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
11750 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
11760 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
11770 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
11780 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
11790 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
117a0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
117b0 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
117c0 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
117d0 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
117e0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
117f0 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
11800 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
11810 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
11820 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
11830 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
11840 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
11850 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
11860 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
11870 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
11880 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
11890 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
118a0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
118b0 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
118c0 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
118d0 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
118e0 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
118f0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11900 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11910 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
11920 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
11930 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
11940 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
11950 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
11960 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
11970 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
11980 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
11990 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
119a0 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
119b0 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
119c0 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
119d0 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
119e0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
119f0 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
11a00 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
11a10 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
11a20 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
11a30 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
11a40 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11a50 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11a60 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
11a70 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
11a80 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
11a90 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
11aa0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
11ab0 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
11ac0 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
11ad0 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
11ae0 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
11af0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
11b00 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
11b10 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
11b20 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
11b30 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
11b40 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
11b50 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11b60 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
11b70 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
11b80 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
11b90 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
11ba0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
11bb0 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
11bc0 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
11bd0 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
11be0 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
11bf0 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
11c00 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
11c10 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
11c20 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
11c30 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11c40 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
11c50 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76  ield */.  u32 av
11c60 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
11c70 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11c80 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
11c90 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
11ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
11cb0 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
11cc0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
11cd0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
11ce0 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
11cf0 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
11d00 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d  ister */..  p2 =
11d10 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
11d20 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
11d30 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
11d40 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
11d50 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
11d60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
11d70 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
11d80 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
11d90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
11da0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
11db0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
11dc0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
11dd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
11de0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
11df0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
11e00 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
11e10 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d  ype;.  aOffset =
11e20 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69   aType + pC->nFi
11e30 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  eld;.#ifndef SQL
11e40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
11e50 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20  TABLE.  assert( 
11e60 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d  pC->pVtabCursor=
11e70 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75  =0 ); /* OP_Colu
11e80 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20  mn never called 
11e90 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  on virtual table
11ea0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72   */.#endif.  pCr
11eb0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
11ec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
11ed0 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75  r!=0 || pC->pseu
11ee0 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20  doTableReg>0 ); 
11ef0 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e  /* pCrsr NULL on
11f00 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
11f10 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
11f20 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  !=0 || pC->nullR
11f30 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f  ow );          /
11f40 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e  * pC->nullRow on
11f50 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
11f60 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  ..  /* If the cu
11f70 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74  rsor cache is st
11f80 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70  ale, bring it up
11f90 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63  -to-date */.  rc
11fa0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
11fb0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
11fc0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
11fd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
11fe0 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  or;.  if( pC->ca
11ff0 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
12000 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e  cheCtr || (pOp->
12010 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
12020 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20  ACHE)!=0 ){.    
12030 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
12040 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72  ){.      if( pCr
12050 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sr==0 ){.       
12060 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
12070 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
12080 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
12090 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
120a0 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20  TableReg];.     
120b0 20 20 20 69 66 28 20 70 43 2d 3e 6d 75 6c 74 69     if( pC->multi
120c0 50 73 65 75 64 6f 20 29 7b 0a 20 20 20 20 20 20  Pseudo ){.      
120d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
120e0 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
120f0 65 73 74 2c 20 70 52 65 67 2b 70 32 2c 20 4d 45  est, pReg+p2, ME
12100 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 20 20  M_Ephem);.      
12110 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
12120 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ze(pDest);.     
12130 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12140 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  umn_out;.       
12150 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72   }.        asser
12160 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
12170 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
12180 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
12190 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
121a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
121b0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
121c0 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70  zRow = avail = p
121d0 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
121e0 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
121f0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
12200 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65  else{.        Me
12210 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
12220 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
12230 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
12240 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
12250 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
12260 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
12270 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  r );.      if( p
12280 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
12290 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
122a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
122b0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
122c0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
122d0 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
122e0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
122f0 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
12300 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20  ize64);.        
12310 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
12320 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65  TE_OK ); /* True
12330 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
12340 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
12350 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20  above */.       
12360 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   /* sqlite3Btree
12370 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75  ParseCellPtr() u
12380 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28  ses getVarint32(
12390 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  ) to extract the
123a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  .        ** payl
123b0 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
123c0 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
123d0 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
123e0 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  to be.        **
123f0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
12400 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20  bits. */.       
12410 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61   assert( (payloa
12420 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45  dSize64 & SQLITE
12430 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29  _MAX_U32)==(u64)
12440 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b  payloadSize64 );
12450 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
12460 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
12470 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20  KeyFetch(pCrsr, 
12480 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20  &avail);.       
12490 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
124a0 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
124b0 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c  ize64;.      }el
124c0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
124d0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
124e0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
124f0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  rsr) );.        
12500 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
12510 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
12520 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e  ize(pCrsr, &pC->
12530 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
12540 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
12550 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
12560 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
12570 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
12580 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12590 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
125a0 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
125b0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
125c0 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
125d0 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
125e0 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
125f0 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
12600 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
12610 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
12620 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
12630 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
12640 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
12650 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12660 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
12670 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
12680 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
12690 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
126a0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
126b0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
126c0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
126d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
126e0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
126f0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
12700 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
12710 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
12720 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
12730 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20  Row, offset);.  
12740 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
12750 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65   = 0;.    aOffse
12760 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[0] = offset;. 
12770 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
12780 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  set ){.      /* 
12790 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
127a0 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
127b0 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
127c0 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
127d0 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
127e0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
127f0 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
12800 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
12810 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
12820 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
12830 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
12840 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
12850 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
12860 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
12870 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
12880 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
12890 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
128a0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
128b0 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d  szRow = 0;.    }
128c0 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
128d0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
128e0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
128f0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
12900 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
12910 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
12920 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
12930 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
12940 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
12950 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
12960 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
12970 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
12980 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
12990 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
129a0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
129b0 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
129c0 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
129d0 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
129e0 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
129f0 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
12a00 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
12a10 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
12a20 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
12a30 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
12a40 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
12a50 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
12a60 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
12a70 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
12a80 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
12a90 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
12aa0 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
12ab0 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
12ac0 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
12ad0 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20  307 || offset > 
12ae0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12af0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
12b00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12b10 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
12b20 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
12b30 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d     }.  }..  /* M
12b40 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73  ake sure at leas
12b50 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31  t the first p2+1
12b60 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20   entries of the 
12b70 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e  header have been
12b80 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64  .  ** parsed and
12b90 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69   valid informati
12ba0 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74  on is in aOffset
12bb0 5b 5d 20 61 6e 64 20 61 54 79 70 65 5b 5d 2e 0a  [] and aType[]..
12bc0 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e    */.  if( pC->n
12bd0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
12be0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
12bf0 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20   is more header 
12c00 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61  available for pa
12c10 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63  rsing in the rec
12c20 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20  ord, try.    ** 
12c30 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74  to extract addit
12c40 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20  ional fields up 
12c50 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31  through the p2+1
12c60 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a  -th field .    *
12c70 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48  /.    if( pC->iH
12c80 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74  drOffset<aOffset
12c90 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  [0] ){.      /* 
12ca0 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20  Make sure zData 
12cb0 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68  points to enough
12cc0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
12cd0 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
12ce0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  er. */.      if(
12cf0 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a   pC->aRow==0 ){.
12d00 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26          memset(&
12d10 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
12d20 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20  sMem));.        
12d30 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12d40 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
12d50 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  sr, 0, aOffset[0
12d60 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ], .            
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73           !pC->is
12d90 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20  Table, &sMem);. 
12da0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
12db0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12dc0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
12dd0 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
12de0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44      }.        zD
12df0 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
12e00 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
12e10 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
12e20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
12e30 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
12e40 6c 6c 20 69 6e 20 61 54 79 70 65 5b 69 5d 20 61  ll in aType[i] a
12e50 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
12e60 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
12e70 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
12e80 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e  .      i = pC->n
12e90 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20  HdrParsed;.     
12ea0 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65   offset = aOffse
12eb0 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72  t[i];.      zHdr
12ec0 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69   = zData + pC->i
12ed0 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20  HdrOffset;.     
12ee0 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61   zEndHdr = zData
12ef0 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20   + aOffset[0];. 
12f00 20 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d       assert( i<=
12f10 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
12f20 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  dr );.      do{.
12f30 20 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72          if( zHdr
12f40 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20  [0]<0x80 ){.    
12f50 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30        t = zHdr[0
12f60 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  ];.          zHd
12f70 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  r++;.        }el
12f80 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
12f90 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
12fa0 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
12fb0 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
12fc0 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20 3d        aType[i] =
12fd0 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69   t;.        szFi
12fe0 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62  eld = sqlite3Vdb
12ff0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
13000 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65  );.        offse
13010 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20  t += szField;.  
13020 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
13030 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20  <szField ){  /* 
13040 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f  True if offset o
13050 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20  verflows */.    
13060 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45        zHdr = &zE
13070 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f  ndHdr[1];  /* Fo
13080 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52  rces SQLITE_CORR
13090 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77  UPT return below
130a0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72   */.          br
130b0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
130c0 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
130d0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
130e0 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d   offset;.      }
130f0 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
13100 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
13110 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61        pC->nHdrPa
13120 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20  rsed = i;.      
13130 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
13140 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44   (u32)(zHdr - zD
13150 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ata);.      if( 
13160 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
13170 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
13180 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
13190 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65  em);.        sMe
131a0 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
131b0 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ll;.      }.  . 
131c0 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61       /* If we ha
131d0 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61  ve read more hea
131e0 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61  der data than wa
131f0 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  s contained in t
13200 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 20  he header,.     
13210 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e   ** or if the en
13220 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
13230 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
13240 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  e past the end o
13250 66 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 72  f the.      ** r
13260 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
13270 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
13280 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
13290 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
132a0 65 6e 64 0a 20 20 20 20 20 20 2a 2a 20 6f 66 20  end.      ** of 
132b0 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e  the record (when
132c0 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73   all fields pres
132d0 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75  ent), then we mu
132e0 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20  st be dealing . 
132f0 20 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63       ** with a c
13300 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e  orrupt database.
13310 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
13320 69 66 28 20 28 7a 48 64 72 20 3e 20 7a 45 6e 64  if( (zHdr > zEnd
13330 48 64 72 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  Hdr).       || (
13340 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
13350 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
13360 20 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48   || (zHdr==zEndH
13370 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43  dr && offset!=pC
13380 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  ->payloadSize). 
13390 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
133a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
133b0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
133c0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
133d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
133e0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66      }..    /* If
133f0 20 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f   after trying to
13400 20 65 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69   extra new entri
13410 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64  es from the head
13420 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69  er, nHdrParsed i
13430 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e  s.    ** still n
13440 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61  ot up to p2, tha
13450 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
13460 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65   record has fewe
13470 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a  r than p2.    **
13480 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68   columns.  So th
13490 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
134a0 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61   either the defa
134b0 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e  ult value or a N
134c0 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
134d0 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
134e0 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20  ed<=p2 ){.      
134f0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
13500 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P4_MEM ){.     
13510 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13520 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
13530 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
13540 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
13550 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13560 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
13570 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
13580 6c 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ll);.      }.   
13590 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
135a0 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  n_out;.    }.  }
135b0 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74  ..  /* Extract t
135c0 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  he content for t
135d0 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d  he p2+1-th colum
135e0 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20  n.  Control can 
135f0 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20  only.  ** reach 
13600 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f  this point if aO
13610 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73  ffset[p2], aOffs
13620 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 61 54  et[p2+1], and aT
13630 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a  ype[p2] are.  **
13640 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f   all valid..  */
13650 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
13660 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a  ->nHdrParsed );.
13670 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
13680 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28  LITE_OK );.  if(
13690 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
136a0 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
136b0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
136c0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
136d0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
136e0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
136f0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
13700 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
13710 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
13720 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
13730 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 56 64 62   page */.    Vdb
13740 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73  eMemRelease(pDes
13750 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
13760 64 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d  dbeSerialGet(pC-
13770 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32  >aRow+aOffset[p2
13780 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  ], aType[p2], pD
13790 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  est);.  }else{. 
137a0 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
137b0 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77  h happens only w
137c0 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f  hen content is o
137d0 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  n overflow pages
137e0 20 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54 79 70   */.    t = aTyp
137f0 65 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20 28  e[p2];.    if( (
13800 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
13810 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
13820 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
13830 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
13840 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
13850 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
13860 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
13870 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
13880 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
13890 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
138a0 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
138b0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
138c0 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
138d0 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  or the typeof() 
138e0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72  function and for
138f0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65  .      ** the le
13900 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
13910 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e   if X is a blob.
13920 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73    So we might as
13930 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20   well use.      
13940 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  ** bogus content
13950 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
13960 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f  ding content fro
13970 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f  m disk.  NULL wo
13980 72 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  rks.      ** for
13990 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61   text and blob a
139a0 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69  nd whatever is i
139b0 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a  n the payloadSiz
139c0 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20  e64 variable.   
139d0 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20     ** will work 
139e0 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65  for everything e
139f0 6c 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73  lse.  Content is
13a00 20 61 6c 73 6f 20 69 72 72 65 6c 65 76 61 6e 74   also irrelevant
13a10 20 69 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   if.      ** the
13a20 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
13a30 69 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a  is 0. */.      z
13a40 44 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28  Data = t<=13 ? (
13a50 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65  u8*)&payloadSize
13a60 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d  64 : 0;.      sM
13a70 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  em.zMalloc = 0;.
13a80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13a90 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
13aa0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
13ab0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13ac0 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
13ad0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
13ae0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
13af0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
13b00 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
13b10 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c  len, !pC->isTabl
13b20 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20        &sMem);.  
13b50 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
13b60 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
13b70 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13b80 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
13b90 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
13ba0 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  *)sMem.z;.    }.
13bb0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13bc0 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20  erialGet(zData, 
13bd0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 2f  t, pDest);.    /
13be0 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
13bf0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
13c00 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
13c10 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 20  data (in the.   
13c20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
13c30 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61  emFromBtree() ca
13c40 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74  ll above) then t
13c50 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20  ransfer control 
13c60 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 64  of that.    ** d
13c70 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
13c80 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
13c90 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
13ca0 75 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54  ucture..    ** T
13cb0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
13cc0 65 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20  emory copy. */. 
13cd0 20 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c     if( sMem.zMal
13ce0 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 61 73 73  loc ){.      ass
13cf0 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65  ert( sMem.z==sMe
13d00 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20  m.zMalloc );.   
13d10 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
13d20 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
13d30 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 61 73  Dyn) );.      as
13d40 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
13d50 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
13d60 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44  |MEM_Str)) || pD
13d70 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
13d80 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66  ;.      pDest->f
13d90 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70  lags &= ~(MEM_Ep
13da0 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b  hem|MEM_Static);
13db0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
13dc0 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
13dd0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20  .      pDest->z 
13de0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
13df0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
13e00 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
13e10 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
13e20 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
13e30 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
13e40 3a 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69  :.  Deephemerali
13e50 7a 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f  ze(pDest);.op_co
13e60 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50  lumn_error:.  UP
13e70 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
13e80 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
13e90 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
13ea0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
13eb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13ec0 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
13ed0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
13ee0 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
13ef0 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41  [P1@P2]).**.** A
13f00 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
13f10 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
13f20 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
13f30 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
13f40 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
13f50 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
13f60 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
13f70 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13f80 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13f90 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13fa0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13fb0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13fc0 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13fd0 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
13fe0 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
13ff0 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
14000 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
14010 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
14020 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
14030 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
14040 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20   char cAff;     
14050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
14060 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
14070 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a  of affinity */..
14080 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
14090 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
140a0 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
140b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
140c0 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
140d0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
140e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
140f0 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20   while( (cAff = 
14100 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21  *(zAffinity++))!
14110 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
14120 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
14130 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  em[(p->nMem-p->n
14140 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
14150 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
14160 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
14170 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
14180 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
14190 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
141a0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
141b0 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
141c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
141d0 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
141e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
141f0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
14200 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
14210 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
14220 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
14230 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
14240 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
14250 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
14260 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
14270 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
14280 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
14290 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
142a0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
142b0 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
142c0 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
142d0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
142e0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
142f0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14300 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
14310 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
14320 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
14330 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
14340 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
14350 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
14360 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
14370 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
14380 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
14390 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
143a0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
143b0 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
143c0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
143d0 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
143e0 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
143f0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14400 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14410 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14420 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14430 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
14440 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
14450 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
14460 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
14470 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
14480 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
14490 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
144a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
144b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
144c0 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
144d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
144e0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
144f0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14500 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14510 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14520 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14530 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
14540 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
14550 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
14560 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
14570 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
14580 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
14590 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
145a0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
145b0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
145c0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
145d0 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
145e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
145f0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14600 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14610 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14620 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14630 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
14640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
14650 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
14660 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
14670 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
14680 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
14690 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
146a0 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
146b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
146c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
146d0 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
146e0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
146f0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14700 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14710 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14720 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14730 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
14740 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
14750 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
14760 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
14770 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
14780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14790 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
147a0 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
147b0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
147d0 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
147e0 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
147f0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14810 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14820 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14830 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14840 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14850 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14860 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14870 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14880 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14890 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
148d0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
148e0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
148f0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
14900 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14910 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14920 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14930 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14940 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14950 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14970 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14980 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14990 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
149a0 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
149b0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
149c0 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
149d0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
149e0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
149f0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
14a00 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14a10 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14a20 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14a30 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14a40 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14a50 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14a60 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14a70 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14a80 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14a90 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14aa0 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14ab0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
14ac0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
14ad0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
14ae0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14af0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
14b00 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
14b10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14b20 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
14b30 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
14b40 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
14b50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14b60 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14b70 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14b80 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
14b90 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
14ba0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14bb0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
14bc0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
14bd0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
14be0 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
14bf0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
14c00 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
14c10 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
14c20 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
14c30 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
14c40 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
14c50 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
14c60 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
14c70 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
14c80 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
14c90 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
14ca0 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
14cb0 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
14cc0 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
14cd0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
14ce0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
14cf0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
14d00 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
14d10 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
14d20 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
14d30 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
14d40 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
14d50 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
14d60 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14d70 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
14d80 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
14d90 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
14da0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
14db0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
14dc0 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
14dd0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 7d 0a 0a  <=pLast );.  }..
14de0 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
14df0 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
14e00 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
14e10 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
14e20 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
14e30 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
14e40 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
14e50 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
14e60 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
14e70 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
14e80 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14e90 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72  pRec) );.    ser
14ea0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
14eb0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14ec0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
14ed0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
14ee0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14ef0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
14f00 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52  ype);.    if( pR
14f10 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
14f20 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
14f30 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20  ( nData ){.     
14f40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
14f50 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
14f60 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
14f70 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
14f80 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
14f90 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70          len -= p
14fa0 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
14fb0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
14fc0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
14fd0 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
14fe0 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a  al_type==127 );.
14ff0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
15000 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29  rial_type==128 )
15010 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65  ;.    nHdr += se
15020 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f  rial_type<=127 ?
15030 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69   1 : sqlite3Vari
15040 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  ntLen(serial_typ
15050 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d  e);.  }while( (-
15060 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29  -pRec)>=pData0 )
15070 3b 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  ;..  /* Add the 
15080 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76  initial header v
15090 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20  arint and total 
150a0 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65  the size */.  te
150b0 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
150c0 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
150d0 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
150e0 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
150f0 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
15100 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
15110 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
15120 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
15130 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
15140 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
15150 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
15160 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
15170 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
15180 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
15190 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
151a0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
151b0 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
151c0 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
151d0 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
151e0 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
151f0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
15200 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
15210 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
15220 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
15230 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
15240 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
15250 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
15260 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
15270 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
15280 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
15290 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
152a0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
152b0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
152c0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
152d0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
152e0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
152f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
15300 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
15310 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
15320 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
15330 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
15340 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
15350 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
15360 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
15370 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
15380 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
15390 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
153a0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
153b0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
153c0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
153d0 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
153e0 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
153f0 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
15400 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
15410 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
15420 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
15430 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15440 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
15450 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
15460 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
15470 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
15480 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
15490 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
154a0 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74  /.    j += sqlit
154b0 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
154c0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20  &zNewRecord[j], 
154d0 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
154e0 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
154f0 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
15500 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
15510 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72   assert( i==nHdr
15520 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d   );.  assert( j=
15530 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
15540 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
15550 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
15560 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
15570 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
15580 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
15590 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
155a0 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
155b0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
155c0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
155d0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
155e0 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
155f0 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
15600 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
15610 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
15620 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
15630 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
15640 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
15650 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
15660 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
15670 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
15680 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
15690 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
156a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
156b0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
156c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
156d0 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
156e0 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
156f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
15700 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
15710 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
15720 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
15730 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
15740 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
15750 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15760 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
15770 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
15780 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
15790 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
157a0 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
157b0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
157c0 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
157d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
157e0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
157f0 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
15800 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
15810 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
15820 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
15830 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
15840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
15850 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
15860 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ry);.  pOut->u.i
15870 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
15880 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
15890 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
158a0 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
158b0 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
158c0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
158d0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
158e0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
158f0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
15900 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
15910 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
15920 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
15930 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
15940 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
15950 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
15960 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
15970 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
15980 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
15990 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
159a0 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
159b0 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
159e0 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
159f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
15a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15a10 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
15a20 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
15a30 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
15a40 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
15a50 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
15a60 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
15a70 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
15a80 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
15a90 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
15aa0 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
15ab0 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
15ac0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
15ad0 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
15ae0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
15af0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
15b00 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
15b10 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
15b20 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
15b30 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
15b40 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
15b50 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
15b60 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
15b70 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
15b80 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
15b90 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
15ba0 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
15bb0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
15bc0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
15bd0 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
15be0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15bf0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
15c00 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
15c10 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
15c20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
15c30 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
15c40 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
15c50 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
15c60 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
15c70 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
15c80 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
15c90 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
15ca0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
15cb0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
15cc0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
15cd0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
15ce0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
15cf0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
15d00 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
15d10 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
15d20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
15d30 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
15d40 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
15d50 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
15d60 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
15d70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
15d80 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
15d90 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
15da0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
15db0 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
15dc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15dd0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
15de0 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
15df0 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
15e00 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
15e10 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
15e20 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
15e30 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
15e40 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
15e50 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
15e60 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
15e70 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
15e80 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
15e90 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
15ea0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
15eb0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
15ec0 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
15ed0 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
15ee0 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
15ef0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
15f00 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15f10 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
15f20 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
15f30 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
15f40 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
15f50 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
15f80 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
15f90 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
15fa0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
15fb0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
15fc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
15fd0 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
15fe0 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
15ff0 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
16000 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
16010 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
16020 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
16030 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
16040 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
16050 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
16060 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
16070 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
16080 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
16090 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
160a0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
160b0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
160c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
160d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
160e0 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
160f0 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
16100 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
16110 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
16120 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
16130 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
16140 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
16150 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
16160 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
16170 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16180 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
16190 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
161a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
161b0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
161c0 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
161d0 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
161e0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
161f0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
16200 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
16210 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
16220 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
16230 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
16240 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
16250 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
16260 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
16270 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16280 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16290 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
162a0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
162b0 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
162c0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
162d0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
162e0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
162f0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
16300 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
16310 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
16320 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
16330 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
16340 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
16350 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
16360 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
16370 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16380 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
16390 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
163a0 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
163b0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
163c0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
163d0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
163e0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
163f0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
16400 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
16410 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
16420 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
16430 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
16440 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
16450 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
16460 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
16470 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16480 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
16490 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
164a0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
164b0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
164c0 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
164d0 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
164e0 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
164f0 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
16500 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
16510 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
16520 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
16530 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
16540 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
16550 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
16560 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
16570 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16580 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16590 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b  ogress".      );
165a0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
165b0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
165c0 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
165d0 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
165e0 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
165f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16600 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
16610 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
16620 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
16630 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
16640 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
16650 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
16660 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
16670 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
16680 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
16690 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
166a0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
166b0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
166c0 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
166d0 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
166e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
166f0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16700 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16710 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
16720 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
16730 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
16740 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16750 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16760 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16770 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
16780 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
16790 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
167a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
167b0 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
167c0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
167d0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
167e0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
167f0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16800 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16810 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
16820 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
16830 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16840 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
16850 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
16860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16870 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
16880 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
16890 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
168a0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
168b0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
168c0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
168d0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
168e0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
168f0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16900 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
16910 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
16920 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  pBt, SQLITE_ABOR
16930 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  T);.          }.
16940 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16950 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
16960 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
16970 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
16980 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
16990 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
169a0 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
169b0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
169c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
169d0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
169e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
169f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16a00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
16a10 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16a20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16a30 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
16a40 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
16a50 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
16a60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
16a70 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
16a80 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
16a90 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
16aa0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
16ab0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
16ac0 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
16ad0 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
16ae0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16af0 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
16b00 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
16b10 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
16b20 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
16b30 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
16b40 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
16b50 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
16b60 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
16b70 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
16b80 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
16b90 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
16ba0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
16bb0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
16bc0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16bd0 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
16be0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
16bf0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
16c00 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
16c10 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
16c20 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
16c30 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
16c40 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
16c50 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
16c60 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
16c70 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
16c80 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
16c90 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
16ca0 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
16cb0 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
16cc0 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
16cd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
16ce0 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
16cf0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
16d00 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
16d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
16d20 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
16d30 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
16d40 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
16d50 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
16d60 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
16d70 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
16d80 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
16d90 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
16da0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
16db0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16dc0 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16dd0 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
16de0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
16df0 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
16e00 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
16e10 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
16e20 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
16e30 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
16e40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
16e50 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
16e60 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
16e70 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
16e80 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
16e90 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
16ea0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
16eb0 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
16ec0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
16ed0 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
16ee0 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
16ef0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
16f00 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
16f10 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
16f20 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
16f30 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
16f40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16f50 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
16f60 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
16f70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16f80 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
16f90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
16fa0 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
16fb0 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
16fc0 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
16fd0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
16fe0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
16ff0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
17000 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
17010 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
17020 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
17030 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
17040 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
17050 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
17060 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
17070 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
17080 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
17090 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
170a0 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
170b0 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
170c0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
170d0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
170e0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
170f0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
17100 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
17110 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
17120 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
17130 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
17140 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17150 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
17160 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
17170 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
17180 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17190 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
171a0 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
171b0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
171c0 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
171d0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
171e0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
171f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17200 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
17210 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17220 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
17230 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
17240 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
17250 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
17260 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
17270 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74  ;..#if 0.  if( t
17280 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
17290 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
172a0 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20  eActive>1 ){.   
172b0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
172c0 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
172d0 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
172e0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
172f0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
17300 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
17310 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
17320 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
17330 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
17340 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
17350 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
17360 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
17370 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
17380 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17390 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
173a0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
173b0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
173c0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
173d0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
173e0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
173f0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17400 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75  .#endif.  if( tu
17410 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
17420 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
17430 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
17440 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17450 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17460 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
17470 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
17480 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
17490 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
174a0 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
174b0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
174c0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
174d0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
174e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
174f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17500 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
17510 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17520 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17530 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17540 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17550 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17560 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
17570 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
17580 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
17590 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
175a0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
175b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
175c0 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
175d0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
175e0 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
175f0 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
17600 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17610 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
17620 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17630 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17640 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17650 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17660 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
17670 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
17680 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
17690 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
176a0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
176b0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
176c0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
176d0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
176e0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
176f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
17700 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
17710 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
17720 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
17730 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
17740 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17750 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17760 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
17770 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
17780 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
17790 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
177a0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
177b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
177c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
177d0 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
177e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
177f0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
17800 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17810 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
17820 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17830 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17840 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
17850 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17860 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
17870 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
17880 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
17890 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
178a0 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
178b0 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
178c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
178d0 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
178e0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
178f0 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
17900 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17910 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
17920 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
17930 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
17940 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17950 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
17960 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
17970 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
17980 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e  ction.  The tran
17990 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65  saction ends whe
179a0 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f  n a Commit or Ro
179b0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65  llback.** opcode
179c0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
179d0 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74    Depending on t
179e0 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73  he ON CONFLICT s
179f0 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74  etting, the.** t
17a00 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
17a10 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20   also be rolled 
17a20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72  back if an error
17a30 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
17a40 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
17a50 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
17a60 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
17a70 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
17a80 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
17a90 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
17aa0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
17ab0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
17ac0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
17ad0 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
17ae0 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
17af0 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
17b00 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
17b10 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
17b20 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
17b30 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
17b40 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
17b50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
17b60 74 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44  ted.  A RESERVED
17b70 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61   lock is.** obta
17b80 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
17b90 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61  base file when a
17ba0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
17bb0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
17bc0 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63  No.** other proc
17bd0 65 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e  ess can start an
17be0 6f 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e  other write tran
17bf0 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68  saction while th
17c00 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  is transaction i
17c10 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20  s.** underway.  
17c20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65  Starting a write
17c30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73   transaction als
17c40 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c  o creates a roll
17c50 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a  back journal. A.
17c60 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  ** write transac
17c70 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
17c80 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  rted before any 
17c90 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d  changes can be m
17ca0 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  ade to the.** da
17cb0 74 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69  tabase.  If P2 i
17cc0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
17cd0 72 20 65 71 75 61 6c 20 74 6f 20 32 20 74 68 65  r equal to 2 the
17ce0 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
17cf0 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 6f  ock is.** also o
17d00 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 66  btained on the f
17d10 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ile..**.** If a 
17d20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
17d30 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
17d40 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
17d50 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
17d60 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
17d70 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
17d80 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
17d90 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
17da0 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
17db0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
17dc0 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
17dd0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17de0 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
17df0 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
17e00 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
17e10 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17e20 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
17e30 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
17e40 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
17e50 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
17e60 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
17e70 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
17e80 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
17e90 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
17ea0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17eb0 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
17ec0 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
17ed0 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
17ee0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
17ef0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
17f00 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
17f10 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
17f20 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
17f30 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
17f40 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
17f50 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
17f60 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
17f70 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
17f80 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
17f90 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
17fa0 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
17fb0 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
17fc0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
17fd0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
17fe0 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
17ff0 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
18000 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
18010 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18020 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
18030 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
18040 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
18050 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18060 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18070 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18080 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18090 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
180a0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
180b0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  )!=0 );.  if( pO
180c0 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
180d0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
180e0 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
180f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
18100 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
18110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18120 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
18130 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18140 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
18150 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
18160 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
18170 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
18180 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
18190 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
181a0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
181b0 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
181c0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
181d0 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
181e0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
181f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18200 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
18210 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18220 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
18230 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
18240 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
18250 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
18260 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18270 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
18280 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
18290 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
182a0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
182b0 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
182c0 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
182d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
182e0 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
182f0 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
18300 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
18310 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18320 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
18330 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
18340 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
18350 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
18360 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
18370 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
18380 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
18390 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
183a0 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
183b0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
183c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
183d0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
183e0 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
183f0 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
18400 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
18410 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
18420 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
18430 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18440 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
18450 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
18460 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
18470 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
18480 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
18490 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
184a0 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
184b0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
184c0 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
184d0 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
184e0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
184f0 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
18500 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
18510 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
18520 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
18530 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18540 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
18550 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18560 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
18570 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
18580 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
18590 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
185a0 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
185b0 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
185c0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
185d0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
185e0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
185f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
18600 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
18610 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
18620 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
18630 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
18640 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
18650 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
18660 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
18670 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
18680 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
18690 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
186a0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
186b0 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
186c0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
186d0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
186e0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
186f0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
18700 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
18710 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
18720 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
18730 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
18740 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
18750 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18770 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
18780 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
18790 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
187a0 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
187b0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
187c0 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
187d0 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
187e0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
187f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
18800 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
18810 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
18820 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
18830 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
18840 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
18850 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
18860 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
18870 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
18880 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a  )<<iDb))!=0 );..
18890 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
188a0 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
188b0 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
188c0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
188d0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
188e0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
188f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
18900 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
18910 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
18920 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
18930 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
18940 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
18950 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
18960 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
18970 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
18980 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
18990 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
189a0 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
189b0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
189c0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
189d0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
189e0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
189f0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
18a00 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
18a10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
18a20 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
18a30 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
18a40 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
18a50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18a60 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
18a70 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
18a80 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
18a90 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
18aa0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
18ab0 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
18ac0 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
18ad0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
18ae0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
18af0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
18b00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18b10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
18b20 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
18b30 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
18b40 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
18b50 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
18b60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18b70 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
18b80 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
18b90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
18ba0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
18bb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
18bc0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
18bd0 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
18be0 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d  , 0) );.  pIn3 =
18bf0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
18c00 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
18c10 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
18c20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
18c30 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
18c40 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
18c50 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
18c60 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
18c70 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
18c80 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
18c90 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
18ca0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
18cb0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
18cc0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
18cd0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
18ce0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
18cf0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
18d00 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
18d10 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
18d20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
18d30 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
18d40 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
18d50 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18d60 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
18d70 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
18d80 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
18d90 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
18da0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
18db0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
18dc0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
18dd0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
18de0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
18df0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
18e00 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
18e10 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
18e20 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
18e30 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
18e40 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
18e50 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
18e60 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
18e70 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
18e80 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
18e90 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
18ea0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
18eb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18ec0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
18ed0 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  fyCookie P1 P2 P
18ee0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
18ef0 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67  k the value of g
18f00 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70  lobal database p
18f10 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
18f20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  0 (the.** schema
18f30 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61   version) and ma
18f40 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71  ke sure it is eq
18f50 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74 68  ual to P2 and th
18f60 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61  at the.** genera
18f70 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20  tion counter on 
18f80 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61  the local schema
18f90 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50 33   parse equals P3
18fa0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
18fb0 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
18fc0 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
18fd0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
18fe0 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
18ff0 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
19000 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
19010 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
19020 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
19030 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
19040 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
19050 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19060 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19070 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19080 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
19090 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
190a0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
190b0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
190c0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
190d0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
190e0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
190f0 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
19100 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
19110 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
19120 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
19130 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
19140 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
19150 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
19160 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
19170 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
19180 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
19190 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
191a0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
191b0 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
191c0 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
191d0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
191e0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
191f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19200 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19210 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
19220 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
19230 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
19240 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
19250 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
19260 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
19270 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
19280 2c 20 30 29 20 29 3b 0a 20 20 61 73 73 65 72 74  , 0) );.  assert
19290 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
192a0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
192b0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
192c0 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
192d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
192e0 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
192f0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
19300 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
19310 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
19320 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
19330 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
19340 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
19350 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
19360 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61  .  }.  if( iMeta
19370 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20 69 47 65  !=pOp->p2 || iGe
19380 6e 21 3d 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  n!=pOp->p3 ){.  
19390 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
193a0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
193b0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
193c0 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
193d0 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
193e0 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
193f0 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
19400 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
19410 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
19420 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
19430 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
19440 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
19450 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
19460 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
19470 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
19480 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
19490 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
194a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
194b0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
194c0 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
194d0 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
194e0 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
194f0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
19500 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
19510 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
19520 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
19530 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
19540 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
19550 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
19560 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
19570 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
19580 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
19590 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
195a0 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
195b0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
195c0 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
195d0 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
195e0 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
195f0 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
19600 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
19610 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
19620 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
19630 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
19640 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
19650 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
19660 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
19670 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
19680 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
19690 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
196a0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
196b0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
196c0 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
196d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
196e0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
196f0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
19700 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
19710 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
19720 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
19730 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20  p->p1);.    }.. 
19740 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
19750 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
19760 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
19770 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19780 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
19790 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
197a0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
197b0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
197c0 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
197d0 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
197e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
197f0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
19800 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
19810 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
19820 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
19830 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
19840 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
19850 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
19860 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
19870 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
19880 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
19890 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
198a0 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
198b0 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
198c0 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
198d0 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
198e0 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
198f0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
19900 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
19910 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
19920 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
19930 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
19940 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
19950 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
19960 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
19970 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
19980 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
19990 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
199a0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
199b0 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
199c0 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
199d0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
199e0 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
199f0 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
19a00 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
19a10 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
19a20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
19a30 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
19a40 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
19a50 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
19a60 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
19a70 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
19a80 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
19a90 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
19aa0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
19ab0 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
19ac0 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
19ad0 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
19ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
19af0 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
19b00 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
19b10 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
19b20 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
19b30 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
19b40 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
19b50 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
19b60 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
19b70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
19b80 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
19b90 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
19ba0 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
19bb0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
19bc0 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
19bd0 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
19be0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
19bf0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
19c00 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
19c10 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
19c20 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
19c30 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
19c40 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
19c50 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
19c60 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
19c70 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
19c80 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
19c90 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
19ca0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
19cb0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
19cc0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
19cd0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
19ce0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
19cf0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
19d00 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
19d10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
19d20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
19d30 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
19d40 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f  so OpenWrite..*/
19d50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19d60 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
19d70 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
19d80 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
19d90 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
19da0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
19db0 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
19dc0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
19dd0 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
19de0 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
19df0 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
19e00 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
19e10 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
19e20 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
19e30 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
19e40 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
19e50 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
19e60 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
19e70 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
19e80 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
19e90 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
19ea0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
19eb0 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
19ec0 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
19ed0 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
19ee0 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
19ef0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
19f00 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
19f10 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
19f20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
19f30 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
19f40 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
19f50 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
19f60 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
19f70 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
19f80 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
19f90 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
19fa0 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
19fb0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
19fc0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
19fd0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
19fe0 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
19ff0 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1a000 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1a010 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1a020 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1a030 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1a040 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1a050 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1a060 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1a070 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1a080 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1a090 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1a0a0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1a0b0 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1a0c0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
1a0d0 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
1a0e0 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
1a0f0 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
1a100 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
1a110 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
1a120 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
1a130 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
1a140 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
1a150 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73   Db *pDb;..  ass
1a160 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f  ert( (pOp->p5&(O
1a170 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50  PFLAG_P2ISREG|OP
1a180 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d  FLAG_BULKCSR))==
1a190 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73  pOp->p5 );.  ass
1a1a0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1a1b0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c  ==OP_OpenWrite |
1a1c0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  | pOp->p5==0 );.
1a1d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1a1e0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1a1f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1a200 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1a210 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1a220 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
1a230 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
1a240 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20  SQLITE_ABORT;.  
1a250 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
1a260 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
1a270 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
1a280 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
1a290 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
1a2a0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1a2b0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1a2c0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
1a2d0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
1a2e0 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d  Mask)1)<<iDb))!=
1a2f0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1a300 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1a310 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1a320 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1a330 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1a340 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1a350 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
1a360 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  1;.    assert( s
1a370 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
1a380 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
1a390 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
1a3a0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1a3b0 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
1a3c0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
1a3d0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
1a3e0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
1a3f0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1a400 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
1a410 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
1a420 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
1a430 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
1a440 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a  FLAG_P2ISREG ){.
1a450 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
1a460 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1a470 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
1a480 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
1a490 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
1a4a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1a4b0 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
1a4c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1a4d0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
1a4e0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
1a4f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1a500 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
1a510 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
1a520 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
1a530 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
1a540 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
1a550 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
1a560 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
1a570 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
1a580 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1a590 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
1a5a0 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
1a5b0 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
1a5c0 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
1a5d0 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1a5e0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1a5f0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
1a600 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
1a610 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
1a620 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
1a630 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
1a640 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
1a650 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
1a660 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
1a670 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a680 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1a690 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1a6a0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1a6b0 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1a6c0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1a6d0 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1a6e0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1a6f0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1a700 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1a710 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1a720 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1a730 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f  >nField+pKeyInfo
1a740 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  ->nXField;.  }el
1a750 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1a760 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1a770 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1a780 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1a790 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a7a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1a7b0 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1a7c0 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1a7d0 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1a7e0 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1a7f0 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1a800 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1a810 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1a820 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1a830 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
1a840 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1a850 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1a860 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1a870 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1a880 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  red = 1;.  rc = 
1a890 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1a8a0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1a8b0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1a8c0 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
1a8d0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1a8e0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1a8f0 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1a900 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1a910 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  AD );.  sqlite3B
1a920 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28  treeCursorHints(
1a930 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28  pCur->pCursor, (
1a940 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1a950 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f  _BULKCSR));..  /
1a960 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f  * Since it perfo
1a970 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c  rms no memory al
1a980 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20  location or IO, 
1a990 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74  the only value t
1a9a0 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  hat.  ** sqlite3
1a9b0 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61  BtreeCursor() ma
1a9c0 79 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49  y return is SQLI
1a9d0 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65  TE_OK. */.  asse
1a9e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1a9f0 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74  K );..  /* Set t
1aa00 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1aa10 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1aa20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1aa30 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1aa40 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1aa50 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1aa60 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1aa70 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1aa80 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1aa90 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1aaa0 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1aab0 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1aac0 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1aad0 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1aae0 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1aaf0 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1ab00 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1ab10 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
1ab20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ab30 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
1ab40 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50  ral P1 P2 * P4 P
1ab50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  5.** Synopsis: n
1ab60 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1ab70 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1ab80 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
1ab90 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
1aba0 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
1abb0 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
1abc0 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
1abd0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1abe0 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
1abf0 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
1ac00 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
1ac10 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
1ac20 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
1ac30 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
1ac40 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
1ac50 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1ac60 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  n the ephemeral 
1ac70 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1ac80 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
1ac90 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
1aca0 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
1acb0 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
1acc0 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
1acd0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1ace0 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
1acf0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1ad00 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
1ad10 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
1ad20 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
1ad30 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  ex..**.** The P5
1ad40 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
1ad50 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20  e a mask of the 
1ad60 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65  BTREE_* flags de
1ad70 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65  fined.** in btre
1ad80 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67  e.h.  These flag
1ad90 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74  s control aspect
1ada0 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69  s of the operati
1adb0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72  on of.** the btr
1adc0 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f  ee.  The BTREE_O
1add0 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20  MIT_JOURNAL and 
1ade0 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61  BTREE_SINGLE fla
1adf0 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20  gs are.** added 
1ae00 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
1ae10 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1ae20 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32  nAutoindex P1 P2
1ae30 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
1ae40 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1ae50 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1ae60 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
1ae70 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
1ae80 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
1ae90 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
1aea0 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
1aeb0 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
1aec0 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
1aed0 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
1aee0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
1aef0 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
1af00 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
1af10 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
1af20 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
1af30 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
1af40 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
1af50 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
1af60 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
1af70 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1af80 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f  fo;..  static co
1af90 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
1afa0 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
1afb0 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
1afc0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1afd0 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
1afe0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
1aff0 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
1b000 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
1b010 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
1b020 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
1b030 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61  RANSIENT_DB;.  a
1b040 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b050 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1b060 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1b070 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1b080 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b090 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1b0a0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1b0b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1b0c0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1b0d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1b0e0 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1b0f0 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1b100 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  pBt, .          
1b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1b120 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b130 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
1b140 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
1b150 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
1b160 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b170 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b180 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
1b190 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
1b1a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b1b0 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
1b1c0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1b1d0 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
1b1e0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
1b1f0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
1b200 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1b210 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
1b220 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
1b230 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
1b240 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1b250 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1b260 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1b270 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
1b280 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1b290 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
1b2a0 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
1b2b0 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
1b2c0 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1b2d0 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d   if( (pKeyInfo =
1b2e0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1b2f0 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  o)!=0 ){.      i
1b300 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
1b310 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1b320 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1b330 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1b340 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1b350 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
1b360 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
1b370 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20  KEY | pOp->p5); 
1b380 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1b390 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b3a0 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
1b3b0 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
1b3c0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1b3d0 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1b3e0 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  =db );.        a
1b3f0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1b400 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1b410 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
1b420 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1b430 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  o;.        rc = 
1b440 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1b450 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e  or(pCx->pBt, pgn
1b460 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  o, 1, pKeyInfo, 
1b470 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
1b480 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1b490 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1b4a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b4b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b4c0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1b4d0 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
1b4e0 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
1b4f0 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
1b500 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
1b510 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f  }.  }.  pCx->isO
1b520 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
1b530 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
1b540 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ED);.  break;.}.
1b550 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1b560 65 72 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34  erOpen P1 * * P4
1b570 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1b580 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  code works like 
1b590 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1b5a0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1b5b0 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73  opens.** a trans
1b5c0 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20  ient index that 
1b5d0 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20  is specifically 
1b5e0 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74  designed to sort
1b5f0 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73   large.** tables
1b600 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e   using an extern
1b610 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c  al merge-sort al
1b620 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65  gorithm..*/.case
1b630 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1b640 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1b650 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1b660 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1b670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1b680 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1b690 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b6a0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1b6b0 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1b6c0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1b6d0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65  _mem;.  pCx->pKe
1b6e0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1b6f0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1b700 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1b710 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61  o->db==db );.  a
1b720 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1b730 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1b740 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  b) );.  rc = sql
1b750 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e  ite3VdbeSorterIn
1b760 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20 62  it(db, pCx);.  b
1b770 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1b780 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
1b790 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
1b7a0 53 79 6e 6f 70 73 69 73 3a 20 63 6f 6e 74 65 6e  Synopsis: conten
1b7b0 74 20 69 6e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a  t in r[P2@P3].**
1b7c0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1b7d0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1b7e0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1b7f0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1b800 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1b810 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1b820 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1b830 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1b840 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1b850 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 77 68  * register P2 wh
1b860 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74  en P5==0.  In ot
1b870 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1b880 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1b890 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1b8a0 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1b8b0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1b8c0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 57 68  register P2.  Wh
1b8d0 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74  en P5==1, then t
1b8e0 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70  he.** row is rep
1b8f0 72 65 73 65 6e 74 65 64 20 62 79 20 50 33 20 63  resented by P3 c
1b900 6f 6e 73 65 63 75 74 69 76 65 20 72 65 67 69 73  onsecutive regis
1b910 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
1b920 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ith P2..**.** A 
1b930 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1b940 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1b950 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1b960 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1b970 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1b980 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1b990 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1b9a0 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1b9b0 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1b9c0 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1b9d0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b9e0 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1b9f0 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1ba00 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1ba10 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1ba20 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1ba30 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1ba40 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1ba50 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1ba60 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1ba70 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1ba80 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1ba90 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1baa0 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1bab0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1bac0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bad0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1bae0 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
1baf0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1bb00 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1bb10 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1bb20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
1bb30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1bb40 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1bb50 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
1bb60 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d  oTableReg = pOp-
1bb70 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1bb80 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
1bb90 6d 75 6c 74 69 50 73 65 75 64 6f 20 3d 20 70 4f  multiPseudo = pO
1bba0 70 2d 3e 70 35 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p5;.  break;.
1bbb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1bbc0 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1bbd0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1bbe0 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1bbf0 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1bc00 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1bc10 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1bc20 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1bc30 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1bc40 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1bc50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1bc60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1bc70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1bc80 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1bc90 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1bca0 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1bcb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1bcc0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1bcd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1bce0 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Ge P1 P2 P3 P4 *
1bcf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1bd00 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1bd10 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1bd20 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1bd30 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1bd40 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1bd50 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1bd60 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1bd70 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1bd80 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1bd90 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1bda0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1bdb0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1bdc0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1bdd0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1bde0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1bdf0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1be00 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1be10 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1be20 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1be30 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1be40 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1be50 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1be60 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1be70 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1be80 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1be90 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1bea0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1beb0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1bec0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1bed0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1bee0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1bef0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1bf00 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1bf10 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
1bf20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1bf30 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50  ode: SeekGt P1 P
1bf40 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1bf50 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1bf60 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1bf70 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1bf80 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1bf90 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1bfa0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1bfb0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1bfc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1bfd0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1bfe0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1bff0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1c000 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1c010 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1c020 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1c030 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1c040 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1c050 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1c060 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1c070 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1c080 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1c090 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1c0a0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1c0b0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
1c0c0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1c0d0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1c0e0 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
1c0f0 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1c100 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1c110 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c120 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1c130 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c140 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1c150 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1c160 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1c170 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20  e: SeekLt P1 P2 
1c180 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
1c190 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c1a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c1b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c1c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c1d0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c1e0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c1f0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c200 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c210 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1c220 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1c230 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1c240 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1c250 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1c260 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1c270 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1c280 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1c290 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1c2a0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1c2b0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1c2c0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1c2d0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1c2e0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1c2f0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1c300 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1c310 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1c320 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1c330 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1c340 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1c350 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1c360 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c370 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1c380 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
1c390 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1c3a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1c3b0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c3c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1c3d0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1c3e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1c3f0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1c400 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1c410 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1c420 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1c430 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1c440 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1c450 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1c460 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1c470 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1c480 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1c490 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1c4a0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1c4b0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1c4c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1c4d0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1c4e0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1c4f0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1c500 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1c510 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1c520 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1c530 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1c540 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1c550 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1c560 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1c570 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c580 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1c590 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1c5a0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1c5b0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c5c0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1c5d0 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1c5e0 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1c5f0 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20  se OP_SeekLt:   
1c600 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1c610 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1c620 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLe:         /*
1c630 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1c640 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20  se OP_SeekGe:   
1c650 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1c660 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1c670 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGt: {       /*
1c680 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1c690 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f  int res;.  int o
1c6a0 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  c;.  VdbeCursor 
1c6b0 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  *pC;.  UnpackedR
1c6c0 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e  ecord r;.  int n
1c6d0 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65  Field;.  i64 iKe
1c6e0 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72  y;      /* The r
1c6f0 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
1c700 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  eek to */..  ass
1c710 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1c720 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1c730 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1c740 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1c750 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1c760 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c770 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c780 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1c790 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1c7a0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c7b0 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLe == OP_SeekL
1c7c0 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+1 );.  assert(
1c7d0 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50   OP_SeekGe == OP
1c7e0 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61  _SeekLt+2 );.  a
1c7f0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74  ssert( OP_SeekGt
1c800 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20   == OP_SeekLt+3 
1c810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1c820 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
1c830 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1c840 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d  sor!=0 );.  oc =
1c850 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
1c860 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1c870 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
1c880 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
1c890 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1c8a0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1c8b0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1c8c0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1c8d0 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1c8e0 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1c8f0 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1c900 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1c910 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
1c920 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74   seek, so covert
1c930 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33   it. */.    pIn3
1c940 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1c950 5d 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  ];.    applyNume
1c960 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1c970 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71  );.    iKey = sq
1c980 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1c990 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 70 43 2d  e(pIn3);.    pC-
1c9a0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1c9b0 30 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  0;..    /* If th
1c9c0 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
1c9d0 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
1c9e0 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
1c9f0 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
1ca00 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1ca10 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1ca20 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1ca30 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1ca40 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1ca50 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
1ca60 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
1ca70 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1ca80 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
1ca90 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1caa0 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1cab0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1cac0 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1cad0 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1cae0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65   ** then the see
1caf0 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  k is not possibl
1cb00 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32  e, so jump to P2
1cb10 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 63 20 3d   */.        pc =
1cb20 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1cb30 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1cb40 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1cb50 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1cb60 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
1cb70 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1cb80 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1cb90 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1cba0 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
1cbb0 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
1cbc0 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
1cbd0 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
1cbe0 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
1cbf0 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
1cc00 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
1cc10 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
1cc20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
1cc30 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
1cc40 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1cc50 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
1cc60 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
1cc70 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
1cc80 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65   pIn3->r<(double
1cc90 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1cca0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1ccb0 47 65 3d 3d 28 4f 50 5f 53 65 65 6b 47 74 2d 31  Ge==(OP_SeekGt-1
1ccc0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1ccd0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 74 3d 3d  ert( OP_SeekLt==
1cce0 28 4f 50 5f 53 65 65 6b 4c 65 2d 31 29 20 29 3b  (OP_SeekLe-1) );
1ccf0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1cd00 20 28 4f 50 5f 53 65 65 6b 4c 65 20 26 20 30 78   (OP_SeekLe & 0x
1cd10 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1cd20 74 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  t & 0x0001) );. 
1cd30 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1cd40 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1cd50 65 6b 47 74 20 26 20 30 78 30 30 30 31 29 20 29  ekGt & 0x0001) )
1cd60 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
1cd70 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1cd80 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1cd90 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
1cda0 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1cdb0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1cdc0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1cdd0 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
1cde0 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
1cdf0 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
1ce00 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  n3->r>(double)iK
1ce10 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1ce20 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 3d  sert( OP_SeekLe=
1ce30 3d 28 4f 50 5f 53 65 65 6b 4c 74 2b 31 29 20 29  =(OP_SeekLt+1) )
1ce40 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ce50 28 20 4f 50 5f 53 65 65 6b 47 74 3d 3d 28 4f 50  ( OP_SeekGt==(OP
1ce60 5f 53 65 65 6b 47 65 2b 31 29 20 29 3b 0a 20 20  _SeekGe+1) );.  
1ce70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1ce80 50 5f 53 65 65 6b 4c 74 20 26 20 30 78 30 30 30  P_SeekLt & 0x000
1ce90 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 65 20 26  1)==(OP_SeekGe &
1cea0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1ceb0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1cec0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
1ced0 74 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  t & 0x0001) ) oc
1cee0 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
1cef0 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
1cf00 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1cf10 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1cf20 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1cf30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1cf40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1cf50 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1cf60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1cf70 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
1cf80 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
1cf90 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1cfa0 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 43  id = 1;.      pC
1cfb0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1cfc0 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ey;.    }.  }els
1cfd0 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  e{.    nField = 
1cfe0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
1cff0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1d000 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1d010 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
1d020 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
1d030 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1d040 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1d050 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
1d060 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
1d070 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1d080 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1d090 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1d0a0 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
1d0b0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
1d0c0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1d0d0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66  {.    **     r.f
1d0e0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1d0f0 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 2a 2a 20  INCRKEY;.    ** 
1d100 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
1d110 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
1d120 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
1d130 2a 2f 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  */.    r.flags =
1d140 20 28 75 38 29 28 55 4e 50 41 43 4b 45 44 5f 49   (u8)(UNPACKED_I
1d150 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f  NCRKEY * (1 & (o
1d160 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29  c - OP_SeekLt)))
1d170 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1d180 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72  !=OP_SeekGt || r
1d190 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44  .flags==UNPACKED
1d1a0 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20  _INCRKEY );.    
1d1b0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1d1c0 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73  eekLe || r.flags
1d1d0 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  ==UNPACKED_INCRK
1d1e0 45 59 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EY );.    assert
1d1f0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1d200 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1d210 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1d220 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e  =OP_SeekLt || r.
1d230 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20  flags==0 );..   
1d240 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1d250 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1d260 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1d270 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1d280 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1d290 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1d2a0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1d2b0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1d2c0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1d2d0 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d  .aMem);.    rc =
1d2e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1d2f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1d300 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
1d310 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1d320 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1d330 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1d340 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d350 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d360 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d370 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  ;.  }.  pC->defe
1d380 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1d390 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d3a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d3b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1d3c0 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
1d3d0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
1d3e0 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
1d3f0 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73  P_SeekGe ){  ass
1d400 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1d410 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1d420 6b 47 74 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGt );.    if( r
1d430 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1d440 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  && oc==OP_SeekGt
1d450 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
1d460 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1d470 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d480 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1d490 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d4a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d4b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1d4c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d4d0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d4e0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1d4f0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1d500 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1d510 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1d520 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 69  _SeekLe );.    i
1d530 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1d540 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1d550 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLt) ){.      r
1d560 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d570 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1d580 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d590 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1d5a0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1d5b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d5c0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1d5d0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d5e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
1d5f0 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
1d600 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
1d610 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
1d620 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
1d630 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1d640 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1d650 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
1d660 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1d670 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1d680 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1d690 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1d6a0 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
1d6b0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d6c0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1d6d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d6e0 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1d6f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
1d700 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  ntkey=r[P2].**.*
1d710 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1d720 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1d730 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1d740 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1d750 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1d760 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1d770 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1d780 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1d790 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1d7a0 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1d7b0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1d7c0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1d7d0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1d7e0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1d7f0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1d800 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1d810 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1d820 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1d830 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1d840 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1d850 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1d860 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1d870 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d880 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d890 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1d8a0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1d8b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1d8c0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1d8d0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1d8e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d8f0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1d900 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1d910 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
1d920 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d  [pOp->p2];.  pC-
1d930 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1d940 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1d950 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d  lue(pIn2);.  pC-
1d960 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d970 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  0;.  pC->deferre
1d980 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62  dMoveto = 1;.  b
1d990 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1d9a0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1d9b0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1d9c0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1d9d0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1d9e0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1d9f0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1da00 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1da10 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1da20 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1da30 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1da40 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1da50 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1da60 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1da70 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1da80 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1da90 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1daa0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1dab0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1dac0 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1dad0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1dae0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1daf0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1db00 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1db10 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1db20 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1db30 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  y..**.** See als
1db40 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
1db50 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
1db60 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
1db70 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1db80 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1db90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1dba0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1dbb0 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1dbc0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1dbd0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1dbe0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1dbf0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1dc00 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1dc10 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1dc20 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1dc30 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1dc40 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1dc50 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1dc60 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1dc70 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1dc80 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1dc90 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1dca0 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1dcb0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1dcc0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1dcd0 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1dce0 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1dcf0 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1dd00 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1dd10 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1dd20 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1dd30 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1dd40 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1dd50 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1dd60 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1dd70 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1dd80 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1dd90 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1dda0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
1ddb0 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
1ddc0 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
1ddd0 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
1dde0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1ddf0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1de00 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1de10 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1de20 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1de30 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1de40 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1de50 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1de60 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1de70 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1de80 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1de90 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1dea0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1deb0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1dec0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1ded0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1dee0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
1def0 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
1df00 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1df10 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1df20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
1df30 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
1df40 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
1df50 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
1df60 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
1df70 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
1df80 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
1df90 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
1dfa0 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
1dfb0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
1dfc0 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
1dfd0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1dfe0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
1dff0 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
1e000 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
1e010 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
1e020 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1e030 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
1e040 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e050 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
1e060 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
1e070 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
1e080 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
1e090 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
1e0a0 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
1e0b0 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
1e0c0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
1e0d0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1e0e0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
1e0f0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
1e100 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20   OP_NoConflict: 
1e110 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e120 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46   */.case OP_NotF
1e130 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1e140 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e150 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1e160 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e170 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1e180 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69  yExists;.  int i
1e190 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1e1a0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1e1b0 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
1e1c0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1e1d0 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
1e1e0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1e1f0 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
1e200 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
1e210 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
1e220 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37  izeof(Mem)*4 + 7
1e230 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
1e240 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
1e250 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
1e260 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
1e270 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1e280 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
1e290 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1e2a0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1e2b0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1e2c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1e2d0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
1e2e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e2f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1e300 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  !=0 );.  pIn3 = 
1e310 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e320 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1e330 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1e340 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e350 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
1e360 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1e370 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1e380 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f  to suppress a co
1e390 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
1e3a0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
1e3b0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
1e3c0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1e3d0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1e3e0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1e3f0 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
1e400 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20   = pIn3;.#ifdef 
1e410 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1e420 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a   {.      int i;.
1e430 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
1e440 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b  <r.nField; i++){
1e450 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e460 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1e470 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20  Mem[i]) );.     
1e480 20 20 20 69 66 28 20 69 20 29 20 52 45 47 49 53     if( i ) REGIS
1e490 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1e4a0 33 2b 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 5d 29  3+i, &r.aMem[i])
1e4b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1e4c0 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 66 6c 61  #endif.    r.fla
1e4d0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1e4e0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1e4f0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1e500 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
1e510 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1e520 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1e530 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
1e540 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1e550 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1e560 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1e570 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70 49    ); .    if( pI
1e580 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
1e590 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
1e5a0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1e5b0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1e5c0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1e5d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1e5e0 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72  o)==0 );  /* zer
1e5f0 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65  oblobs already e
1e600 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73  xpanded */.    s
1e610 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1e620 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1e630 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1e640 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1e650 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c  .    pIdxKey->fl
1e660 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1e670 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1e680 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
1e690 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
1e6a0 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
1e6b0 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
1e6c0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
1e6d0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
1e6e0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
1e6f0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
1e700 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
1e710 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
1e720 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
1e730 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
1e740 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
1e750 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
1e760 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69     if( r.aMem[ii
1e770 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1e780 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  ll ){.        pc
1e790 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e7a0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e7b0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1e7c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1e7d0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1e7e0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1e7f0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1e800 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  res);.  if( pOp-
1e810 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1e820 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1e830 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20  , pFree);.  }.  
1e840 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e850 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
1e860 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
1e870 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
1e880 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1e890 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
1e8a0 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
1e8b0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
1e8c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e8d0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1e8e0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e8f0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
1e900 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1e910 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1e920 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1e930 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1e940 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1e950 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1e960 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e970 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e980 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1e990 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1e9a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e9b0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
1e9c0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1e9d0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
1e9e0 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
1e9f0 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
1ea00 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
1ea10 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
1ea20 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
1ea30 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
1ea40 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
1ea50 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
1ea60 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
1ea70 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  ly to P2.  If P1
1ea80 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
1ea90 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72  record.** with r
1eaa0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61  owid P3 then lea
1eab0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
1eac0 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
1ead0 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a  ecord and fall.*
1eae0 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  * through to the
1eaf0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1eb00 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
1eb10 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
1eb20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
1eb30 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
1eb40 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
1eb50 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
1eb60 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
1eb70 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1eb80 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1eb90 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f  d, NoConflict.*/
1eba0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
1ebb0 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ts: {        /* 
1ebc0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
1ebd0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1ebe0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1ebf0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75  ;.  int res;.  u
1ec00 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33  64 iKey;..  pIn3
1ec10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1ec20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
1ec30 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1ec40 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
1ec50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ec60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ec70 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ec80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ec90 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1eca0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1ecb0 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
1ecc0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1ecd0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70  bleReg==0 );.  p
1ece0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1ecf0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1ed00 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20  rsr!=0 );.  res 
1ed10 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49  = 0;.  iKey = pI
1ed20 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20  n3->u.i;.  rc = 
1ed30 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1ed40 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1ed50 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
1ed60 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52  es);.  pC->lastR
1ed70 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
1ed80 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
1ed90 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31  alid = res==0 ?1
1eda0 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  :0;.  pC->nullRo
1edb0 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 0;.  pC->cac
1edc0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1edd0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65  _STALE;.  pC->de
1ede0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1edf0 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
1ee00 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1ee10 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65  p2 - 1;.    asse
1ee20 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1ee30 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20  alid==0 );.  }. 
1ee40 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1ee50 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a  = res;.  break;.
1ee60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1ee70 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
1ee80 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1ee90 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
1eea0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1eeb0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1eec0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1eed0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1eee0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1eef0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1ef00 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1ef10 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1ef20 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1ef30 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1ef40 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1ef50 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1ef60 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1ef70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1ef80 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1ef90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1efa0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1efb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1efc0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1efd0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1efe0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1eff0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1f000 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
1f010 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
1f020 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
1f030 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1f040 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
1f050 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  wid.**.** Get a 
1f060 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
1f070 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
1f080 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
1f090 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
1f0a0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
1f0b0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
1f0c0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
1f0d0 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
1f0e0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
1f0f0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
1f100 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
1f110 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
1f120 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
1f130 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
1f140 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1f150 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
1f160 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
1f170 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
1f180 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
1f190 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
1f1a0 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
1f1b0 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
1f1c0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
1f1d0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1f1e0 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
1f1f0 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
1f200 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
1f210 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
1f220 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
1f230 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  m, .** an SQLITE
1f240 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1f250 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1f260 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1f270 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1f280 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1f290 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1f2a0 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1f2b0 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1f2c0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1f2d0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1f2e0 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1f2f0 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1f300 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1f310 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1f320 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1f330 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1f340 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1f350 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1f360 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1f370 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1f380 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1f390 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1f3a0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1f3b0 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1f3c0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1f3d0 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1f3e0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1f3f0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1f400 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1f410 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f430 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1f440 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1f450 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1f460 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1f470 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1f480 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1f490 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1f4a0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1f4b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f4c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f4d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1f4e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f4f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1f500 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1f510 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1f520 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1f530 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1f540 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1f550 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1f560 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1f570 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1f580 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1f590 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1f5a0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1f5b0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1f5c0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1f5d0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1f5e0 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1f5f0 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1f600 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1f610 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1f620 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1f630 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1f640 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1f650 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1f660 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1f670 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1f680 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1f690 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1f6a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1f6b0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1f6c0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1f6d0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1f6e0 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1f6f0 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1f700 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1f710 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1f720 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1f730 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1f740 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1f750 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1f760 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1f770 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1f780 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1f790 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1f7a0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1f7b0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1f7c0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1f7d0 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1f7e0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1f7f0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69  ->isTable );..#i
1f800 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
1f810 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
1f820 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
1f830 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
1f840 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
1f850 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1f860 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
1f870 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
1f880 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
1f890 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
1f8a0 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
1f8b0 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
1f8c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1f8d0 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
1f8e0 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
1f8f0 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
1f900 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
1f910 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
1f920 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
1f930 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
1f940 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
1f950 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
1f960 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
1f970 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
1f980 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1f990 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
1f9a0 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61 63  lite3BtreeGetCac
1f9b0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1f9c0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28  rsor);.      if(
1f9d0 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20   v==0 ){.       
1f9e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f9f0 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
1fa00 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1fa10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1fa20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1fa30 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1fa40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1fa50 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1fa60 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
1fa70 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
1fa80 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
1fa90 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   */.        }els
1faa0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  e{.          ass
1fab0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1fac0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
1fad0 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  C->pCursor) );. 
1fae0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1faf0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1fb00 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
1fb10 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  v);.          as
1fb20 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1fb30 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e  _OK );   /* Cann
1fb40 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e  ot fail followin
1fb50 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  g BtreeLast() */
1fb60 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
1fb70 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
1fb80 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75             pC->u
1fb90 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
1fba0 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  1;.          }el
1fbb0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
1fbc0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
1fbd0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
1fbe0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1fbf0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23      }.      }..#
1fc00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1fc10 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
1fc20 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
1fc30 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  p3 ){.        /*
1fc40 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
1fc50 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
1fc60 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
1fc70 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1fc80 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p3>0 );.        
1fc90 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
1fca0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 70  .          for(p
1fcb0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
1fcc0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
1fcd0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
1fce0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
1fcf0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
1fd00 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
1fd10 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
1fd20 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
1fd30 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
1fd40 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
1fd50 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
1fd60 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
1fd70 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65  >p3];.        }e
1fd80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  lse{.          /
1fd90 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1fda0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1fdb0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1fdc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1fdd0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
1fde0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1fdf0 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1fe00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1fe10 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
1fe20 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1fe30 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
1fe40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
1fe50 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
1fe60 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
1fe70 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1fe80 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1fe90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1fea0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1feb0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1fec0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1fed0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1fee0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1fef0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1ff00 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1ff10 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1ff20 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1ff30 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1ff40 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1ff50 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1ff60 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1ff70 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
1ff80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ff90 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1ffa0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1ffb0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1ffc0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1ffd0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1ffe0 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1fff0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
20000 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
20010 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
20020 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
20030 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
20040 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
20050 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
20060 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
20070 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
20080 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
20090 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
200a0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
200b0 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
200c0 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
200d0 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
200e0 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
200f0 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
20100 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
20110 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
20120 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
20130 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
20140 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
20150 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
20160 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
20170 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
20180 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
20190 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
201a0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
201b0 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
201c0 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
201d0 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201f0 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
20200 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
20210 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
20220 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
20230 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
20240 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
20250 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
20260 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20   lastRowid;.    
20270 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
20280 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
20290 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
202a0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b  tive */.      v+
202b0 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
202c0 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63  -zero */.      c
202d0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68  nt = 0;.      wh
202e0 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71  ile(   ((rc = sq
202f0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20300 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
20310 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
20320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20350 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
20360 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
20370 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
20380 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
20390 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20  ++cnt<100)){.   
203a0 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f       /* collisio
203b0 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20  n - try another 
203c0 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a  random rowid */.
203d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
203e0 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
203f0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
20400 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a     if( cnt<5 ){.
20410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79            /* try
20420 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20   "small" random 
20430 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69  rowids for the i
20440 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20  nitial attempts 
20450 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  */.          v &
20460 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
20470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20480 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
20490 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
204a0 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
204b0 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
204c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b     }.        v++
204d0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
204e0 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  zero */.      }.
204f0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20500 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
20510 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
20520 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20530 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
20540 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
20550 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20560 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20570 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20580 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
20590 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
205a0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
205b0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
205c0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
205d0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
205e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
205f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20600 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
20610 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
20620 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
20630 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
20640 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
20650 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
20660 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
20670 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
20680 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
20690 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
206a0 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
206b0 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
206c0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
206d0 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
206e0 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
206f0 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
20700 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
20710 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
20720 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
20730 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
20740 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
20750 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
20760 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
20770 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
20780 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
20790 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
207a0 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
207b0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
207c0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
207d0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
207e0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
207f0 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
20800 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
20810 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
20820 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
20830 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
20840 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
20850 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
20860 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
20870 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
20880 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
20890 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
208a0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
208b0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
208c0 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
208d0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
208e0 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
208f0 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
20900 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
20910 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
20920 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
20930 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
20940 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
20950 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
20960 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
20970 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
20980 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
20990 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
209a0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
209b0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
209c0 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
209d0 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
209e0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
209f0 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
20a00 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
20a10 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
20a20 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
20a30 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
20a40 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
20a50 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
20a60 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
20a70 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
20a80 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
20a90 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
20aa0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
20ab0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
20ac0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
20ad0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
20ae0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
20af0 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
20b00 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
20b10 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
20b20 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
20b30 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
20b40 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
20b50 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
20b60 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
20b70 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
20b80 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
20b90 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
20ba0 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
20bb0 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
20bc0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
20bd0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
20be0 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
20bf0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
20c00 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
20c10 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
20c20 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
20c30 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
20c40 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
20c50 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
20c60 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
20c70 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
20c80 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
20c90 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
20ca0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
20cb0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
20cc0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
20cd0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
20ce0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
20cf0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
20d00 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
20d10 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
20d20 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
20d30 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
20d40 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
20d50 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
20d60 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
20d70 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
20d80 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
20d90 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
20da0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
20db0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
20dc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
20dd0 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
20de0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
20df0 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
20e00 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
20e10 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
20e20 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
20e30 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
20e40 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
20e50 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
20e60 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
20e70 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
20e80 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
20e90 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
20ea0 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
20eb0 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
20ec0 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
20ed0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
20ee0 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
20ef0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
20f00 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
20f10 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
20f20 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
20f30 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
20f40 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
20f50 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
20f60 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
20f70 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
20f80 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
20f90 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
20fa0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
20fb0 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
20fc0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
20fd0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
20fe0 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
20ff0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21000 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
21010 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
21020 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
21030 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
21040 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
21050 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
21060 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
21070 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
21080 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
21090 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
210a0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
210b0 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
210c0 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
210d0 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
210e0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
210f0 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
21100 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
21110 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
21120 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
21130 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
21140 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
21150 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
21160 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21170 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21180 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
21190 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
211a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
211b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
211c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
211d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
211e0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
211f0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
21200 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
21210 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21220 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ble );.  REGISTE
21230 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
21240 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
21250 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21260 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
21270 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
21280 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
21290 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
212a0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
212b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
212c0 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
212d0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
212e0 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
212f0 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
21300 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
21310 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
21320 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
21330 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
21340 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
21350 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21360 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
21370 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
21380 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
21390 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
213a0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
213b0 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
213c0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
213d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
213e0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
213f0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
21400 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
21410 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
21420 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
21430 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
21440 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
21450 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
21460 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
21470 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
21480 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
21490 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
214a0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
214b0 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
214c0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
214d0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
214e0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
214f0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
21500 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
21510 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
21520 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
21530 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
21540 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
21560 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
21570 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50     (pOp->p5 & OP
215a0 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c  FLAG_APPEND)!=0,
215b0 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
215c0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
215d0 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64  lid = 0;.  pC->d
215e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
215f0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
21600 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21610 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
21620 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
21630 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
21640 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
21650 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
21660 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
21670 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
21680 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
21690 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
216a0 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34    zTbl = pOp->p4
216b0 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70  .z;.    op = ((p
216c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
216d0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
216e0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
216f0 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20  TE_INSERT);.    
21700 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21710 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  ble );.    db->x
21720 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
21730 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f  b->pUpdateArg, o
21740 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  p, zDb, zTbl, iK
21750 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
21760 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
21770 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21780 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
21790 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
217a0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
217b0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
217c0 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
217d0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
217e0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75  ng..**.** The cu
217f0 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
21800 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69  t pointing at ei
21810 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
21820 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
21830 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
21840 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
21850 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
21860 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
21870 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
21880 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
21890 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
218a0 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73  op.  Hence it is
218b0 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a   OK to delete.**
218c0 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
218d0 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f  ithin an Next lo
218e0 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
218f0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
21900 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
21910 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
21920 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
21930 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
21940 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
21950 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
21960 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
21970 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
21980 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
21990 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
219a0 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
219b0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
219c0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
219d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
219e0 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
219f0 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
21a00 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
21a10 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
21a20 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
21a30 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
21a40 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
21a50 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
21a60 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
21a70 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
21a80 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
21a90 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
21aa0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
21ab0 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b  e: {.  i64 iKey;
21ac0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21ad0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
21ae0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21af0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21b00 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21b10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21b20 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21b30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21b40 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
21b50 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
21b60 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
21b70 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20  eudotables */.  
21b80 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52  iKey = pC->lastR
21b90 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e  owid;      /* On
21ba0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  ly used for the 
21bb0 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a  update hook */..
21bc0 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65    /* The OP_Dele
21bd0 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73  te opcode always
21be0 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e   follows an OP_N
21bf0 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c  otExists or OP_L
21c00 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43  ast or.  ** OP_C
21c10 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d  olumn on the sam
21c20 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20  e table without 
21c30 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  any intervening 
21c40 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a  operations that.
21c50 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20    ** might move 
21c60 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  or invalidate th
21c70 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65  e cursor.  Hence
21c80 20 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c   cursor pC is al
21c90 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20  ways pointing.  
21ca0 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f  ** to the row to
21cb0 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20   be deleted and 
21cc0 74 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43  the sqlite3VdbeC
21cd0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70  ursorMoveto() op
21ce0 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c  eration.  ** bel
21cf0 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e  ow is always a n
21d00 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20  o-op and cannot 
21d10 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72  fail.  We will r
21d20 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68  un it anyhow, th
21d30 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75  ough,.  ** to gu
21d40 61 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75  ard against futu
21d50 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  re changes to th
21d60 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
21d70 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74  ..  **/.  assert
21d80 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
21d90 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
21da0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
21db0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
21dc0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
21dd0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
21de0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21df0 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ror;..  sqlite3B
21e00 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
21e10 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
21e20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
21e30 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
21e40 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
21e50 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21e60 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
21e70 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
21e80 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
21e90 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
21ea0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
21eb0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21ec0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
21ed0 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
21ee0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
21ef0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
21f00 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
21f10 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
21f40 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
21f50 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20 20  p4.z, iKey);.   
21f60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
21f70 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
21f80 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
21f90 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
21fa0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
21fb0 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
21fc0 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
21fd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
21fe0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
21ff0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
22000 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
22010 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
22020 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
22030 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
22040 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
22050 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
22060 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
22070 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
22080 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
22090 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
220a0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
220b0 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
220c0 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
220d0 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
220e0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
220f0 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
22100 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
22110 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22120 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
22130 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
22140 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  4.** Synopsis:  
22150 69 66 20 6b 65 79 28 50 31 29 21 3d 72 74 72 69  if key(P1)!=rtri
22160 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
22170 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
22180 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
22190 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
221a0 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
221b0 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 74 68  fix of the.** th
221c0 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e  e record blob in
221d0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61   register P3 aga
221e0 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  inst a prefix of
221f0 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
22200 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63  .** the sorter c
22210 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20  ursor currently 
22220 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
22230 66 69 6e 61 6c 20 50 34 20 66 69 65 6c 64 73 20  final P4 fields 
22240 6f 66 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 50  of both.** the P
22250 33 20 61 6e 64 20 73 6f 72 74 65 72 20 72 65 63  3 and sorter rec
22260 6f 72 64 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  ord are ignored.
22270 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
22280 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
22290 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
222a0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
222b0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
222c0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
222d0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
222e0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
222f0 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
22300 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
22310 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
22320 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
22330 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
22340 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
22350 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
22360 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
22370 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
22380 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
22390 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
223a0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
223b0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
223c0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
223d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
223e0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 49 67  t res;.  int nIg
223f0 6e 6f 72 65 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  nore;..  pC = p-
22400 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22410 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
22420 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
22430 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
22440 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
22450 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
22460 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67 6e 6f 72 65  ->p3];.  nIgnore
22470 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
22480 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22490 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
224a0 2c 20 70 49 6e 33 2c 20 6e 49 67 6e 6f 72 65 2c  , pIn3, nIgnore,
224b0 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65   &res);.  if( re
224c0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
224d0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
224e0 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
224f0 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
22500 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22510 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
22520 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
22530 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22540 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
22550 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
22560 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
22570 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
22580 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
22590 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
225a0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
225b0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
225c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
225d0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
225e0 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
225f0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
22600 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
22610 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22620 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
22630 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22640 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22650 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
22660 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22670 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22680 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
22690 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
226a0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
226b0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
226c0 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
226d0 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
226e0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
226f0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
22700 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
22710 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
22720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
22730 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
22740 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
22750 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
22760 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
22770 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
22780 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
22790 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
227a0 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
227b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
227c0 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69  2]=key.**.** Wri
227d0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
227e0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
227f0 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
22800 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
22810 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
22820 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
22830 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
22840 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
22850 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
22860 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
22870 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
22880 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
22890 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
228a0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
228b0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
228c0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
228d0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
228e0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
228f0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22900 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
22910 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
22920 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
22930 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22940 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
22950 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
22960 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
22970 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
22980 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
22990 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
229a0 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
229b0 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
229c0 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
229d0 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
229e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
229f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22a00 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22a10 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22a20 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22a30 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
22a40 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
22a50 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
22a60 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
22a70 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
22a80 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
22a90 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  le==0 || pOp->op
22aa0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
22ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22ac0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22ad0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20   pC->nullRow==0 
22ae0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22af0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
22b00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22b10 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22b20 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
22b30 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
22b40 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
22b50 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
22b60 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  sr) );..  /* The
22b70 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
22b80 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
22b90 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
22ba0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
22bb0 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
22bc0 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
22bd0 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
22be0 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
22bf0 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
22c00 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
22c10 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77  Hence the follow
22c20 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43  ing sqlite3VdbeC
22c30 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
22c40 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a  ll is always.  *
22c50 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61  * a no-op and ca
22c60 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42  n never fail.  B
22c70 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69  ut we leave it i
22c80 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66  n place as a saf
22c90 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ety..  */.  asse
22ca0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22cb0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
22cc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
22cd0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
22ce0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
22cf0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
22d00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22d10 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43  error;..  if( pC
22d20 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
22d30 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
22d40 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
22d50 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
22d60 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
22d70 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
22d80 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
22d90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
22da0 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
22db0 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
22dc0 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
22dd0 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
22de0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
22df0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
22e00 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
22e10 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
22e20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65  = (u32)n64;.  }e
22e30 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  lse{.    VVA_ONL
22e40 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
22e50 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
22e60 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
22e70 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
22e80 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
22e90 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
22ea0 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
22eb0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
22ec0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
22ed0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
22ee0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
22ef0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
22f00 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
22f10 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
22f20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
22f30 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
22f40 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
22f50 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
22f60 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
22f70 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
22f80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22f90 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
22fa0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
22fb0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
22fc0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
22fd0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
22fe0 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
22ff0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
23000 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
23010 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
23020 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
23030 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
23040 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
23050 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
23060 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
23070 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23080 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
23090 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
230a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
230b0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
230c0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
230d0 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
230e0 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
230f0 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
23100 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
23110 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
23120 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
23130 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
23140 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
23150 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
23160 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
23170 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
23180 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
23190 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
231a0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
231b0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
231c0 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
231d0 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
231e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
231f0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
23200 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
23210 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
23220 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
23230 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
23240 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
23250 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
23260 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
23270 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23280 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23290 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
232a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
232b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
232c0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
232d0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
232e0 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e  leReg==0 || pC->
232f0 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
23300 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
23310 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
23320 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
23330 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
23340 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
23350 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
23360 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
23370 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
23380 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23390 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
233a0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
233b0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
233c0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
233d0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
233e0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
233f0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
23400 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23410 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
23420 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
23430 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
23440 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
23450 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
23460 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
23470 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23480 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
234a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
234b0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
234c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
234d0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
234e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
234f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23500 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
23510 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
23520 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
23530 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
23540 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
23550 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
23560 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
23570 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
23580 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23590 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
235a0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
235b0 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
235c0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
235d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
235e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
235f0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
23600 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
23610 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
23620 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
23630 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
23640 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
23650 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
23660 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
23670 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
23680 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
23690 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
236a0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
236b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
236c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
236d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
236e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
236f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23700 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23710 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23720 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
23730 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
23740 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
23750 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23760 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
23770 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
23780 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
23790 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
237a0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
237b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
237c0 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
237d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
237e0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
237f0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
23800 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
23810 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
23820 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
23830 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
23840 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23850 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23860 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23870 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23880 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23890 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
238a0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
238b0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
238c0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
238d0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
238e0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
238f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23900 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23910 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
23920 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
23930 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23940 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
23950 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
23960 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23970 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23980 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23990 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
239a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
239b0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
239c0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
239d0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
239e0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
239f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23a00 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
23a10 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
23a20 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
23a30 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23a40 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72  eto = 0;.  pC->r
23a50 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
23a60 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
23a70 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23a80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
23a90 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20  0 && res ){.    
23aa0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
23ab0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23ac0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
23ad0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
23ae0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23af0 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
23b00 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
23b10 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
23b20 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
23b30 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
23b40 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
23b50 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
23b60 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
23b70 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
23b80 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
23b90 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
23ba0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
23bb0 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
23bc0 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
23bd0 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
23be0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
23bf0 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
23c00 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
23c10 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
23c20 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
23c30 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
23c40 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
23c50 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
23c60 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
23c70 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
23c80 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
23c90 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
23ca0 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
23cb0 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
23cc0 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
23cd0 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
23ce0 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
23cf0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
23d00 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
23d10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23d20 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23d30 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
23d40 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
23d50 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
23d60 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
23d70 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
23d80 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
23d90 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  RT]++;.  /* Fall
23da0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
23db0 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
23dc0 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
23dd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
23de0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
23df0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
23e00 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
23e10 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
23e20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
23e30 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
23e40 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
23e50 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23e60 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
23e70 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
23e80 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
23e90 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
23ea0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
23eb0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
23ec0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23ed0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
23ee0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
23ef0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
23f00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
23f10 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
23f20 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
23f30 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
23f40 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
23f50 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
23f60 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
23f70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23f80 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23f90 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23fa0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23fb0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23fc0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
23fd0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
23fe0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
23ff0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
24000 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   1;.  if( isSort
24010 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
24020 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
24030 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70  rterRewind(db, p
24040 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
24050 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  e{.    pCrsr = p
24060 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  C->pCursor;.    
24070 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
24080 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24090 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
240a0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
240b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
240c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
240d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
240e0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
240f0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24100 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  0;.  }.  pC->nul
24110 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
24120 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24130 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
24140 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
24150 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
24160 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
24170 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24180 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
24190 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 41  2 * * P5.**.** A
241a0 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
241b0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
241c0 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
241d0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
241e0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
241f0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
24200 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
24210 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
24220 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
24230 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
24240 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
24250 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
24260 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
24270 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
24280 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24290 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
242a0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
242b0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
242c0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
242d0 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
242e0 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
242f0 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
24300 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
24310 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
24320 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  gfault..**.** P4
24330 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
24340 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
24350 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
24360 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
24370 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
24380 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
24390 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
243a0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
243b0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
243c0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
243d0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
243e0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
243f0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
24400 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24410 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e  Prev, NextIfOpen
24420 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
24430 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20  extIfOpen P1 P2 
24440 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
24450 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
24460 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
24470 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
24480 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
24490 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
244a0 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
244b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
244c0 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
244d0 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
244e0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
244f0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
24500 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
24510 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
24520 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
24530 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
24540 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
24550 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
24560 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
24570 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
24580 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
24590 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
245a0 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
245b0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
245c0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
245d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
245e0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
245f0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
24600 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
24610 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
24620 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
24630 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
24640 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 34  efined..**.** P4
24650 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
24660 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
24670 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
24680 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
24690 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
246a0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
246b0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
246c0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
246d0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
246e0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
246f0 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
24700 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
24710 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
24720 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
24730 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
24740 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
24750 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
24760 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50  s just like OP_P
24770 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20  rev except that 
24780 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
24790 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
247a0 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
247b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
247c0 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
247d0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
247e0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
247f0 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
24800 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24810 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24820 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
24830 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
24840 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ext(db, pC, &res
24850 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
24860 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
24870 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
24880 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
24890 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
248a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
248b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
248c0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
248d0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
248e0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
248f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24900 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
24910 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24920 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
24930 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24940 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24960 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
24970 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
24980 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24990 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
249a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
249b0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
249c0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
249d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
249e0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
249f0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24a00 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
24a10 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24a20 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
24a30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24a40 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
24a50 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24a60 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24a70 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
24a80 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24a90 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
24aa0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
24ab0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
24ac0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
24ad0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24ae0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
24af0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24b00 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24b10 65 50 72 65 76 69 6f 75 73 29 3b 0a 20 20 72 63  ePrevious);.  rc
24b20 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
24b30 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
24b40 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69   &res);.next_tai
24b50 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
24b60 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24b70 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
24b80 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   ){.    pC->null
24b90 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20  Row = 0;.    pc 
24ba0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
24bb0 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
24bc0 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
24bd0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
24be0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
24bf0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
24c00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
24c10 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
24c20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
24c30 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74  Valid = 0;.  got
24c40 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
24c50 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
24c60 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
24c70 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
24c80 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
24c90 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
24ca0 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
24cb0 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
24cc0 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
24cd0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
24ce0 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
24cf0 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
24d00 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
24d10 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
24d20 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
24d30 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
24d40 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
24d50 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
24d60 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
24d70 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
24d80 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
24d90 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
24da0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
24db0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
24dc0 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
24dd0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
24de0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
24df0 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
24e00 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  _Insert..*/.case
24e10 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
24e20 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
24e30 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
24e40 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
24e50 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
24e60 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
24e70 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
24e80 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
24e90 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
24ea0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24eb0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24ec0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24ed0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24ee0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24ef0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24f00 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
24f10 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
24f20 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
24f30 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
24f40 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
24f50 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
24f60 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
24f70 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24f80 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  ursor;.  if( pOp
24f90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
24fa0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
24fb0 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  ge++;.  assert( 
24fc0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
24fd0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24fe0 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
24ff0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
25000 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
25010 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
25020 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
25030 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25040 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
25050 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b  e(db, pC, pIn2);
25060 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
25070 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
25080 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
25090 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
250a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
250b0 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
250c0 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
250d0 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
250e0 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
250f0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
25100 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
25110 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
25120 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
25130 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
25140 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
25150 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
25160 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25170 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
25180 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25190 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
251a0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
251b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
251c0 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
251d0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
251e0 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
251f0 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
25200 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
25210 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
25220 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
25230 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
25240 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
25250 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
25260 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
25270 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
25280 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
25290 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
252a0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
252b0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
252c0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
252d0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
252e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
252f0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
25300 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
25310 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
25320 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25330 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25340 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25350 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25360 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25370 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
25380 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
25390 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
253a0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
253b0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
253c0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
253d0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
253e0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
253f0 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 66 6c 61 67  Op->p3;.  r.flag
25400 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
25410 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 72 2e 61  FIX_MATCH;.  r.a
25420 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
25430 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
25440 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
25450 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
25460 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
25470 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25480 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
25490 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d   }.#endif.  rc =
254a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
254b0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
254c0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
254d0 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
254e0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
254f0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
25500 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
25510 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61  (pCrsr);.  }.  a
25520 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25530 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25540 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25550 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25560 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25570 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
25580 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
25590 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
255a0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
255b0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
255c0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
255d0 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
255e0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
255f0 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
25600 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
25610 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
25620 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
25630 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
25640 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
25650 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
25660 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
25670 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
25680 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
25690 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
256a0 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
256b0 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
256d0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
256e0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
256f0 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
25700 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f  or *pC;.  i64 ro
25710 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  wid;..  assert( 
25720 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25730 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25740 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25750 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25760 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25770 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
25780 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
25790 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
257a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
257b0 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73  M_Null;.  rc = s
257c0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
257d0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
257e0 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f  ( NEVER(rc) ) go
257f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25800 65 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  error;.  assert(
25810 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25820 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
25830 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
25840 3d 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d  =0 );.  if( !pC-
25850 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
25860 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
25870 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
25880 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
25890 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
258a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
258b0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
258c0 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
258d0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
258e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
258f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25900 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
25910 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
25920 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  wid;.    pOut->f
25930 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
25940 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25950 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
25960 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25970 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
25980 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
25990 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
259a0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
259b0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
259c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
259d0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
259e0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
259f0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25a00 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
25a10 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
25a20 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
25a30 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25a40 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
25a50 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
25a60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25a70 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
25a80 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
25a90 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
25aa0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
25ab0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
25ac0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
25ad0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
25ae0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
25af0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
25b00 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
25b10 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
25b20 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
25b30 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20  on .** prior to 
25b40 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
25b50 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f   This make the o
25b60 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
25b70 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20  IdxGT except.** 
25b80 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20  that if the key 
25b90 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
25ba0 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
25bb0 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63  the key in the c
25bc0 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65  ursor,.** the re
25bd0 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68  sult is false wh
25be0 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62  ereas it would b
25bf0 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47  e true with IdxG
25c00 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T..*/./* Opcode:
25c10 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
25c20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
25c30 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
25c40 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
25c50 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
25c60 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
25c70 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
25c80 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
25c90 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
25ca0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
25cb0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
25cc0 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
25cd0 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
25ce0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
25cf0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
25d00 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
25d10 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
25d20 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
25d30 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
25d40 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
25d50 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
25d60 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
25d70 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
25d80 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
25d90 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
25da0 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
25db0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
25dc0 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
25dd0 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
25de0 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
25df0 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
25e00 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
25e10 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
25e20 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
25e30 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
25e40 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
25e50 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  E: {        /* j
25e60 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
25e70 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
25e80 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
25e90 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
25ea0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25eb0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25ec0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25ed0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25ee0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25ef0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25f00 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
25f10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
25f20 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65  rsor!=0);.  asse
25f30 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25f40 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
25f50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
25f60 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
25f70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25f80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
25f90 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  32 );.  r.pKeyIn
25fa0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
25fb0 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
25fc0 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
25fd0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
25fe0 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
25ff0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
26000 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  | UNPACKED_PREFI
26010 58 5f 4d 41 54 43 48 3b 0a 20 20 7d 65 6c 73 65  X_MATCH;.  }else
26020 7b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20  {.    r.flags = 
26030 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
26040 4d 41 54 43 48 3b 0a 20 20 7d 0a 20 20 72 2e 61  MATCH;.  }.  r.a
26050 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
26060 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
26070 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
26080 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
26090 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
260a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
260b0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
260c0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20   }.#endif.  res 
260d0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
260e0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
260f0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
26100 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
26110 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
26120 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c  yCompare(pC, &r,
26130 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f   &res);.  if( pO
26140 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
26150 78 4c 54 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  xLT ){.    res =
26160 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a   -res;.  }else{.
26170 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26180 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
26190 45 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  E );.    res++;.
261a0 20 20 7d 0a 20 20 69 66 28 20 72 65 73 3e 30 20    }.  if( res>0 
261b0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
261c0 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20  >p2 - 1 ;.  }.  
261d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
261e0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
261f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
26200 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
26210 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
26220 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
26230 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
26240 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
26250 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
26260 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
26270 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
26280 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
26290 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
262a0 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
262b0 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
262c0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
262d0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
262e0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
262f0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
26300 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
26310 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
26320 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
26330 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
26340 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
26350 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
26360 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
26370 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
26380 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
26390 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
263a0 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
263b0 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
263c0 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
263d0 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
263e0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
263f0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
26400 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
26410 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
26420 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
26430 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
26440 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
26450 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
26460 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
26470 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
26480 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
26490 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
264a0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
264b0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
264c0 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
264d0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
264e0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
264f0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
26500 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
26510 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
26520 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
26530 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
26540 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26550 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
26560 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
26570 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
26580 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
26590 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
265a0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
265b0 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
265c0 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
265d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
265e0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69  eadOnly==0 );.#i
265f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26600 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
26610 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
26620 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
26630 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
26640 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
26650 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
26660 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
26670 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62  _RUN && pVdbe->b
26680 49 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26  IsReader .     &
26690 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
266a0 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
266b0 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a  ->pc>=0 .    ){.
266c0 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20        iCnt++;.  
266d0 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20    }.  }.#else.  
266e0 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65  iCnt = db->nVdbe
266f0 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70  Read;.#endif.  p
26700 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26710 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
26720 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
26730 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
26740 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
26750 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
26760 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
26770 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
26780 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
26790 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
267a0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
267b0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
267c0 29 21 3d 30 20 29 3b 0a 20 20 20 20 69 4d 6f 76  )!=0 );.    iMov
267d0 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
267e0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
267f0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
26800 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
26810 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
26820 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
26830 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
26840 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
26850 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26860 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
26870 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
26880 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26890 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
268a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
268b0 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
268c0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
268d0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
268e0 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
268f0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
26900 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
26910 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
26920 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
26930 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
26940 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
26950 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
26960 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26970 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
26980 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
26990 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
269a0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
269b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
269c0 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
269d0 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
269e0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
269f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
26a00 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
26a10 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
26a20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26a30 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
26a40 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
26a50 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
26a60 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
26a70 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
26a80 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
26a90 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
26aa0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
26ab0 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
26ac0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
26ad0 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
26ae0 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
26af0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
26b00 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
26b10 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26b20 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
26b30 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
26b40 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
26b50 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
26b60 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
26b70 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
26b80 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
26b90 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
26ba0 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
26bb0 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
26bc0 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
26bd0 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
26be0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
26bf0 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
26c00 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
26c10 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
26c20 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
26c30 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
26c40 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
26c50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
26c60 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
26c70 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
26c80 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
26c90 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
26ca0 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
26cb0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
26cc0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26cd0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
26ce0 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
26cf0 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
26d00 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
26d10 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
26d20 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
26d30 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
26d40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d  ssert( pOp->p1!=
26d50 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  1 );.  assert( (
26d60 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
26d70 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
26d80 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
26d90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26da0 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
26db0 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
26dc0 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
26dd0 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
26de0 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
26df0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
26e00 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
26e10 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
26e20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
26e30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
26e40 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
26e50 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
26e60 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
26e70 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
26e80 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
26e90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
26ea0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
26eb0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
26ec0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
26ed0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
26ee0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26ef0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
26f00 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
26f10 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
26f20 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
26f30 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26f40 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
26f50 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
26f60 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
26f70 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
26f80 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
26f90 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
26fa0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
26fb0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
26fc0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
26fd0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
26fe0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
26ff0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
27000 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
27010 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
27020 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
27030 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
27040 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
27050 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
27060 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
27070 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
27080 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
27090 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
270a0 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
270b0 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
270c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
270d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
270e0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
270f0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
27100 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
27110 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
27120 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
27130 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
27140 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
27150 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
27160 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
27170 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
27180 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
27190 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
271a0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
271b0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
271c0 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
271d0 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
271e0 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
271f0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
27200 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
27210 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
27220 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
27230 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
27240 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
27250 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
27260 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
27270 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
27280 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
27290 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f  Db *pDb;..  pgno
272a0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
272b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
272c0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
272d0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
272e0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
272f0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
27300 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
27310 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
27320 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
27330 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
27340 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
27350 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
27360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27370 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
27380 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
27390 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
273a0 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
273b0 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
273c0 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
273d0 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
273e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
273f0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
27400 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
27410 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d   flags);.  pOut-
27420 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
27430 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27440 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
27450 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27460 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
27470 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
27480 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
27490 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
274a0 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
274b0 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
274c0 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a   clause P4. .**.
274d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
274e0 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
274f0 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
27500 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
27510 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
27520 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
27530 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
27540 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
27550 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
27560 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
27570 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
27580 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
27590 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
275a0 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
275b0 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
275c0 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
275d0 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
275e0 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
275f0 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
27600 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
27610 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
27620 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
27630 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
27640 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
27650 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
27660 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27670 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
27680 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
27690 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
276a0 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
276b0 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
276c0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
276d0 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
276e0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
276f0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
27700 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
27710 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
27720 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
27730 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
27740 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55  oaded) );.  /* U
27750 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64  sed to be a cond
27760 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20  itional */ {.   
27770 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
27780 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
27790 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
277a0 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
277b0 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
277c0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
277d0 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
277e0 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
277f0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
27800 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
27810 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
27820 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
27830 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
27840 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
27850 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
27860 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
27870 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
27880 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
27890 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
278a0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
278b0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
278c0 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
278d0 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
278e0 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
278f0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
27900 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27910 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
27920 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
27930 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
27940 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
27950 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
27960 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
27970 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
27980 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
27990 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
279a0 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
279b0 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
279c0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
279d0 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
279e0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
279f0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
27a00 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
27a10 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  on(db);.  if( rc
27a20 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
27a30 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
27a40 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
27a50 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
27a60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
27a70 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
27a80 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
27a90 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
27aa0 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
27ab0 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
27ac0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
27ad0 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
27ae0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
27af0 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
27b00 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
27b10 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
27b20 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
27b30 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
27b40 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
27b50 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
27b60 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
27b70 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
27b80 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
27b90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27ba0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
27bb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
27bc0 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
27bd0 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
27be0 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
27bf0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27c00 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
27c10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
27c20 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
27c30 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
27c40 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
27c50 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
27c60 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
27c70 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
27c80 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
27c90 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
27ca0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
27cb0 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
27cc0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
27cd0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
27ce0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
27cf0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
27d00 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
27d10 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
27d20 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
27d30 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
27d40 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27d50 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
27d60 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
27d70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
27d80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27d90 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
27da0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
27db0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27dc0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27dd0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27de0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
27df0 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
27e00 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
27e10 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
27e20 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
27e30 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
27e40 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
27e50 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
27e60 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
27e70 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
27e80 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
27e90 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
27ea0 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
27eb0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
27ec0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
27ed0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27ee0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
27ef0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
27f00 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
27f10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
27f20 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
27f30 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
27f40 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
27f50 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
27f60 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
27f70 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
27f80 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
27f90 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
27fa0 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
27fb0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
27fc0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
27fd0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
27fe0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
27ff0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
28000 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
28010 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
28020 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
28030 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
28040 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
28050 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
28060 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
28070 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28080 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
28090 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
280a0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
280b0 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
280c0 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
280d0 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
280e0 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
280f0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
28100 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
28110 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
28120 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
28130 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
28140 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
28150 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
28160 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
28170 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
28180 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
28190 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
281a0 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
281b0 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
281c0 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
281d0 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
281e0 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
281f0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
28200 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
28210 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
28220 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
28230 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
28240 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
28250 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
28260 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
28270 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
28280 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
28290 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
282a0 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
282b0 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
282c0 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
282d0 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
282e0 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
282f0 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
28300 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
28310 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
28320 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
28330 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
28340 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
28350 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
28360 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
28370 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
28380 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
28390 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
283a0 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
283b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
283c0 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
283d0 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
283e0 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
283f0 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
28400 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
28410 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
28420 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
28430 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
28440 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
28450 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
28460 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
28470 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
28480 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
28490 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
284a0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
284b0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
284c0 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
284d0 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
284e0 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
284f0 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
28500 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
28510 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
28520 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
28530 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
28540 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
28550 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
28560 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
28570 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
28580 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
28590 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
285a0 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
285b0 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
285c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
285d0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
285e0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
285f0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
28600 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
28610 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
28620 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
28630 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
28640 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
28650 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
28660 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
28670 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
28680 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
28690 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
286a0 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
286b0 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
286c0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
286d0 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
286e0 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
286f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28700 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
28710 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
28720 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
28730 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29  ask)1)<<pOp->p5)
28740 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
28750 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
28760 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
28770 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
28780 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
287b0 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
287c0 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
287d0 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
287e0 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
287f0 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
28800 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28810 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
28820 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
28830 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
28840 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
28850 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
28860 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
28870 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
28880 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
28890 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
288a0 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
288b0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
288c0 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
288d0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
288e0 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
288f0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
28900 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
28910 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
28920 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
28930 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
28940 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
28950 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
28960 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
28970 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
28980 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
28990 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
289a0 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
289b0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
289c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
289d0 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
289e0 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
289f0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
28a00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
28a10 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
28a20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
28a30 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28a40 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
28a50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
28a60 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
28a70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
28a80 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
28a90 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
28aa0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
28ab0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28ac0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
28ad0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
28ae0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28af0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
28b00 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
28b10 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
28b20 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
28b30 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
28b40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28b50 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
28b60 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28b70 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
28b80 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
28b90 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
28ba0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
28bb0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
28bc0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
28bd0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
28be0 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
28bf0 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
28c00 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
28c10 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
28c20 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
28c30 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
28c40 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
28c50 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
28c60 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
28c70 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
28c80 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
28c90 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28ca0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
28cb0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28cc0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
28cd0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
28ce0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
28cf0 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
28d00 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
28d10 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
28d20 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
28d30 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
28d40 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
28d50 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
28d60 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
28d70 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
28d80 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
28d90 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
28da0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
28db0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
28dc0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
28dd0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
28de0 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
28df0 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
28e00 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
28e10 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
28e20 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
28e30 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
28e40 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
28e50 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
28e60 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
28e70 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
28e80 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
28e90 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
28ea0 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
28eb0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
28ec0 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
28ed0 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
28ee0 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
28ef0 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
28f00 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
28f10 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
28f20 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
28f30 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
28f40 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
28f50 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
28f60 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
28f70 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
28f80 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
28f90 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
28fa0 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
28fb0 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
28fc0 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
28fd0 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
28fe0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
28ff0 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
29000 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
29010 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
29020 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
29030 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
29040 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
29050 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
29060 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
29070 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
29080 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
29090 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
290a0 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
290b0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
290c0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
290d0 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
290e0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
290f0 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
29100 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
29110 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
29120 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
29130 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
29140 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
29150 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
29160 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
29170 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
29180 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
29190 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
291a0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
291b0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
291c0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
291d0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
291e0 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
291f0 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
29200 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
29210 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
29220 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
29230 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
29240 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
29250 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
29260 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
29270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29280 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
292a0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
292b0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
292c0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
292d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
292e0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
292f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
29300 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
29310 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
29320 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
29330 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
29340 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
29350 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
29360 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
29370 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
29380 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
29390 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
293a0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
293b0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
293c0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
293d0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
293e0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
293f0 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
29400 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
29410 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
29420 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
29430 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
29440 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
29450 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
29460 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
29470 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
29480 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
29490 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
294a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
294b0 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
294c0 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
294f0 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
29500 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29520 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
29530 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
29540 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
29550 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
29560 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
29570 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
29580 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
29590 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
295a0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
295b0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
295c0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
295d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
295e0 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
295f0 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
29600 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78  P3 P4 *.**.** Ex
29610 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
29620 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
29630 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
29640 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
29650 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
29660 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
29670 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
29680 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
29690 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
296a0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
296b0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
296c0 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
296d0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
296e0 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
296f0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
29700 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
29710 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
29720 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
29730 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
29740 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
29750 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
29760 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
29770 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
29780 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
29790 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
297a0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
297b0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
297c0 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
297d0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
297e0 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
297f0 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
29800 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29810 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
29820 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
29830 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  m..*/.case OP_Pr
29840 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
29850 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
29860 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
29870 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
29880 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
29890 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
298a0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
298b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
298c0 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
298d0 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
298e0 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
298f0 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
29900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
29910 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
29920 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
29930 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
29940 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
29950 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
29960 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
29970 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
29980 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
29990 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
299a0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
299b0 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
299c0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
299d0 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
299e0 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
299f0 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
29a00 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
29a10 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
29a20 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
29a30 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
29a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
29a50 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
29a60 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
29a70 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
29a80 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
29a90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
29aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
29ab0 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
29ac0 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
29ad0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
29ae0 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
29af0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
29b00 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
29b10 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
29b20 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
29b30 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
29b40 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
29b50 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
29b60 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
29b70 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
29b80 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
29b90 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
29ba0 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
29bb0 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
29bc0 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
29bd0 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
29be0 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
29bf0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
29c00 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
29c10 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
29c20 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
29c30 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
29c40 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
29c50 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
29c60 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
29c70 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
29c80 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
29c90 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
29ca0 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
29cb0 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
29cc0 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
29cd0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
29ce0 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
29cf0 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
29d00 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
29d10 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
29d20 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
29d30 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
29d40 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
29d50 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
29d60 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
29d70 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
29d80 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
29d90 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
29da0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
29db0 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
29dc0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
29dd0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
29de0 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
29df0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
29e00 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
29e10 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
29e20 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
29e30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
29e40 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
29e50 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
29e60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
29e70 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
29e80 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
29e90 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
29ea0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
29eb0 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
29ec0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
29ed0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
29ee0 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
29ef0 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
29f00 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
29f10 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
29f20 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
29f30 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
29f40 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
29f50 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
29f60 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
29f70 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
29f80 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
29f90 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
29fa0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
29fb0 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
29fc0 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
29fd0 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
29fe0 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
29ff0 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
2a000 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
2a010 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
2a020 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
2a030 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
2a040 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
2a050 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
2a060 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
2a070 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
2a080 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
2a090 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
2a0a0 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
2a0b0 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
2a0c0 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
2a0d0 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
2a0e0 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
2a0f0 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
2a100 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
2a110 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
2a120 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
2a130 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2a140 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
2a150 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
2a160 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a170 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
2a180 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
2a190 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2a1a0 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
2a1b0 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20  eCursor *).     
2a1c0 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2a1d0 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a  ram->nOnce * siz
2a1e0 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72  eof(u8);.    pFr
2a1f0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ame = sqlite3DbM
2a200 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42  allocZero(db, nB
2a210 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70  yte);.    if( !p
2a220 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67  Frame ){.      g
2a230 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
2a240 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
2a250 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29  eMemRelease(pRt)
2a260 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73  ;.    pRt->flags
2a270 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20   = MEM_Frame;.  
2a280 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20    pRt->u.pFrame 
2a290 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70  = pFrame;..    p
2a2a0 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20  Frame->v = p;.  
2a2b0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2a2c0 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20  Mem = nMem;.    
2a2d0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2a2e0 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  r = pProgram->nC
2a2f0 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
2a300 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72  pc = pc;.    pFr
2a310 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
2a320 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2a330 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
2a340 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
2a350 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
2a360 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
2a370 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
2a380 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
2a390 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
2a3a0 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
2a3b0 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
2a3c0 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
2a3d0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46  m->token;.    pF
2a3e0 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  rame->aOnceFlag 
2a3f0 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a  = p->aOnceFlag;.
2a400 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63      pFrame->nOnc
2a410 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65  eFlag = p->nOnce
2a420 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20  Flag;..    pEnd 
2a430 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2a440 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
2a450 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
2a460 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
2a470 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
2a480 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
2a490 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
2a4a0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61  flags = MEM_Inva
2a4b0 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  lid;.      pMem-
2a4c0 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a  >db = db;.    }.
2a4d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72    }else{.    pFr
2a4e0 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72  ame = pRt->u.pFr
2a4f0 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ame;.    assert(
2a500 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
2a510 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2a520 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2a530 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  m );.    assert(
2a540 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
2a550 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
2a560 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
2a570 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  ( pc==pFrame->pc
2a580 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
2a590 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
2a5a0 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
2a5b0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
2a5c0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
2a5d0 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
2a5e0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
2a5f0 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68  Change;.  p->nCh
2a600 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
2a610 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2a620 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
2a630 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2a640 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20  (pFrame)[-1];.  
2a650 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65  p->nMem = pFrame
2a660 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70  ->nChildMem;.  p
2a670 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36  ->nCursor = (u16
2a680 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  )pFrame->nChildC
2a690 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d  sr;.  p->apCsr =
2a6a0 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29   (VdbeCursor **)
2a6b0 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d  &aMem[p->nMem+1]
2a6c0 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
2a6d0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
2a6e0 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
2a6f0 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d  ogram->nOp;.  p-
2a700 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38  >aOnceFlag = (u8
2a710 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e   *)&p->apCsr[p->
2a720 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e  nCursor];.  p->n
2a730 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67  OnceFlag = pProg
2a740 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63  ram->nOnce;.  pc
2a750 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28   = -1;.  memset(
2a760 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c  p->aOnceFlag, 0,
2a770 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a   p->nOnceFlag);.
2a780 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a790 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
2a7a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2a7b0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
2a7c0 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
2a7d0 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
2a7e0 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
2a7f0 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
2a800 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
2a810 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
2a820 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
2a830 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
2a840 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
2a850 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
2a860 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
2a870 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
2a880 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
2a890 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
2a8a0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2a8b0 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
2a8c0 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
2a8d0 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
2a8e0 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
2a8f0 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
2a900 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
2a910 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
2a920 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
2a930 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2a940 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
2a950 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2a960 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
2a970 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
2a980 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
2a990 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
2a9a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2a9b0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2a9c0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2a9d0 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
2a9e0 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  pIn;.  pFrame = 
2a9f0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2aa00 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2aa10 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2aa20 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2aa30 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2aa40 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2aa50 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2aa60 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2aa70 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2aa80 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2aa90 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2aaa0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2aab0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2aac0 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2aad0 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2aae0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2aaf0 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
2ab00 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
2ab10 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
2ab20 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
2ab30 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
2ab40 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
2ab50 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2ab60 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
2ab70 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
2ab80 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2ab90 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
2aba0 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
2abb0 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
2abc0 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
2abd0 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
2abe0 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
2abf0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
2ac00 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2ac10 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2ac20 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2ac30 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
2ac40 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
2ac50 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
2ac60 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2ac70 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
2ac80 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
2ac90 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2aca0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2acb0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2acc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
2acd0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
2ace0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
2acf0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ad00 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
2ad10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2ad20 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
2ad30 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2ad40 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2ad50 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2ad60 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2ad70 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2ad80 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2ad90 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2ada0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2adb0 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2adc0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2add0 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2ade0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2adf0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2ae00 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2ae10 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2ae20 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2ae30 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2ae40 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2ae50 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2ae60 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2ae70 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2ae80 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2ae90 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2aea0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2aeb0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2aec0 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2aed0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2aee0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2aef0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2af00 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2af10 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2af20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2af30 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  1 ){.    if( db-
2af40 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2af50 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2af60 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70  edImmCons==0 ) p
2af70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
2af80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
2af90 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2afa0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2afb0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2afc0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2afd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2afe0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2aff0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2b000 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2b010 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b020 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2b030 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2b040 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2b050 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2b060 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
2b070 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
2b080 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
2b090 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
2b0a0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
2b0b0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
2b0c0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
2b0d0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
2b0e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2b0f0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
2b100 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
2b110 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
2b120 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2b130 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
2b140 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
2b150 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
2b160 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
2b170 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2b180 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2b190 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
2b1a0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
2b1b0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
2b1c0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
2b1d0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2b1e0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
2b1f0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2b200 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2b210 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
2b220 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
2b230 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2b240 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
2b250 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2b260 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2b270 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
2b280 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
2b2a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b2b0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
2b2c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
2b2d0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2b2e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2b2f0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
2b300 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2b310 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b320 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
2b330 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2b340 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
2b350 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
2b360 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
2b370 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2b380 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
2b390 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
2b3a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
2b3b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2b3c0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2b3d0 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]>0 goto P2.**.
2b3e0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2b3f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2b400 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2b410 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
2b420 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b430 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b440 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b450 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b460 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b470 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b480 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b490 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b4a0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b4b0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
2b4c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2b4d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2b4e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b4f0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2b500 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2b510 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
2b520 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2b530 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2b540 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b550 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a  e: IfNeg P1 P2 *
2b560 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b570 3a 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74  : if r[P1]<0 got
2b580 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  o P2.**.** If th
2b590 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b5a0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
2b5b0 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
2b5c0 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
2b5d0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2b5e0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2b5f0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2b600 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2b610 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b620 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2b630 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2b640 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2b650 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
2b660 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
2b670 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2b680 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b690 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2b6a0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2b6b0 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
2b6c0 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20  1->u.i<0 ){.    
2b6d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2b6e0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2b6f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2b700 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
2b710 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2b720 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50  [P1]+=P3, if r[P
2b730 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2b740 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2b750 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2b760 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64   an integer.  Ad
2b770 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20  d literal P3 to 
2b780 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
2b790 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 49 66  register P1.  If
2b7a0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 65   the result is e
2b7b0 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74  xactly 0, jump t
2b7c0 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
2b7d0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2b7e0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2b7f0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2b800 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2b810 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b820 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2b830 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2b840 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2b850 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a  ..*/.case OP_IfZ
2b860 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ero: {        /*
2b870 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2b880 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b890 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b8a0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2b8b0 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2b8c0 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i += pOp->p3;.
2b8d0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
2b8e0 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
2b8f0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b900 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b910 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
2b920 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
2b930 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2b940 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
2b950 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
2b960 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
2b970 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2b980 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
2b990 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
2b9a0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
2b9b0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2b9c0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
2b9d0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
2b9e0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
2b9f0 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
2ba00 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
2ba10 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
2ba20 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
2ba30 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
2ba40 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
2ba50 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
2ba60 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
2ba70 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
2ba80 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
2ba90 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
2baa0 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
2bab0 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
2bac0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2bad0 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
2bae0 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
2baf0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
2bb00 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  c = &aMem[pOp->p
2bb10 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
2bb20 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
2bb30 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
2bb40 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
2bb50 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
2bb60 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
2bb70 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
2bb80 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
2bb90 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  pRec;.    memAbo
2bba0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52  utToChange(p, pR
2bbb0 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ec);.    sqlite3
2bbc0 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2bbd0 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74  (pRec);.  }.  ct
2bbe0 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
2bbf0 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72  4.pFunc;.  asser
2bc00 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2bc10 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2bc20 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2bc30 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
2bc40 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2bc50 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
2bc60 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
2bc70 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
2bc80 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
2bc90 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
2bca0 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
2bcb0 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
2bcc0 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
2bcd0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
2bce0 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69  l = 0;.  ctx.ski
2bcf0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 28  pFlag = 0;.  if(
2bd00 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63   ctx.pFunc->func
2bd10 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  Flags & SQLITE_F
2bd20 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2bd30 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2bd40 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2bd50 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2bd60 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2bd70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bd80 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2bd90 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2bda0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2bdb0 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2bdc0 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2bdd0 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2bde0 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2bdf0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2be00 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2be10 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2be20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2be30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2be40 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2be50 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2be60 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2be70 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  Error;.  }.  if(
2be80 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b   ctx.skipFlag ){
2be90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2bea0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2beb0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2bec0 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2bed0 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2bee0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2bef0 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2bf00 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64    }..  sqlite3Vd
2bf10 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
2bf20 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  x.s);..  break;.
2bf30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2bf40 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2bf50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2bf60 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
2bf70 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
2bf80 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
2bf90 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2bfa0 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
2bfb0 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
2bfc0 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
2bfd0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
2bfe0 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
2bff0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
2c000 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
2c010 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
2c020 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
2c030 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
2c040 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2c050 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
2c060 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
2c070 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
2c080 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
2c090 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
2c0a0 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
2c0b0 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
2c0c0 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
2c0d0 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
2c0e0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
2c0f0 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
2c100 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
2c110 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
2c120 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
2c130 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
2c140 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
2c150 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
2c160 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
2c170 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
2c180 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
2c190 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
2c1a0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
2c1b0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2c1c0 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
2c1d0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2c1e0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2c1f0 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
2c200 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
2c210 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2c220 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
2c230 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
2c240 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
2c250 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2c260 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2c270 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2c280 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
2c290 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71  pMem));.  }.  sq
2c2a0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2c2b0 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
2c2c0 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
2c2d0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
2c2e0 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
2c2f0 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
2c300 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
2c310 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2c320 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2c330 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c340 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
2c350 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
2c360 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
2c370 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
2c380 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
2c390 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
2c3a0 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
2c3b0 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
2c3c0 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
2c3d0 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
2c3e0 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
2c3f0 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54  LL.** or RESTART
2c400 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20  .  Write 1 or 0 
2c410 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20  into mem[P3] if 
2c420 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72  the checkpoint r
2c430 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45  eturns.** SQLITE
2c440 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65  _BUSY or not, re
2c450 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69  spectively.  Wri
2c460 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
2c470 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a   pages in the.**
2c480 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63   WAL after the c
2c490 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d  heckpoint into m
2c4a0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65  em[P3+1] and the
2c4b0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2c4c0 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74  .** in the WAL t
2c4d0 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68  hat have been ch
2c4e0 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72  eckpointed after
2c4f0 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a   the checkpoint.
2c500 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74  ** completes int
2c510 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f  o mem[P3+2].  Ho
2c520 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f  wever on an erro
2c530 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  r, mem[P3+1] and
2c540 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72  .** mem[P3+2] ar
2c550 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
2c560 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   -1..*/.case OP_
2c570 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20  Checkpoint: {.  
2c580 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
2c5b0 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d  */.  int aRes[3]
2c5c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c5d0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20       /* Results 
2c5e0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c600 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
2c610 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20  sults here */.. 
2c620 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2c630 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65  Only==0 );.  aRe
2c640 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
2c650 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
2c660 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
2c670 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2c680 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2c690 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2c6a0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2c6b0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2c6c0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2c6d0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c6e0 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72  RESTART.  );.  r
2c6f0 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2c700 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2c710 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2c720 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2c730 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2c740 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2c750 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2c760 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2c770 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2c780 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2c790 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2c7a0 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2c7b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2c7c0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2c7d0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2c7e0 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2c7f0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2c800 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2c810 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2c820 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2c830 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e   * P5.**.** Chan
2c840 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
2c850 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
2c860 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
2c870 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
2c880 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
2c890 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
2c8a0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
2c8b0 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
2c8c0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
2c8d0 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
2c8e0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
2c8f0 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
2c900 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
2c910 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
2c920 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
2c930 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
2c940 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
2c950 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
2c960 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
2c970 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
2c980 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
2c990 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2c9a0 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
2c9b0 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
2c9c0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2c9d0 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
2c9e0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2c9f0 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65  lease */.  Btree
2ca00 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
2ca10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
2ca20 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
2ca30 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
2ca40 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2ca50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ca60 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
2ca70 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
2ca80 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
2cab0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
2cac0 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2cae0 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
2caf0 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
2cb00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2cb10 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2cb20 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
2cb30 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
2cb40 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
2cb50 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
2cb60 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ..  eNew = pOp->
2cb70 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
2cb80 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cb90 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
2cba0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2cbb0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cbc0 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
2cbd0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2cbe0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
2cbf0 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
2cc00 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cc10 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
2cc20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2cc30 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
2cc40 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
2cc50 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cc60 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
2cc70 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2cc80 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
2cc90 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
2cca0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2ccb0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2ccc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2ccd0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
2cce0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2ccf0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
2cd00 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2cd10 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
2cd20 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
2cd30 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
2cd40 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
2cd50 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2cd60 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2cd70 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2cd80 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
2cd90 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
2cda0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2cdb0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2cdc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cdd0 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
2cde0 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
2cdf0 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
2ce00 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
2ce10 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
2ce20 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
2ce30 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
2ce40 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
2ce50 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
2ce60 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
2ce70 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
2ce80 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
2ce90 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
2cea0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2ceb0 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
2cec0 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
2ced0 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
2cee0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
2cef0 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
2cf00 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
2cf10 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
2cf20 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
2cf30 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
2cf40 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
2cf50 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
2cf60 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
2cf70 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
2cf80 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2cf90 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
2cfa0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cfb0 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
2cfc0 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
2cfd0 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  mmit || db->nVdb
2cfe0 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20  eRead>1 ){.     
2cff0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2d000 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
2d010 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d020 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
2d030 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
2d040 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64  hange %s wal mod
2d050 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  e from within a 
2d060 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20  transaction",.  
2d070 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50          (eNew==P
2d080 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d090 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20  _WAL ? "into" : 
2d0a0 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20  "out of").      
2d0b0 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
2d0c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20      }else{. .   
2d0d0 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47     if( eOld==PAG
2d0e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2d0f0 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
2d100 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
2d110 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
2d120 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
2d130 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
2d140 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20  l.        ** to 
2d150 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
2d160 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
2d170 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
2d180 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
2d190 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e       ** file. An
2d1a0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
2d1b0 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c  may still be hel
2d1c0 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
2d1d0 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  e file .        
2d1e0 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65  ** after a succe
2d1f0 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20  ssful return. . 
2d200 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
2d210 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
2d220 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67  gerCloseWal(pPag
2d230 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  er);.        if(
2d240 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2d250 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
2d260 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2d270 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
2d280 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
2d290 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
2d2a0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2d2b0 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
2d2c0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
2d2d0 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
2d2e0 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
2d2f0 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
2d300 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
2d310 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
2d320 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
2d330 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
2d340 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2d350 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
2d360 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
2d370 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
2d380 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
2d390 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
2d3a0 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
2d3b0 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
2d3c0 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
2d3d0 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
2d3e0 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
2d3f0 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
2d400 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
2d410 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
2d420 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
2d430 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
2d440 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2d450 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2d460 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d470 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
2d480 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2d490 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2d4a0 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
2d4b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
2d4c0 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
2d4d0 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
2d4e0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2d4f0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
2d500 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
2d510 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2d520 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
2d530 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  w);..  pOut = &a
2d540 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2d550 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2d560 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
2d570 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
2d580 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73  t->z = (char *)s
2d590 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
2d5a0 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70  ename(eNew);.  p
2d5b0 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33  Out->n = sqlite3
2d5c0 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a  Strlen30(pOut->z
2d5d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
2d5e0 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20   SQLITE_UTF8;.  
2d5f0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2d600 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
2d610 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
2d620 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
2d630 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
2d640 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
2d650 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2d660 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
2d670 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2d680 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
2d690 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
2d6a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
2d6b0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
2d6c0 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
2d6d0 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
2d6e0 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
2d6f0 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
2d700 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
2d710 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
2d720 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
2d730 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
2d740 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2d750 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
2d760 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2d770 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2d780 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
2d790 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20  >zErrMsg, db);. 
2d7a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d7b0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2d7c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2d7d0 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
2d7e0 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
2d7f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
2d800 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
2d810 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
2d820 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
2d830 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
2d840 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
2d850 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
2d860 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
2d870 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
2d880 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
2d890 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2d8a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2d8b0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2d8c0 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
2d8d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2d8e0 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2d8f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2d900 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2d910 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2d920 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
2d930 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
2d940 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
2d950 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d960 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d970 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
2d980 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2d990 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d9a0 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
2d9b0 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  t);.  if( rc==SQ
2d9c0 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
2d9d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2d9e0 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
2d9f0 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65  TE_OK;.  }.  bre
2da00 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
2da10 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
2da20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2da30 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
2da40 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
2da50 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2da60 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   An expired stat
2da70 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77  ement.** fails w
2da80 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
2da90 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45  e of SQLITE_SCHE
2daa0 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65 72  MA if it is ever
2dab0 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76   executed .** (v
2dac0 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ia sqlite3_step(
2dad0 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  ))..** .** If P1
2dae0 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
2daf0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
2db00 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
2db10 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2db20 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
2db30 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
2db40 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
2db50 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a   is affected. .*
2db60 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
2db70 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
2db80 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
2db90 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2dba0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
2dbb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
2dbc0 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
2dbd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2dbe0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2dbf0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
2dc00 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
2dc10 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
2dc20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62  ** Synopsis: iDb
2dc30 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74  =P1 root=P2 writ
2dc40 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  e=P3.**.** Obtai
2dc50 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
2dc60 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
2dc70 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2dc80 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
2dc90 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
2dca0 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
2dcb0 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
2dcc0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
2dcd0 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
2dce0 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
2dcf0 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
2dd00 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
2dd10 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
2dd20 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
2dd30 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
2dd40 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
2dd50 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
2dd60 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
2dd70 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
2dd80 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
2dd90 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
2dda0 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
2ddb0 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
2ddc0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
2ddd0 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
2dde0 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
2ddf0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
2de00 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
2de10 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
2de20 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
2de30 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
2de40 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69  ck: {.  u8 isWri
2de50 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
2de60 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72  ->p3;.  if( isWr
2de70 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64  iteLock || 0==(d
2de80 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
2de90 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29  ReadUncommitted)
2dea0 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d   ){.    int p1 =
2deb0 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61   pOp->p1; .    a
2dec0 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20  ssert( p1>=0 && 
2ded0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2dee0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2def0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2df00 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30  Mask)1)<<p1))!=0
2df10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2df20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
2df30 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
2df40 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
2df50 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
2df60 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
2df70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
2df80 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
2df90 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
2dfa0 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
2dfb0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2dfc0 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
2dfd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2dfe0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2dff0 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73  sg, db, "databas
2e000 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
2e010 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
2e020 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2e030 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e040 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2e050 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
2e060 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e070 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e080 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
2e090 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
2e0a0 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
2e0b0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
2e0c0 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
2e0d0 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
2e0e0 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
2e0f0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2e100 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
2e110 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
2e120 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
2e130 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
2e140 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
2e150 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
2e160 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
2e170 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
2e180 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
2e190 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
2e1a0 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
2e1b0 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
2e1c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
2e1d0 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
2e1e0 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
2e1f0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
2e200 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2e210 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
2e220 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
2e230 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
2e240 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
2e250 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2e260 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e270 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e280 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e290 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e2a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e2b0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2e2c0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2e2d0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2e2e0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2e2f0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2e300 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2e310 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2e320 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2e330 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2e340 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2e350 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2e360 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2e370 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2e380 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2e390 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e3a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e3b0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e3c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e3d0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e3e0 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2e3f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e400 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2e410 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2e420 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2e430 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2e440 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2e450 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2e460 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2e470 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2e480 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2e490 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2e4a0 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2e4b0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e4c0 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2e4d0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2e4e0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e4f0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e500 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e510 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e520 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e530 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2e540 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e550 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2e560 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2e570 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2e580 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2e590 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2e5a0 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2e5b0 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2e5c0 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2e5d0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2e5e0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2e5f0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2e600 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2e610 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2e620 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2e630 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2e640 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2e650 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2e660 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2e670 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2e680 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
2e690 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2e6a0 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  pCur = 0;.  pVta
2e6b0 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70  bCursor = 0;.  p
2e6c0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2e6d0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2e6e0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2e6f0 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2e700 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2e710 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
2e720 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d  dule);.  rc = pM
2e730 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
2e740 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
2e750 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
2e760 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2e770 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
2e780 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
2e790 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
2e7a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2e7b0 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
2e7c0 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
2e7d0 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
2e7e0 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
2e7f0 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
2e800 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
2e810 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
2e820 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
2e830 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  , 0, -1, 0);.   
2e840 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
2e850 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
2e860 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
2e870 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
2e880 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
2e890 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
2e8a0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
2e8b0 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
2e8c0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2e8d0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e8e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e8f0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e900 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2e910 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2e920 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
2e930 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
2e940 53 79 6e 6f 70 73 69 73 3a 20 69 50 6c 61 6e 3d  Synopsis: iPlan=
2e950 72 5b 50 33 5d 20 7a 50 6c 61 6e 3d 27 50 34 27  r[P3] zPlan='P4'
2e960 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2e970 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2e980 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2e990 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2e9a0 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2e9b0 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2e9c0 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2e9d0 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2e9e0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2e9f0 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2ea00 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2ea10 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2ea20 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2ea30 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2ea40 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2ea50 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2ea60 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2ea70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2ea80 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2ea90 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2eaa0 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2eab0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2eac0 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2ead0 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2eae0 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2eaf0 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2eb00 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2eb10 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2eb20 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2eb30 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2eb40 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2eb50 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2eb60 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2eb70 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2eb80 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2eb90 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2eba0 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2ebb0 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2ebc0 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2ebd0 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2ebe0 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2ebf0 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2ec00 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2ec10 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2ec20 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2ec30 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2ec40 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2ec50 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2ec60 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2ec70 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2ec80 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2ec90 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2eca0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2ecb0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2ecc0 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2ecd0 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2ece0 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2ecf0 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2ed00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2ed10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2ed20 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2ed30 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2ed40 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2ed50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2ed60 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2ed70 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2ed80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2ed90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2eda0 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2edb0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2edc0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2edd0 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2ede0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2edf0 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2ee00 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2ee10 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2ee20 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2ee30 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2ee40 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2ee50 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2ee60 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2ee70 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2ee80 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2ee90 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2eea0 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2eeb0 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2eec0 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2eed0 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2eee0 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2eef0 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2ef00 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2ef10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2ef20 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2ef30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2ef40 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2ef50 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2ef60 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2ef70 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2ef80 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2ef90 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2efa0 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2efb0 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2efc0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2efd0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2efe0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2eff0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2f000 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2f010 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2f020 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2f030 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f040 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2f050 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2f060 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f070 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2f080 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
2f090 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  or);.    }..    
2f0a0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
2f0b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2f0c0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
2f0d0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
2f0e0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  ;..  break;.}.#e
2f0f0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f100 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f110 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f120 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f130 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f140 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
2f150 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2f160 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e  s: r[P3]=vcolumn
2f170 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P2).**.** Store
2f180 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2f190 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
2f1a0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
2f1b0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
2f1c0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
2f1d0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
2f1e0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
2f1f0 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
2f200 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
2f210 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2f220 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2f230 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2f240 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
2f250 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
2f260 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
2f270 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
2f280 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
2f290 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f2a0 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
2f2b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
2f2c0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2f2d0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2f2e0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2f2f0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
2f300 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
2f310 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2f320 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
2f330 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2f340 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2f350 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
2f360 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2f370 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2f380 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2f390 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2f3a0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2f3b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2f3c0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
2f3d0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
2f3e0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
2f3f0 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20  ontext));..  /* 
2f400 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
2f410 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
2f420 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
2f430 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
2f440 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
2f450 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e  nts to sContext.
2f460 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65  s so in case the
2f470 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a   user-function .
2f480 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65    ** can use the
2f490 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2f4a0 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
2f4b0 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
2f4c0 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e  a .  ** new one.
2f4d0 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2f4e0 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e  dbeMemMove(&sCon
2f4f0 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a  text.s, pDest);.
2f500 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2f510 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45  (&sContext.s, ME
2f520 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d  M_Null);..  rc =
2f530 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2f540 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  n(pCur->pVtabCur
2f550 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  sor, &sContext, 
2f560 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
2f570 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2f580 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
2f590 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73   if( sContext.is
2f5a0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20  Error ){.    rc 
2f5b0 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  = sContext.isErr
2f5c0 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  or;.  }..  /* Co
2f5d0 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
2f5e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
2f5f0 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
2f600 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69  . We.  ** do thi
2f610 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  s regardless of 
2f620 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
2f630 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  n error occurred
2f640 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20   to ensure any. 
2f650 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f   ** dynamic allo
2f660 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65  cation in sConte
2f670 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75  xt.s (a Mem stru
2f680 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64  ct) is  released
2f690 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
2f6a0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2f6b0 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ng(&sContext.s, 
2f6c0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c  encoding);.  sql
2f6d0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
2f6e0 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74  pDest, &sContext
2f6f0 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  .s);.  REGISTER_
2f700 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
2f710 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  Dest);.  UPDATE_
2f720 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
2f730 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
2f740 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
2f750 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67  (pDest) ){.    g
2f760 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
2f770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f780 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f790 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2f7a0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2f7b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f7c0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2f7d0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
2f7e0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
2f7f0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
2f800 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
2f810 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
2f820 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
2f830 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2f840 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
2f850 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
2f860 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
2f870 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
2f880 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
2f890 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2f8a0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2f8b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
2f8c0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
2f8d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2f8e0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
2f8f0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2f900 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
2f910 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
2f920 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
2f930 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
2f940 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2f950 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2f960 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2f970 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
2f980 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
2f990 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
2f9a0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f9b0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2f9c0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2f9d0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
2f9e0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
2f9f0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2fa00 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
2fa10 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
2fa20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
2fa30 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
2fa40 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
2fa50 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
2fa60 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
2fa70 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
2fa80 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
2fa90 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
2faa0 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
2fab0 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
2fac0 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
2fad0 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
2fae0 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
2faf0 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
2fb00 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
2fb10 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
2fb20 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
2fb30 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
2fb40 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
2fb50 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
2fb60 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2fb70 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f   = 1;.  rc = pMo
2fb80 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
2fb90 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2fba0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2fbb0 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  d = 0;.  sqlite3
2fbc0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2fbd0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2fbe0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2fbf0 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
2fc00 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
2fc10 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
2fc20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29   }..  if( !res )
2fc30 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
2fc40 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20  e is data, jump 
2fc50 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20  to P2 */.    pc 
2fc60 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2fc70 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
2fc80 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2fc90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2fca0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2fcb0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2fcc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2fcd0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2fce0 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
2fcf0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2fd00 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2fd10 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2fd20 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2fd30 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2fd40 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
2fd50 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
2fd60 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
2fd70 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
2fd80 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
2fd90 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
2fda0 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
2fdb0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2fdc0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
2fdd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
2fde0 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
2fdf0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
2fe00 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
2fe10 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
2fe20 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e  tab->pVtab;.  pN
2fe30 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ame = &aMem[pOp-
2fe40 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2fe50 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
2fe60 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  xRename );.  ass
2fe70 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2fe80 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65  pName) );.  asse
2fe90 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2fea0 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  =0 );.  REGISTER
2feb0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2fec0 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2fed0 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2fee0 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
2fef0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2ff00 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
2ff10 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2ff20 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2ff30 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
2ff40 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
2ff50 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
2ff60 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
2ff70 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2ff80 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
2ff90 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
2ffa0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2ffb0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
2ffc0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
2ffd0 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
2ffe0 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  e->z);.    sqlit
2fff0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
30000 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
30010 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
30020 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
30030 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
30040 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30050 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
30060 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
30070 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
30080 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50  nopsis: data=r[P
30090 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69  3@P2].**.** P4 i
300a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
300b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
300c0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
300d0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
300e0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
300f0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
30100 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
30110 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
30120 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
30130 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
30140 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
30150 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
30160 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
30170 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
30180 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
30190 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
301a0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
301b0 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
301c0 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
301d0 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
301e0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
301f0 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
30200 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
30210 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
30220 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
30230 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
30240 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
30250 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
30260 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
30270 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
30280 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
30290 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
302a0 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
302b0 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
302c0 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
302d0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
302e0 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
302f0 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
30300 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
30310 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
30320 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
30330 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
30340 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
30350 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
30360 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
30370 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
30380 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
30390 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
303a0 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
303b0 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
303c0 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
303d0 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
303e0 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
303f0 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
30400 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
30410 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
30420 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
30430 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
30440 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
30450 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
30460 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
30470 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
30480 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
30490 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
304a0 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
304b0 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  serted..*/.case 
304c0 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
304d0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
304e0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
304f0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
30500 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
30510 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
30520 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
30530 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
30540 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
30550 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
30560 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
30570 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
30580 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
30590 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
305a0 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
305b0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
305c0 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
305d0 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
305e0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
305f0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74  Only==0 );.  pVt
30600 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
30610 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
30620 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
30630 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
30640 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
30650 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
30660 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
30670 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
30680 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
30690 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
306a0 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
306b0 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
306c0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
306d0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
306e0 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
306f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
30700 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
30710 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
30720 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
30730 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
30740 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
30750 58 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  X);.      sqlite
30760 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
30770 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  e(pX);.      apA
30780 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
30790 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
307a0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
307b0 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
307c0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
307d0 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
307e0 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
307f0 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
30800 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
30810 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
30820 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
30830 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
30840 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
30850 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
30860 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
30870 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
30880 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
30890 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
308a0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
308b0 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
308c0 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72   = lastRowid = r
308d0 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
308e0 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
308f0 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
30900 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
30910 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
30920 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
30930 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
30940 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
30950 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
30960 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
30970 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
30980 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
30990 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
309a0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
309b0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
309c0 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
309d0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
309e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
309f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30a00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30a10 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
30a20 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
30a30 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
30a40 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
30a50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
30a60 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
30a70 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
30a80 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
30a90 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
30aa0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
30ab0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
30ac0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
30ad0 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
30ae0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
30af0 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
30b00 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
30b10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
30b20 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
30b30 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
30b40 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
30b50 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
30b60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
30b70 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
30b80 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
30b90 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
30ba0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
30bb0 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
30bc0 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
30bd0 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
30be0 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
30bf0 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
30c00 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
30c10 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
30c20 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
30c30 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
30c40 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
30c50 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
30c60 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
30c70 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
30c80 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
30c90 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
30ca0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
30cb0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
30cc0 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
30cd0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74  ree *pBt;..  pBt
30ce0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
30cf0 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61  p1].pBt;.  newMa
30d00 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  x = 0;.  if( pOp
30d10 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d  ->p3 ){.    newM
30d20 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ax = sqlite3Btre
30d30 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a  eLastPage(pBt);.
30d40 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c      if( newMax <
30d50 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
30d60 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75  p3 ) newMax = (u
30d70 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b  nsigned)pOp->p3;
30d80 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
30d90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
30da0 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c  axPageCount(pBt,
30db0 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61   newMax);.  brea
30dc0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
30dd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30de0 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64  T_TRACE./* Opcod
30df0 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50  e: Trace * * * P
30e00 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  4 *.**.** If tra
30e10 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
30e20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
30e30 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
30e40 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
30e50 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
30e60 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
30e70 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
30e80 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
30e90 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a  /.case OP_Trace:
30ea0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63   {.  char *zTrac
30eb0 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20  e;.  char *z;.. 
30ec0 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a   if( db->xTrace.
30ed0 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52     && !p->doingR
30ee0 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61  erun.   && (zTra
30ef0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
30f00 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
30f10 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
30f20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56      z = sqlite3V
30f30 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20  dbeExpandSql(p, 
30f40 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d  zTrace);.    db-
30f50 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
30f60 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73  ceArg, z);.    s
30f70 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
30f80 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20   z);.  }.#ifdef 
30f90 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
30fa0 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20  _TRACE.  zTrace 
30fb0 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
30fc0 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
30fd0 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
30fe0 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  e ){.    int i;.
30ff0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
31000 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
31010 20 20 20 20 69 66 28 20 28 28 31 3c 3c 69 29 20      if( ((1<<i) 
31020 26 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 29 3d  & p->btreeMask)=
31030 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
31040 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
31050 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62  e_control(db, db
31060 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
31070 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41  SQLITE_FCNTL_TRA
31080 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  CE, zTrace);.   
31090 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
310a0 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
310b0 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65  L_TRACE */.#ifde
310c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
310d0 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
310e0 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  & SQLITE_SqlTrac
310f0 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72  e)!=0.   && (zTr
31100 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
31110 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
31120 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
31130 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75  .    sqlite3Debu
31140 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61  gPrintf("SQL-tra
31150 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63  ce: %s\n", zTrac
31160 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  e);.  }.#endif /
31170 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
31180 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  /.  break;.}.#en
31190 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
311a0 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
311b0 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
311c0 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
311d0 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
311e0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
311f0 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
31200 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
31210 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
31220 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
31230 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
31240 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
31250 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
31260 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
31270 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
31280 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
31290 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
312a0 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
312b0 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
312c0 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
312d0 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
312e0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
312f0 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
31300 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
31310 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
31320 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
31330 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
31340 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
31350 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31360 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
31370 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
31380 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
31390 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
313a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313e0 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
313f0 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
31400 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
31410 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
31420 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
31430 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
31440 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
31450 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
31460 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
31470 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
31480 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
31490 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
314a0 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
314b0 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
314c0 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
314d0 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
314e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
314f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31520 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
31530 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
31540 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
31550 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71  u64 elapsed = sq
31560 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20  lite3Hwtime() - 
31570 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70  start;.      pOp
31580 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70  ->cycles += elap
31590 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  sed;.      pOp->
315a0 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20  cnt++;.#if 0.   
315b0 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
315c0 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20  out, "%10llu ", 
315d0 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20  elapsed);.      
315e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
315f0 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69  ntOp(stdout, ori
31600 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63  gPc, &aOp[origPc
31610 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
31620 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
31630 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
31640 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
31650 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
31660 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
31670 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
31680 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
31690 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
316a0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
316b0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
316c0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
316d0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
316e0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
316f0 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
31700 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
31710 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
31720 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
31730 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
31740 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
31750 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
31760 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
31770 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
31780 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
31790 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
317a0 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
317b0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
317c0 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
317d0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
317e0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
317f0 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
31800 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
31810 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
31820 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
31830 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  e(pOp->p2, &aMem
31840 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
31850 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
31860 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
31870 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
31880 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
31890 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
318a0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
318b0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
318c0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
318d0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
318e0 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
318f0 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
31900 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
31910 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
31920 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
31930 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
31940 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
31950 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
31960 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
31970 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
31980 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
31990 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
319a0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
319b0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
319c0 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
319d0 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
319e0 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
319f0 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
31a00 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
31a10 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
31a20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
31a30 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c       pc, p->zSql
31a40 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
31a50 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
31a60 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
31a70 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
31a80 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
31a90 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
31aa0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
31ab0 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
31ac0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
31ad0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
31ae0 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
31af0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
31b00 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
31b10 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
31b20 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
31b30 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
31b40 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
31b50 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
31b60 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
31b70 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
31b80 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
31b90 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
31ba0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
31bb0 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
31bc0 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
31bd0 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
31be0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
31bf0 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
31c00 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
31c10 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
31c20 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
31c30 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
31c40 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
31c50 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
31c60 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
31c70 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
31c80 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
31c90 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
31ca0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
31cb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
31cc0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
31cd0 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
31ce0 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
31cf0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
31d00 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
31d10 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
31d20 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
31d30 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
31d40 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
31d50 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
31d60 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
31d70 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
31d80 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
31d90 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
31da0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
31db0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
31dc0 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
31dd0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
31de0 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
31df0 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
31e00 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
31e10 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
31e20 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
31e30 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
31e40 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
31e50 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
31e60 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
31e70 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
31e80 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
31e90 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
31ea0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
31eb0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
31ec0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
31ed0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
31ee0 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
31ef0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
31f00 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
31f10 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
31f20 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
31f30 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
31f40 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
31f50 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
31f60 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
31f70 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
31f80 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
31f90 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
31fa0 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
31fb0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
31fc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
31fd0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
31fe0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
31ff0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
32000 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.