/ Hex Artifact Content
Login

Artifact 6ccb107de55a34b7676a9eaa0aeb827015723fa4:


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 5d 3d 72 5b 50 31 40  : r[P2@P3]=r[P1@
8bc0: 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P3].**.** Make a
8bd0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8be0: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
8bf0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
8c00: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
8c10: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8c20: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8c30: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
8c40: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
8c50: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
8c60: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
8c70: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
8c80: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
8c90: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
8ca0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
8cb0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
8cc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8cd0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8ce0: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8cf0: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8d00: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
8d10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8d20: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8d30: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
8d40: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
8d50: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
8d60: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8d70: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
8d80: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
8d90: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
8da0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
8db0: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
8dc0: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
8dd0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
8de0: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
8df0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8e00: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
8e10: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
8e20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8e30: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
8e40: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8e50: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8e60: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8e70: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
8e80: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8e90: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8ea0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
8eb0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8ec0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8ed0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8ee0: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8ef0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8f00: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8f10: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8f20: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8f30: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8f40: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8f50: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8f60: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
8f70: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
8f80: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8f90: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8fa0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
8fb0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8fc0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8fd0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8fe0: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8ff0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
9000: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
9010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
9020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9030: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
9040: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9050: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9060: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9070: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9080: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
9090: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
90a0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
90b0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
90c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
90d0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
90e0: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
90f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
9100: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
9110: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
9120: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
9130: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9140: 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  :  output=r[P1@P
9150: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
9160: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
9170: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
9180: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
9190: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
91a0: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
91b0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
91c0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
91d0: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
91e0: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
91f0: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
9200: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
9210: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
9220: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
9230: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f  access to the to
9240: 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74  p P1 values as t
9250: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77  he result.** row
9260: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
9270: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
9280: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
9290: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
92a0: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
92b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
92c0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
92d0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
92e0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
92f0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
9300: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9310: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
9320: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20  LLBACK.  /* Run 
9330: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75  the progress cou
9340: 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65  nter just before
9350: 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f   returning..  */
9360: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
9370: 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56  ress!=0.   && nV
9380: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
9390: 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e  Limit.   && db->
93a0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
93b0: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
93c0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
93d0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
93e0: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
93f0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e  or_halt;.  }.#en
9400: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
9410: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
9420: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
9430: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
9440: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
9450: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
9460: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
9470: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
9480: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
9490: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
94a0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
94b0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
94c0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
94d0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
94e0: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
94f0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
9500: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
9510: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9520: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
9530: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
9540: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
9550: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9560: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
9570: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
9580: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
9590: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
95a0: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
95b0: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
95c0: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
95d0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
95e0: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
95f0: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
9600: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
9610: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
9620: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
9630: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
9640: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
9650: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
9660: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
9670: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
9680: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
9690: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
96a0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
96b0: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
96c0: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
96d0: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
96e0: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
96f0: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
9700: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
9710: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
9720: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
9730: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
9740: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
9750: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
9760: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
9770: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
9780: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
9790: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
97a0: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
97b0: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
97c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
97d0: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
97e0: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
97f0: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
9800: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
9810: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
9820: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
9830: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
9840: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
9850: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
9860: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
9870: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
9880: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
9890: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
98a0: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
98b0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
98c0: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
98d0: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
98e0: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
98f0: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
9900: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
9910: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
9920: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
9930: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
9940: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
9950: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
9960: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
9970: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
9980: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
9990: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
99a0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
99b0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
99c0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
99d0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
99e0: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
99f0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
9a00: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
9a10: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
9a20: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
9a30: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
9a40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
9a50: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
9a60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
9a70: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
9a80: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
9a90: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
9aa0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9ab0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9ac0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9ad0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9ae0: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9af0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
9b00: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
9b10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9b20: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
9b30: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
9b40: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
9b50: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
9b60: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9b70: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
9b80: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
9b90: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
9ba0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9bb0: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9bc0: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9bd0: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9be0: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9bf0: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
9c00: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
9c10: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
9c20: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9c30: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
9c40: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
9c50: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
9c60: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
9c70: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
9c80: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
9c90: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9ca0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9cb0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
9cc0: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
9cd0: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
9ce0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
9cf0: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
9d00: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
9d10: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
9d20: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
9d30: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
9d40: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
9d50: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
9d60: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
9d70: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
9d80: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
9d90: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
9da0: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
9db0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
9dc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9dd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
9de0: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
9df0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
9e00: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
9e10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9e20: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
9e30: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
9e40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9e50: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
9e60: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
9e70: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
9e80: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
9e90: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
9ea0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
9eb0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
9ec0: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
9ed0: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
9ee0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
9ef0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
9f00: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
9f10: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
9f20: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
9f30: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
9f40: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
9f50: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
9f60: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
9f70: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
9f80: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
9f90: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d  too_big;.  }.  M
9fa0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9fb0: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
9fc0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
9fd0: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
9fe0: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
9ff0: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
a000: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
a010: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
a020: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
a030: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
a040: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
a050: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
a060: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
a070: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
a080: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b  Out->z[nByte]=0;
a090: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
a0a0: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
a0b0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
a0c0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
a0d0: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
a0e0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
a0f0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
a100: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a110: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a120: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
a130: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a140: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a150: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
a160: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
a170: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
a180: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a190: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
a1a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
a1b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
a1c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
a1d0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
a1e0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
a1f0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
a200: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
a210: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a220: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b    r[P3]=r[P1]*r[
a230: 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  P2].**.**.** Mul
a240: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
a250: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
a260: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
a270: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
a280: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a290: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a2a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a2b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
a2c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a2d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
a2e0: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
a2f0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a300: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
a310: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
a320: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
a330: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
a340: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
a350: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a360: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a370: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a380: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a390: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a3a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a3b0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a3c0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
a3d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a3e0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
a3f0: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
a400: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
a410: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
a420: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a430: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
a440: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
a460: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
a470: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
a480: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
a490: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
a4a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
a4b0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a4c0: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
a4d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a4e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
a4f0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
a500: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a510: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b    r[P3]=r[P2]%r[
a520: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  P1].**.** Comput
a530: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
a540: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65  after integer re
a550: 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76  gister P2 is div
a560: 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69  ided by .** regi
a570: 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72  ster P1 and stor
a580: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a590: 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a  register P3. .**
a5a0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
a5b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
a5c0: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
a5d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
a5e0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
a5f0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a600: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
a610: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a630: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
a640: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a650: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
a660: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
a670: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
a680: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
a690: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a6a0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
a6b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a6c0: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
a6d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
a6e0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a700: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
a710: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a720: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
a730: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
a740: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a750: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
a760: 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62  out3 */.  char b
a770: 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61  Intint;   /* Sta
a780: 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20  rted out as two 
a790: 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73  integer operands
a7a0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
a7b0: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
a7c0: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
a7d0: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
a7e0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
a7f0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
a800: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a810: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
a820: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a830: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
a840: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
a850: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
a860: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
a870: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
a880: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
a890: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
a8a0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
a8b0: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
a8c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a8d0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
a8e0: 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20  finity(pIn1);.  
a8f0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
a900: 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e 75  ->p2];.  applyNu
a910: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
a920: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
a930: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
a940: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
a950: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
a960: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
a970: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
a980: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a990: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a9a0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
a9b0: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
a9c0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
a9d0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20  M_Int ){.    iA 
a9e0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
a9f0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
aa00: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
aa10: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
aa20: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
aa30: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
aa40: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
aa50: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
aa60: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
aa70: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
aa80: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
aa90: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
aaa0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
aab0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
aac0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
aad0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
aae0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
aaf0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
ab00: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
ab10: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
ab20: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
ab30: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
ab40: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
ab50: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
ab60: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
ab70: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
ab80: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
ab90: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
aba0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
abb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
abc0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
abd0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
abe0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
abf0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
ac00: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
ac10: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
ac20: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
ac30: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
ac40: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
ac50: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
ac60: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
ac70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ac80: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
ac90: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
aca0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
acb0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
acc0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
acd0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
ace0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
acf0: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
ad00: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
ad10: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
ad20: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
ad30: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
ad40: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
ad50: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
ad60: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
ad70: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
ad80: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
ad90: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
ada0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
adb0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
adc0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
add0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
ade0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
adf0: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
ae00: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
ae10: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
ae20: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
ae30: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ae40: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
ae50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ae60: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
ae70: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
ae80: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
ae90: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
aea0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
aeb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
aec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
aed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
aee0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
aef0: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
af00: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
af10: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
af20: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
af30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
af40: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
af50: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
af60: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
af70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
af80: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
af90: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
afa0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
afb0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
afc0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
afd0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
afe0: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
aff0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b000: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
b010: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
b020: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21  EM_Real)==0 && !
b030: 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20  bIntint ){.     
b040: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
b050: 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74  gerAffinity(pOut
b060: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
b070: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
b080: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b090: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
b0a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
b0b0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b0c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
b0d0: 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34  ollSeq P1 * * P4
b0e0: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
b0f0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c  ointer to a Coll
b100: 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74  Seq struct. If t
b110: 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20  he next call to 
b120: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  a user function.
b130: 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20  ** or aggregate 
b140: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74  calls sqlite3Get
b150: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74  FuncCollSeq(), t
b160: 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  his collation se
b170: 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62  quence will.** b
b180: 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73  e returned. This
b190: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
b1a0: 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20  built-in min(), 
b1b0: 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66  max() and nullif
b1c0: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e  ().** functions.
b1d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
b1e0: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
b1f0: 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  t is a register 
b200: 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e  that a subsequen
b210: 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61  t min() or.** ma
b220: 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69  x() aggregate wi
b230: 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74  ll set to 1 if t
b240: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69  he current row i
b250: 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75  s not the minimu
b260: 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e  m or.** maximum.
b270: 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65    The P1 registe
b280: 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  r is initialized
b290: 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e   to 0 by this in
b2a0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
b2b0: 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75   The interface u
b2c0: 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65  sed by the imple
b2d0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
b2e0: 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20   aforementioned 
b2f0: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20  functions.** to 
b300: 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  retrieve the col
b310: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
b320: 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f  set by this opco
b330: 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  de is not availa
b340: 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c  ble.** publicly,
b350: 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75   only to user fu
b360: 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20  nctions defined 
b370: 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61  in func.c..*/.ca
b380: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
b390: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b3a0: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
b3b0: 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  EQ );.  if( pOp-
b3c0: 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
b3d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
b3e0: 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  4(&aMem[pOp->p1]
b3f0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 0);.  }.  brea
b400: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b410: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
b420: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
b430: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
b440: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
b450: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
b460: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
b470: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
b480: 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65  nction structure
b490: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73   that.** defines
b4a0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77   the function) w
b4b0: 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73  ith P5 arguments
b4c0: 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
b4d0: 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73  ster P2 and.** s
b4e0: 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20  uccessors.  The 
b4f0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
b500: 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  nction is stored
b510: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b520: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
b530: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
b540: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
b550: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
b560: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
b570: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
b580: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
b590: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
b5a0: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
b5b0: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
b5c0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
b5d0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
b5e0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
b5f0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
b600: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
b610: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
b620: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
b630: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
b640: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
b650: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
b660: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
b670: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
b680: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
b690: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
b6a0: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
b6b0: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
b6c0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
b6d0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
b6e0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
b6f0: 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67  : AggStep and Ag
b700: 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f  gFinal.*/.case O
b710: 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20  P_Function: {.  
b720: 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41  int i;.  Mem *pA
b730: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  rg;.  sqlite3_co
b740: 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
b750: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
b760: 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  al;.  int n;..  
b770: 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
b780: 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
b790: 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
b7a0: 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73   || n==0 );.  as
b7b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
b7c0: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
b7d0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
b7e0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
b7f0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
b800: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
b810: 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73  p, pOut);..  ass
b820: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
b830: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
b840: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
b850: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
b860: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b870: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
b880: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
b890: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d   );.  pArg = &aM
b8a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66  em[pOp->p2];.  f
b8b0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
b8c0: 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61  , pArg++){.    a
b8d0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
b8e0: 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61  d(pArg) );.    a
b8f0: 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a  pVal[i] = pArg;.
b900: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
b910: 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71  ze(pArg);.    sq
b920: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
b930: 65 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20  eType(pArg);.   
b940: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
b950: 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29  pOp->p2+i, pArg)
b960: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
b970: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b980: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74  _FUNCDEF );.  ct
b990: 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
b9a0: 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69  4.pFunc;.  ctx.i
b9b0: 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 70  Op = pc;.  ctx.p
b9c0: 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a 20  Vdbe = p;..  /* 
b9d0: 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
b9e0: 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
b9f0: 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
ba00: 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
ba10: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74  he pointer to ct
ba20: 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  x.s so in case t
ba30: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
ba40: 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68   can use.  ** th
ba50: 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
ba60: 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
ba70: 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
ba80: 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f   a new one..  */
ba90: 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e 73  .  memcpy(&ctx.s
baa0: 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28 4d  , pOut, sizeof(M
bab0: 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  em));.  pOut->fl
bac0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
bad0: 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
bae0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  ;.  pOut->zMallo
baf0: 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74 54  c = 0;.  MemSetT
bb00: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
bb10: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
bb20: 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  x.fErrorOrAux = 
bb30: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
bb40: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
bb50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
bb60: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
bb70: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
bb80: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
bb90: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
bba0: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
bbb0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
bbc0: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
bbd0: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
bbe0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
bbf0: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
bc00: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
bc10: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
bc20: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
bc30: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
bc40: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
bc50: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
bc60: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
bc70: 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  d;..  if( db->ma
bc80: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
bc90: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
bca0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
bcb0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
bcc0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
bcd0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
bce0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
bcf0: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
bd00: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
bd10: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
bd20: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
bd30: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
bd40: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
bd50: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
bd60: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
bd70: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
bd80: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
bd90: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
bda0: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
bdb0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
bdc0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
bdd0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
bde0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
bdf0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
be00: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
be10: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
be20: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
be30: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
be40: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
be50: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
be60: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
be70: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20 20  &ctx.s));.      
be80: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
be90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
bea0: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
beb0: 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d  Data(p, pc, pOp-
bec0: 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  >p1);.  }..  /* 
bed0: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
bee0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
bef0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
bf00: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
bf10: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
bf20: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
bf30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  );.  assert( pOu
bf40: 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
bf50: 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70  ll );.  memcpy(p
bf60: 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69 7a  Out, &ctx.s, siz
bf70: 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66 28  eof(Mem));.  if(
bf80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
bf90: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
bfa0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
bfb0: 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a  .  }..#if 0.  /*
bfc0: 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64   The app-defined
bfd0: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f   function has do
bfe0: 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  ne something tha
bff0: 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73  t as caused this
c000: 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  .  ** statement 
c010: 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72  to expire.  (Per
c020: 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f  haps the functio
c030: 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33  n called sqlite3
c040: 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74  _exec().  ** wit
c050: 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  h a CREATE TABLE
c060: 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a   statement.).  *
c070: 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  /.  if( p->expir
c080: 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
c090: 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a  _ABORT;.#endif..
c0a0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
c0b0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
c0c0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c0d0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
c0e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c0f0: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
c100: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c110: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c120: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c130: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c140: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c150: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c160: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c170: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c180: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c190: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c1a0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c1b0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c1c0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c1d0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c1e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c1f0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32  r[P3]=r[P1]|r[P2
c200: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
c210: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
c220: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c230: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c240: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c250: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c260: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c270: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c280: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c290: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c2a0: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
c2b0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c2c0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c2d0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
c2e0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
c2f0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
c300: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
c310: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
c320: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
c330: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
c340: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
c350: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
c360: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c370: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c380: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c390: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c3a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c3b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
c3c0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
c3d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c3e0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72    r[P3]=r[P2]>>r
c3f0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c400: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c410: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c420: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
c430: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
c440: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
c450: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
c460: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
c470: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
c480: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c490: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c4a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c4b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c4c0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c4d0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
c4e0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c4f0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
c500: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
c510: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
c540: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
c550: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
c560: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
c570: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c580: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
c590: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c5a0: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
c5b0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
c5c0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
c5d0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
c5e0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
c5f0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
c600: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
c610: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c620: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
c630: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
c640: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
c650: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
c660: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
c670: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
c680: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
c690: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c6a0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
c6b0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
c6c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
c6d0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
c6e0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
c6f0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
c700: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
c710: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
c720: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
c730: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
c740: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
c750: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
c760: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
c770: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
c780: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
c790: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
c7a0: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
c7b0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
c7c0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
c7d0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
c7e0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
c7f0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
c800: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
c810: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
c820: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
c830: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
c840: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
c850: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
c860: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
c870: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
c880: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
c890: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
c8a0: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
c8b0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
c8c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
c8d0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
c8e0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
c8f0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
c900: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
c910: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
c920: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
c930: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
c940: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
c950: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
c960: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
c970: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
c980: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
c990: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
c9a0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
c9b0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
c9c0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
c9d0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
c9e0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
c9f0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
ca00: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
ca10: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
ca20: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
ca30: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
ca40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
ca50: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
ca60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca70: 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20  P1]=r[P1]+P2.** 
ca80: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
ca90: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
caa0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cab0: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
cac0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
cad0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
cae0: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
caf0: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
cb00: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
cb10: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
cb20: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
cb30: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
cb40: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cb50: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
cb60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
cb70: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
cb80: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
cb90: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
cba0: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
cbb0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
cbc0: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
cbd0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
cbe0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
cbf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cc00: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
cc10: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
cc20: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
cc30: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
cc40: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
cc50: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
cc60: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
cc70: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
cc80: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
cc90: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
cca0: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
ccb0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
ccc0: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
ccd0: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
ccf0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
cd00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cd10: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
cd20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
cd30: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
cd40: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
cd50: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
cd60: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
cd70: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
cd80: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
cd90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
cda0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
cdb0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
cdc0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
cdd0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
cde0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
cdf0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ce00: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
ce10: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
ce20: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
ce30: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
ce40: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
ce50: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
ce60: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
ce70: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
ce80: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
ce90: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
cea0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
ceb0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
cec0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
ced0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
cee0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
cef0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
cf00: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
cf10: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
cf20: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
cf30: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
cf40: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
cf50: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
cf60: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
cf70: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
cf80: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
cf90: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
cfa0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
cfb0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
cfc0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
cfd0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
cfe0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
cff0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d000: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d010: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d020: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
d030: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d040: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
d050: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
d060: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d070: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
d080: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d090: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
d0a0: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
d0b0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
d0c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d0d0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
d0e0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
d0f0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
d100: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
d110: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
d120: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
d130: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
d140: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
d150: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
d160: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
d170: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
d180: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
d190: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
d1a0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
d1b0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
d1c0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
d1d0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
d1e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d1f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d200: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
d210: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d220: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d230: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d240: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49   pIn1);.  if( pI
d250: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d260: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
d270: 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d  assert( MEM_Str=
d280: 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29  =(MEM_Blob>>3) )
d290: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
d2a0: 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  |= (pIn1->flags&
d2b0: 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20  MEM_Blob)>>3;.  
d2c0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
d2d0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  n1, SQLITE_AFF_T
d2e0: 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  EXT, encoding);.
d2f0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d300: 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72  b(pIn1);.  asser
d310: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
d320: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
d330: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
d340: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d    pIn1->flags &=
d350: 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52   ~(MEM_Int|MEM_R
d360: 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  eal|MEM_Blob|MEM
d370: 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45  _Zero);.  UPDATE
d380: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
d390: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d3a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c  ./* Opcode: ToBl
d3b0: 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ob P1 * * * *.**
d3c0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d3d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d3e0: 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e  P1 to be a BLOB.
d3f0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d400: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
d410: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
d420: 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74  ing first..** St
d430: 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79  rings are simply
d440: 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61   reinterpreted a
d450: 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20  s blobs with no 
d460: 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65  change.** to the
d470: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
d480: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d490: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d4a0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d4b0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d4c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d4d0: 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20  P_ToBlob: {     
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4f0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c  same as TK_TO_BL
d500: 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  OB, in1 */.  pIn
d510: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d520: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d530: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d540: 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20   ) break;.  if( 
d550: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d560: 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
d570: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d580: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
d590: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
d5a0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
d5b0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d5c0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
d5d0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
d5e0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d5f0: 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  In1, MEM_Blob);.
d600: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
d610: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
d620: 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f  M_TypeMask&~MEM_
d630: 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44  Blob);.  }.  UPD
d640: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
d650: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
d660: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
d670: 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20  oNumeric P1 * * 
d680: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d690: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d6a0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e  ister P1 to be n
d6b0: 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61  umeric (either a
d6c0: 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20  n.** integer or 
d6d0: 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  a floating-point
d6e0: 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20   number.).** If 
d6f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d700: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d710: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d720: 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  an using the.** 
d730: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d740: 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61  oi() or atof() a
d750: 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f  nd store 0 if no
d760: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
d770: 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65   .** is possible
d780: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d790: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d7a0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d7b0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d7c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d7d0: 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20  P_ToNumeric: {  
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d800: 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f  _NUMERIC, in1 */
d810: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d820: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69  pOp->p1];.  sqli
d830: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
d840: 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  fy(pIn1);.  brea
d850: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
d860: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
d870: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
d880: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
d890: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d8a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d8b0: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
d8c0: 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68  teger.  If.** Th
d8d0: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
d8e0: 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62  ntly a real numb
d8f0: 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61  er, drop its fra
d900: 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a  ctional part..**
d910: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
d920: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
d930: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
d940: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
d950: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
d960: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
d970: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
d980: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
d990: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
d9a0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
d9b0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
d9c0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
d9d0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
d9e0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
d9f0: 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  ToInt: {        
da00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
da10: 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20  e as TK_TO_INT, 
da20: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
da30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
da40: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
da50: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
da60: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
da70: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
da80: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
da90: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65  reak;.}..#if !de
daa0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
dab0: 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69  T_CAST) && !defi
dac0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
dad0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a  FLOATING_POINT).
dae0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61  /* Opcode: ToRea
daf0: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  l P1 * * * *.**.
db00: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
db10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
db20: 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69  1 to be a floati
db30: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng point number.
db40: 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65  .** If The value
db50: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e   is currently an
db60: 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72   integer, conver
db70: 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  t it..** If the 
db80: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
db90: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
dba0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
dbb0: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
dbc0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
dbd0: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
dbe0: 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63  re 0.0 if no suc
dbf0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
dc00: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
dc10: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
dc20: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
dc30: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
dc40: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
dc50: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c  /.case OP_ToReal
dc60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
dc70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dc80: 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20  TK_TO_REAL, in1 
dc90: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
dca0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
dcb0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
dcc0: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28  , pIn1);.  if( (
dcd0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
dce0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
dcf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dd00: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
dd10: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
dd20: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
dd30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
dd40: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
dd50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
dd60: 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f  ING_POINT) */../
dd70: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
dd80: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
dd90: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
dda0: 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]<r[P3] goto P2.
ddb0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
ddc0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ddd0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
dde0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
ddf0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
de00: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
de10: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
de20: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
de30: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
de40: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
de50: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
de60: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
de70: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
de80: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
de90: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
dea0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
deb0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
dec0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ded0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
dee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
def0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
df00: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
df10: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
df20: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
df30: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
df40: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
df50: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
df60: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
df70: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
df80: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
df90: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
dfa0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
dfb0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
dfc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
dfd0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
dfe0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
dff0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
e000: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
e010: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
e020: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
e030: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
e040: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
e050: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
e060: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
e070: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
e080: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
e090: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e0a0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
e0b0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
e0c0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
e0d0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
e0e0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
e0f0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
e100: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
e110: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
e120: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
e130: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
e140: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
e150: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
e160: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
e170: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
e180: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
e190: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
e1a0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
e1b0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
e1c0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
e1d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e1e0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e1f0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e200: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e210: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e220: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e230: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e240: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e250: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e260: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e270: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e280: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e290: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e2a0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e2b0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e2c0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e2d0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e2e0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e2f0: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
e300: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
e310: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
e320: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
e330: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
e340: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
e350: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
e360: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
e370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e380: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e390: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20  LITE_NULLEQ bit 
e3a0: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
e3b0: 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  en NULL values a
e3c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a  re considered.**
e3d0: 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
e3e0: 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20  other, provided 
e3f0: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
e400: 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f   have their MEM_
e410: 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73  Cleared.** bit s
e420: 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  et..*/./* Opcode
e430: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e440: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e450: 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d   if r[P1]!=r[P3]
e460: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e470: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e480: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e490: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e4a0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e4b0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e4c0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e4d0: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e4e0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e4f0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
e500: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e510: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e520: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e530: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e540: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e550: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e560: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e570: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e580: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e590: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e5a0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e5b0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e5c0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e5d0: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
e5e0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e5f0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e600: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
e610: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e620: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e630: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e640: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e650: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e660: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e670: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e680: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e690: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
e6a0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e6b0: 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20  if r[P1]==r[P3] 
e6c0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e6d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e6e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e6f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e700: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e710: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e720: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e730: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
e740: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
e750: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e760: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e770: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
e780: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e790: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
e7a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
e7b0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
e7c0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e7d0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e7e0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e7f0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e800: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e810: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e820: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e830: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e840: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e850: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e860: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e870: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e880: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e890: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e8a0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e8b0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e8c0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e8d0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
e8e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
e8f0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e900: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e910: 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]<=r[P3] goto P
e920: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e930: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e940: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e950: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e960: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e970: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e980: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
e990: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
e9a0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e9b0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e9c0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e9d0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e9e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e9f0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
ea00: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ea10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ea20: 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74   r[P1]>r[P3] got
ea30: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
ea40: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ea50: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ea60: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ea70: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ea80: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
ea90: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
eaa0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
eab0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
eac0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
ead0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
eae0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
eaf0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
eb00: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
eb10: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
eb20: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
eb30: 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  >=r[P3] goto P2.
eb40: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
eb50: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
eb60: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
eb70: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
eb80: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
eb90: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
eba0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
ebb0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
ebc0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
ebd0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
ebe0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
ebf0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ec00: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ec10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ec30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
ec40: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ec50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ec70: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
ec80: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ec90: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
eca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ecb0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
ecc0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ecd0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
ece0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ecf0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ed00: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ed10: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
ed20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ed30: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ed40: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ed50: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ed60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ed70: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ed80: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ed90: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  es;            /
eda0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
edb0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
edc0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
edd0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
ede0: 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
edf0: 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
ee00: 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
ee10: 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
ee20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
ee30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
ee40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
ee50: 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
ee60: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
ee70: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
ee80: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
ee90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
eea0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
eeb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
eec0: 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
eed0: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
eee0: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
eef0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
ef00: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
ef10: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
ef20: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
ef30: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
ef40: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
ef50: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
ef60: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
ef70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
ef80: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
ef90: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
efa0: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
efb0: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
efc0: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
efd0: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
efe0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
eff0: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
f000: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
f010: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
f020: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
f030: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
f040: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
f050: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
f060: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f070: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
f080: 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
f090: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45    if( (flags1&ME
f0a0: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f0b0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f0c0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
f0d0: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
f0e0: 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
f0f0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
f100: 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 0;  /* Result
f110: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
f120: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f130: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
f140: 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74   Results are not
f150: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
f160: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
f170: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
f180: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
f190: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
f1a0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
f1b0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
f1c0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
f1d0: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
f1e0: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
f1f0: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
f200: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
f210: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
f220: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
f230: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
f240: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
f250: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
f260: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
f270: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f280: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
f290: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
f2a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f2b0: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
f2c0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
f2d0: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
f2e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
f2f0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
f300: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f310: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f320: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f330: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f340: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f350: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f360: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f370: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f380: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20     if( affinity 
f390: 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
f3a0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
f3b0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
f3c0: 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  ;.      applyAff
f3d0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
f3e0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
f3f0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  .      if( db->m
f400: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
f410: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
f420: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
f430: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
f440: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
f450: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
f460: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
f470: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
f480: 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73  b(pIn3);.    res
f490: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
f4a0: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
f4b0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
f4c0: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
f4d0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
f4e0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
f4f0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
f500: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f510: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
f520: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
f530: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f540: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
f550: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
f560: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
f570: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
f580: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f590: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
f5a0: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
f5b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
f5c0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
f5d0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
f5e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
f5f0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f600: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f610: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
f620: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
f630: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f640: 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
f650: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f660: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
f670: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
f680: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f690: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
f6a0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
f6b0: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
f6c0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20  p->p2-1;.  }..  
f6d0: 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
f6e0: 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
f6f0: 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
f700: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
f710: 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66  rs. */.  pIn1->f
f720: 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  lags = (pIn1->fl
f730: 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  ags&~MEM_TypeMas
f740: 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d  k) | (flags1&MEM
f750: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49  _TypeMask);.  pI
f760: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n3->flags = (pIn
f770: 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  3->flags&~MEM_Ty
f780: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f790: 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  3&MEM_TypeMask);
f7a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f7b0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
f7c0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
f7d0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
f7e0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
f7f0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
f800: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
f810: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
f820: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
f830: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
f840: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
f850: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
f860: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
f870: 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
f880: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f890: 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
f8a0: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
f8b0: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
f8c0: 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
f8d0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
f8e0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
f8f0: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
f900: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
f910: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f920: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
f930: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
f940: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
f950: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
f960: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f970: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
f980: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
f990: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
f9a0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
f9b0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
f9c0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
f9d0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
f9e0: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
f9f0: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
fa00: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
fa10: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
fa20: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
fa30: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
fa40: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
fa50: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
fa60: 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
fa70: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
fa80: 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
fa90: 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
faa0: 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
fab0: 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
fac0: 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
fad0: 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
fae0: 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
faf0: 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
fb00: 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
fb10: 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
fb20: 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
fb30: 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
fb40: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
fb50: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
fb60: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
fb70: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
fb80: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
fb90: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
fba0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
fbb0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
fbc0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
fbd0: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
fbe0: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
fbf0: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
fc00: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
fc10: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
fc20: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
fc30: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
fc40: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
fc50: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
fc60: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
fc70: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
fc80: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
fc90: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
fca0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
fcb0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
fcc0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
fcd0: 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
fce0: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
fcf0: 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
fd00: 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
fd10: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
fd20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
fd30: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
fd40: 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
fd50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
fd60: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
fd70: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
fd80: 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
fd90: 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
fda0: 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
fdb0: 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
fdc0: 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
fdd0: 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
fde0: 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
fdf0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
fe00: 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
fe10: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
fe20: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
fe30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
fe40: 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
fe50: 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
fe60: 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
fe70: 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
fe80: 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
fe90: 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
fea0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
feb0: 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
fec0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
fed0: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
fee0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
fef0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
ff00: 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c  rsor)+1 );.  }el
ff10: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
ff20: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70  p1>0 && p1+n<=(p
ff30: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
ff40: 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
ff50: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
ff60: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
ff70: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
ff80: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ff90: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
ffa0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
ffb0: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
ffc0: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
ffd0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
ffe0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
fff0: 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
10000 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10010 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
10020 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
10030 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
10040 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
10050 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
10060 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
10070 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
10080 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
10090 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
100a0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
100b0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
100c0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
100d0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
100e0 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
100f0 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10100 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
10110 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
10120 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
10130 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
10140 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
10150 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
10160 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
10170 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
10180 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
10190 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
101a0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
101b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
101c0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
101d0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
101e0 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
101f0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
10200 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
10210 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
10220 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
10230 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
10240 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
10250 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
10260 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
10270 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
10280 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
10290 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
102a0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
102b0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
102c0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
102d0 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
102e0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
102f0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
10300 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
10310 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
10320 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
10330 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10340 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
10350 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10360 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
10370 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
10380 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
10390 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
103a0 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
103b0 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
103c0 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
103d0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
103e0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
103f0 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
10400 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
10410 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
10420 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
10430 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
10440 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
10450 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
10460 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
10470 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
10480 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
10490 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
104a0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
104b0 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
104c0 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
104d0 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
104e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
104f0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
10500 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
10510 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
10520 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
10530 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
10540 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
10550 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
10560 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
10570 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
10580 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
10590 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
105a0 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
105b0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
105c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105e0 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
105f0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
10600 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
10610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10620 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
10630 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
10640 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
10650 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
10660 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
10670 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
10680 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
10690 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
106a0 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
106b0 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
106c0 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
106d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
106e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
106f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10700 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
10710 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10720 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
10730 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10740 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
10750 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10760 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
10770 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10780 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
10790 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
107a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
107b0 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
107c0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
107d0 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
107e0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
107f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10800 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
10810 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
10820 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
10830 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
10840 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
10850 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10860 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10870 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
10880 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
10890 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
108a0 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
108b0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
108c0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
108d0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
108e0 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
108f0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10900 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
10910 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
10920 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
10930 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10940 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
10950 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10960 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
10970 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10980 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
10990 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
109a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
109b0 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
109c0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
109d0 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
109e0 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
109f0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10a00 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10a10 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
10a20 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
10a30 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
10a40 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
10a50 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10a60 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10a70 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
10a80 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
10a90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10aa0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10ab0 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10ac0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10ad0 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
10ae0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
10af0 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
10b00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10b10 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
10b20 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , !sqlite3VdbeIn
10b30 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
10b40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10b50 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
10b60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10b70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
10b80 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   ~r[P1].**.** In
10b90 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
10ba0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
10bb0 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
10bc0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
10bd0 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
10be0 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
10bf0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
10c00 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
10c10 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
10c20 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
10c30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
10c40 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10c50 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10c60 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
10c70 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
10c80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10c90 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10ca0 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
10cb0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10cc0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
10cd0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
10ce0 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
10cf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
10d00 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
10d10 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49  t, ~sqlite3VdbeI
10d20 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
10d30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
10d50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
10d60 2a 20 43 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e  * Check if OP_On
10d70 63 65 20 66 6c 61 67 20 50 31 20 69 73 20 73 65  ce flag P1 is se
10d80 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  t. If so, jump t
10d90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
10da0 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20  . Otherwise,.** 
10db0 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
10dc0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
10dd0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
10de0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
10df0 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
10e00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
10e10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10e20 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  p1<p->nOnceFlag 
10e30 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63  );.  if( p->aOnc
10e40 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29  eFlag[pOp->p1] )
10e50 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10e60 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
10e70 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
10e80 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
10e90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10ea0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
10eb0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10ec0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10ed0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10ee0 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
10ef0 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10f00 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
10f10 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
10f20 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
10f30 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10f40 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10f50 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10f60 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
10f70 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
10f80 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
10f90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10fa0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10fb0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10fc0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
10fd0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
10fe0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
10ff0 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
11000 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
11010 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11020 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11030 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11040 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f  mp if P3 is zero
11050 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11080 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
11090 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
110a0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
110b0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
110c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
110d0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
110e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
110f0 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
11100 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
11110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
11120 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
11130 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
11140 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
11150 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
11160 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
11170 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
11180 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
11190 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
111a0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
111b0 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
111c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
111d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
111e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
111f0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11200 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
11210 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
11220 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11230 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11240 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11250 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
11260 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
11270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11280 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
11290 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
112a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
112b0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
112c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
112d0 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
112e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
112f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11300 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11310 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
11320 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
11330 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
11340 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11350 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11360 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11370 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
11380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
11390 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
113a0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
113b0 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
113c0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
113d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
113e0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
113f0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11400 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11410 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
11420 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11430 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50  ode: Column P1 P
11440 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
11450 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50  nopsis:  r[P3]=P
11460 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
11470 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
11480 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
11490 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
114a0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
114b0 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
114c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
114d0 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
114e0 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
114f0 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
11500 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
11510 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
11520 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
11530 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
11540 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
11550 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
11560 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
11570 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
11580 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
11590 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
115a0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
115b0 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
115c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
115d0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
115e0 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
115f0 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
11600 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
11610 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
11620 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
11630 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
11640 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
11650 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
11660 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
11670 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
11680 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
11690 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
116a0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
116b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
116c0 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
116d0 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
116e0 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
116f0 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
11700 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
11710 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
11720 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
11730 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
11740 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
11750 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
11760 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
11770 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
11780 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
11790 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
117a0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
117b0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
117c0 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
117d0 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 when.** the 
117e0 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
117f0 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
11800 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
11810 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
11820 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
11830 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
11840 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
11850 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
11860 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
11870 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
11880 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
11890 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
118a0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
118b0 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
118c0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
118d0 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
118e0 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
118f0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
11900 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32  cord */.  int p2
11910 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11920 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
11930 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
11940 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
11950 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
11960 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
11970 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
11980 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
11990 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65   */.  u32 *aType
119a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70  ;        /* aTyp
119b0 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e  e[i] holds the n
119c0 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74  umeric type of t
119d0 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  he i-th column *
119e0 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
119f0 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
11a00 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
11a10 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
11a20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
11a30 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
11a40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
11a50 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
11a60 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
11a70 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
11a80 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
11a90 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
11aa0 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ter */.  Mem *pD
11ab0 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11ac0 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11ad0 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11ae0 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11b00 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
11b10 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11b20 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
11b30 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72  *zData;   /* Par
11b40 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
11b50 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11b60 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64  .  const u8 *zHd
11b70 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e  r;    /* Next un
11b80 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74  parsed byte of t
11b90 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63  he header */.  c
11ba0 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72  onst u8 *zEndHdr
11bb0 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ; /* Pointer to 
11bc0 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
11bd0 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11be0 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
11bf0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
11c00 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
11c10 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
11c20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11c30 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
11c40 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
11c50 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
11c60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11c70 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
11c80 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
11c90 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
11ca0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
11cb0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
11cc0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
11cd0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
11ce0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
11cf0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
11d00 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70  r */..  p2 = pOp
11d10 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
11d20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
11d30 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
11d40 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
11d50 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
11d60 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
11d70 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
11d80 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
11d90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
11da0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
11db0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
11dc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
11dd0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
11de0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
11df0 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 54  ->nField );.  aT
11e00 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
11e10 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 61 54 79  .  aOffset = aTy
11e20 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  pe + pC->nField;
11e30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11e40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
11e50 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
11e60 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
11e70 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e  ; /* OP_Column n
11e80 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76  ever called on v
11e90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11ea0 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
11eb0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
11ec0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
11ed0 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
11ee0 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70  bleReg>0 ); /* p
11ef0 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65  Crsr NULL on Pse
11f00 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61  udoTables */.  a
11f10 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
11f20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
11f30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43  ;          /* pC
11f40 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65  ->nullRow on Pse
11f50 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udoTables */..  
11f60 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
11f70 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c   cache is stale,
11f80 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
11f90 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  date */.  rc = s
11fa0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
11fb0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
11fc0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
11fd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
11fe0 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
11ff0 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43  tatus!=p->cacheC
12000 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f  tr || (pOp->p5&O
12010 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
12020 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
12030 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
12040 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d       if( pCrsr==
12050 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
12060 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
12070 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
12080 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
12090 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
120a0 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 69  eReg];.        i
120b0 66 28 20 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75  f( pC->multiPseu
120c0 64 6f 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  do ){.          
120d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
120e0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
120f0 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d 5f 45 70   pReg+p2, MEM_Ep
12100 68 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  hem);.          
12110 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
12120 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Dest);.         
12130 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12140 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
12150 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
12160 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
12170 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20  _Blob );.       
12180 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
12190 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
121a0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
121b0 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77  Size = pC->szRow
121c0 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d   = avail = pReg-
121d0 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  >n;.        pC->
121e0 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67  aRow = (u8*)pReg
121f0 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ->z;.      }else
12200 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  {.        MemSet
12210 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
12220 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
12230 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12240 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
12250 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12260 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
12270 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
12280 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
12290 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
122a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
122b0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
122c0 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
122d0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
122e0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
122f0 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
12300 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  4);.        asse
12310 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
12320 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63  K ); /* True bec
12330 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
12340 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
12350 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20  e */.        /* 
12360 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
12370 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
12380 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
12390 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
123a0 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20       ** payload 
123b0 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69  size, so it is i
123c0 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61  mpossible for pa
123d0 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62  yloadSize64 to b
123e0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72  e.        ** lar
123f0 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
12400 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
12410 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
12420 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
12430 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
12440 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
12450 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
12460 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
12470 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12480 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  il);.        pC-
12490 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28  >payloadSize = (
124a0 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
124b0 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  4;.      }else{.
124c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
124d0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
124e0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
124f0 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
12500 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
12510 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
12520 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c  pCrsr, &pC->payl
12530 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
12540 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12550 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
12560 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
12570 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20  t fail */.      
12580 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
12590 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74  ite3BtreeDataFet
125a0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
125b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
125c0 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d   assert( avail<=
125d0 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
125e0 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
125f0 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
12600 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12610 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
12620 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  il ){.        pC
12630 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61  ->szRow = pC->pa
12640 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
12650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12660 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69  pC->szRow = avai
12670 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
12680 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12690 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
126a0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
126b0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
126c0 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
126d0 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
126e0 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
126f0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
12700 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
12710 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
12720 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
12730 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43   offset);.    pC
12740 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
12750 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d  ;.    aOffset[0]
12760 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69   = offset;.    i
12770 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20  f( avail<offset 
12780 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  ){.      /* pC->
12790 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
127a0 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
127b0 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
127c0 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
127d0 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
127e0 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
127f0 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
12800 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
12810 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
12820 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
12830 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
12840 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
12850 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
12860 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
12870 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12880 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
12890 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
128a0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
128b0 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  w = 0;.    }..  
128c0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
128d0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
128e0 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
128f0 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
12900 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
12910 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
12920 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
12930 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12940 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
12950 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
12960 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
12970 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
12980 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
12990 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
129a0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
129b0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
129c0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
129d0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
129e0 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
129f0 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
12a00 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
12a10 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
12a20 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
12a30 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
12a40 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
12a50 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
12a60 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
12a70 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
12a80 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
12a90 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
12aa0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
12ab0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
12ac0 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
12ad0 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  || offset > pC->
12ae0 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20  payloadSize ){. 
12af0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
12b00 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
12b10 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12b20 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  umn_error;.    }
12b30 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
12b40 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
12b50 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
12b60 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
12b70 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
12b80 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
12b90 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
12ba0 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
12bb0 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f  nd aType[]..  */
12bc0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50  .  if( pC->nHdrP
12bd0 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
12be0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
12bf0 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69  more header avai
12c00 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e  lable for parsin
12c10 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  g in the record,
12c20 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65   try.    ** to e
12c30 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61  xtract additiona
12c40 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f  l fields up thro
12c50 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20  ugh the p2+1-th 
12c60 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20  field .    */.  
12c70 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66    if( pC->iHdrOf
12c80 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20  fset<aOffset[0] 
12c90 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ){.      /* Make
12ca0 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e   sure zData poin
12cb0 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20  ts to enough of 
12cc0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f  the record to co
12cd0 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20  ver the header. 
12ce0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
12cf0 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  >aRow==0 ){.    
12d00 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d      memset(&sMem
12d10 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
12d20 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ));.        rc =
12d30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12d40 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
12d50 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a  0, aOffset[0], .
12d60 20 20 20 20 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 21 70 43 2d 3e 69 73 54 61 62 6c       !pC->isTabl
12d90 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  e, &sMem);.     
12da0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
12db0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12dc0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12dd0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
12de0 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
12df0 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
12e00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12e10 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
12e20 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
12e30 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
12e40 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  n aType[i] and a
12e50 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
12e60 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
12e70 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
12e80 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
12e90 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
12ea0 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  set = aOffset[i]
12eb0 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
12ec0 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
12ed0 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
12ee0 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
12ef0 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
12f00 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26   assert( i<=p2 &
12f10 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
12f20 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
12f30 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c      if( zHdr[0]<
12f40 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
12f50 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20    t = zHdr[0];. 
12f60 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
12f70 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
12f80 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
12f90 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
12fa0 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
12fb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12fc0 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a    aType[i] = t;.
12fd0 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20          szField 
12fe0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12ff0 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
13000 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
13010 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20   szField;.      
13020 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46    if( offset<szF
13030 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65  ield ){  /* True
13040 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66   if offset overf
13050 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  lows */.        
13060 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64    zHdr = &zEndHd
13070 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73  r[1];  /* Forces
13080 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
13090 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a  return below */.
130a0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
130b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
130c0 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
130d0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
130e0 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  set;.      }whil
130f0 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  e( i<=p2 && zHdr
13100 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
13110 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
13120 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = i;.      pC->
13130 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33  iHdrOffset = (u3
13140 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29  2)(zHdr - zData)
13150 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
13160 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13170 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13180 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
13190 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  .        sMem.fl
131a0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
131b0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
131c0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
131d0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
131e0 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
131f0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
13200 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20  eader,.      ** 
13210 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
13220 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
13230 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
13240 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
13250 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72  e.      ** recor
13260 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
13270 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13280 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
13290 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
132a0 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
132b0 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
132c0 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
132d0 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
132e0 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20  e dealing .     
132f0 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
13300 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
13310 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
13320 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29  (zHdr > zEndHdr)
13330 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
13340 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13350 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  Size).       || 
13360 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26  (zHdr==zEndHdr &
13370 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  & offset!=pC->pa
13380 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
13390 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
133a0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
133b0 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
133c0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
133d0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
133e0 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
133f0 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
13400 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ra new entries f
13410 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
13420 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
13430 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
13440 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
13450 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
13460 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
13470 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
13480 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
13490 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
134a0 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
134b0 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
134c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
134d0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
134e0 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
134f0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13500 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
13510 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
13520 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
13530 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
13540 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
13550 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13560 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13570 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
13580 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
13590 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
135a0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
135b0 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63  /* Extract the c
135c0 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70  ontent for the p
135d0 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20  2+1-th column.  
135e0 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79  Control can only
135f0 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73  .  ** reach this
13600 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65   point if aOffse
13610 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70  t[p2], aOffset[p
13620 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b  2+1], and aType[
13630 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
13640 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
13650 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
13660 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
13670 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13680 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  _OK );.  if( pC-
13690 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
136a0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
136b0 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
136c0 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
136d0 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
136e0 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
136f0 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
13700 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
13710 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
13720 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
13730 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
13740 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a  Release(pDest);.
13750 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13760 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f  erialGet(pC->aRo
13770 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  w+aOffset[p2], a
13780 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
13790 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
137a0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
137b0 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
137c0 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
137d0 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 09  erflow pages */.
137e0 0a 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70  .    t = aType[p
137f0 32 5d 3b 0a 20 20 20 20 69 66 28 20 28 28 70 4f  2];.    if( ((pO
13800 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
13810 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47  LENGTHARG|OPFLAG
13820 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a  _TYPEOFARG))!=0.
13830 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74            && ((t
13840 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30  >=12 && (t&1)==0
13850 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  ) || (pOp->p5 & 
13860 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13870 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28  )!=0)).     || (
13880 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
13890 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
138a0 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ))==0.    ){.   
138b0 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73     /* Content is
138c0 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20   irrelevant for 
138d0 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
138e0 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20  ction and for.  
138f0 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74      ** the lengt
13900 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
13910 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53   X is a blob.  S
13920 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
13930 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 2a 2a 20  ll use.      ** 
13940 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
13950 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
13960 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  g content from d
13970 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73  isk.  NULL works
13980 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65  .      ** for te
13990 78 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20  xt and blob and 
139a0 77 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74  whatever is in t
139b0 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  he payloadSize64
139c0 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20   variable.      
139d0 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72  ** will work for
139e0 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65   everything else
139f0 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c  .  Content is al
13a00 73 6f 20 69 72 72 65 6c 65 76 61 6e 74 20 69 66  so irrelevant if
13a10 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
13a20 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
13a30 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74  0. */.      zDat
13a40 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a  a = t<=13 ? (u8*
13a50 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  )&payloadSize64 
13a60 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  : 0;.      sMem.
13a70 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
13a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
13a90 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
13aa0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
13ab0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13ac0 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44  emMove(&sMem, pD
13ad0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  est);.      rc =
13ae0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13af0 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
13b00 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
13b10 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a  , !pC->isTable,.
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20     &sMem);.     
13b50 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13b60 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
13b70 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
13b80 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
13b90 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
13ba0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
13bb0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13bc0 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20  alGet(zData, t, 
13bd0 70 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49  pDest);.    /* I
13be0 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  f we dynamically
13bf0 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13c00 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
13c10 61 20 28 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a  a (in the.    **
13c20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13c30 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
13c40 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
13c50 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
13c60 74 68 61 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61  that.    ** dyna
13c70 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13c80 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20  d space over to 
13c90 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74  the pDest struct
13ca0 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73  ure..    ** This
13cb0 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f   prevents a memo
13cc0 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20  ry copy. */.    
13cd0 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  if( sMem.zMalloc
13ce0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
13cf0 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a  ( sMem.z==sMem.z
13d00 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20  Malloc );.      
13d10 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
13d20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
13d30 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
13d40 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
13d50 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
13d60 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
13d70 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
13d80 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
13d90 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
13da0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
13db0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13dc0 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
13dd0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
13de0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65  Mem.z;.      pDe
13df0 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
13e00 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  em.zMalloc;.    
13e10 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65  }.  }.  pDest->e
13e20 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a  nc = encoding;..
13e30 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
13e40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13e50 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13e60 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c  e(pDest);.op_col
13e70 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44  umn_error:.  UPD
13e80 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13e90 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13ea0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13eb0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
13ec0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13ed0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
13ee0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
13ef0 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
13f00 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
13f10 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
13f20 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
13f30 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
13f40 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
13f50 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
13f60 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13f70 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
13f80 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
13f90 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
13fa0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
13fb0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
13fc0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
13fd0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
13fe0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
13ff0 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
14000 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
14010 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14020 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
14030 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
14040 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
14050 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
14060 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
14070 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
14080 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
14090 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
140a0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
140b0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
140c0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
140d0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
140e0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
140f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14100 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
14110 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
14120 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
14130 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
14140 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
14150 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
14160 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
14170 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 45  d(pIn1) );.    E
14180 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
14190 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
141a0 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
141b0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
141c0 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
141d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
141e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
141f0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
14200 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
14210 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
14220 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
14230 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
14240 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
14250 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
14260 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
14270 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
14280 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
14290 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
142a0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
142b0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
142c0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
142d0 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
142e0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
142f0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14300 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14310 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
14320 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
14330 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14340 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14350 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14360 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14370 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
14380 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
14390 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
143a0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
143b0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
143c0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
143d0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
143e0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
143f0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
14400 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
14410 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
14420 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
14430 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
14440 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
14450 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
14460 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
14470 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
14480 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
14490 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
144a0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
144b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
144c0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
144d0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
144e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
144f0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
14500 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
14510 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
14520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14530 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14540 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
14550 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
14560 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
14570 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
14580 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
14590 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
145a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
145b0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
145c0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
145d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
145e0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
145f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14600 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
14610 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
14620 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
14630 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
14640 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
14650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
14660 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14670 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14680 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14690 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
146a0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
146b0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
146c0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
146d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
146e0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
146f0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
14700 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
14710 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
14720 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
14730 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
14740 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
14750 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
14760 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
14770 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
14780 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
147a0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
147b0 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
147c0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
147e0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
147f0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
14800 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14820 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
14830 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
14840 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
14850 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
14860 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
14870 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
14880 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
14890 20 20 2a 2a 20 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 2d 2d  ----------------
148d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
148e0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
148f0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
14900 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
14910 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
14920 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
14930 2a 20 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 2d 2d 2d 2d 2d  ----------------
14970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
14980 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
14990 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
149a0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
149b0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
149c0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
149d0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
149e0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
149f0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
14a00 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
14a10 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
14a20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
14a30 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
14a40 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
14a50 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14a60 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
14a70 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
14a80 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
14a90 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
14aa0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
14ab0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
14ac0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
14ad0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
14ae0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
14af0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14b00 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
14b10 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
14b20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14b30 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14b40 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
14b50 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
14b60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
14b70 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
14b80 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
14b90 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
14ba0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
14bb0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
14bc0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
14bd0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
14be0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
14bf0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
14c00 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
14c10 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
14c20 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
14c30 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
14c40 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
14c50 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
14c60 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
14c70 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
14c80 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
14c90 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
14ca0 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
14cb0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
14cc0 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
14cd0 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
14ce0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
14cf0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
14d00 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
14d10 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f  pOut);..  /* Loo
14d20 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
14d30 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
14d40 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
14d50 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
14d60 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
14d70 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
14d80 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
14d90 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  cord..  */.  ass
14da0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
14db0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
14dc0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
14dd0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
14de0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
14df0 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
14e00 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
14e10 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
14e20 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
14e30 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
14e40 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 52     }.    if( (pR
14e50 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
14e60 72 6f 29 21 3d 30 20 26 26 20 70 52 65 63 2d 3e  ro)!=0 && pRec->
14e70 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  n>0 ){.      sql
14e80 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
14e90 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
14ea0 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79   }.    serial_ty
14eb0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
14ec0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
14ed0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
14ee0 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
14ef0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
14f00 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
14f10 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
14f20 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
14f30 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
14f40 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
14f50 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
14f60 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
14f70 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
14f80 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
14f90 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
14fa0 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
14fb0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
14fc0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
14fd0 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
14fe0 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
14ff0 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
15000 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
15010 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
15020 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
15030 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
15040 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
15050 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
15060 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
15070 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
15080 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65  len ){.      nZe
15090 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ro = 0;.    }.  
150a0 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
150b0 3c 3d 70 4c 61 73 74 20 29 3b 0a 0a 20 20 2f 2a  <=pLast );..  /*
150c0 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
150d0 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
150e0 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
150f0 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  e */.  testcase(
15100 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
15110 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
15120 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
15130 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
15140 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
15150 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
15160 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
15170 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
15180 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
15190 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
151a0 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
151b0 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
151c0 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
151d0 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
151e0 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
151f0 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
15200 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
15210 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a   = nHdr+nData-nZ
15220 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ero;.  if( nByte
15230 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
15240 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
15250 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
15260 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
15270 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
15280 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
15290 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
152a0 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
152b0 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
152c0 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
152d0 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
152e0 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
152f0 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
15300 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
15310 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
15320 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
15330 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
15340 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
15350 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
15360 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
15370 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
15380 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
15390 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
153a0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
153b0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
153c0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
153d0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
153e0 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
153f0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
15400 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
15410 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
15420 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
15430 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
15440 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
15450 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
15460 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
15470 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
15480 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15490 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
154a0 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
154b0 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
154c0 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
154d0 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69  e);      /* seri
154e0 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a  al type */.    j
154f0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
15500 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
15510 63 6f 72 64 5b 6a 5d 2c 20 28 69 6e 74 29 28 6e  cord[j], (int)(n
15520 42 79 74 65 2d 6a 29 2c 20 70 52 65 63 2c 66 69  Byte-j), pRec,fi
15530 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 77  le_format);.  }w
15540 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d  hile( (++pRec)<=
15550 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72  pLast );.  asser
15560 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20  t( i==nHdr );.  
15570 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65  assert( j==nByte
15580 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
15590 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
155a0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
155b0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
155c0 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
155d0 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
155e0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20  gs = MEM_Blob | 
155f0 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d  MEM_Dyn;.  pOut-
15600 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
15610 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
15620 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
15630 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
15640 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
15650 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
15660 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
15670 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
15680 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
15690 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
156a0 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
156b0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
156c0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
156d0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
156e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
156f0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
15700 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
15710 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
15720 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
15730 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
15740 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
15750 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
15760 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
15770 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
15780 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
15790 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
157a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
157b0 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
157c0 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
157d0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
157e0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
157f0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
15800 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
15810 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
15820 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
15830 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
15840 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
15850 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
15860 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70  r, &nEntry);.  p
15870 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
15880 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
15890 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
158a0 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
158b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
158c0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
158d0 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
158e0 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
158f0 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
15900 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
15910 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
15920 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
15930 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
15940 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
15950 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
15960 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
15970 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
15980 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
15990 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
159a0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
159b0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
159e0 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
159f0 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
15a20 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
15a30 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
15a40 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
15a50 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
15a60 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
15a70 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
15a80 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
15a90 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
15aa0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
15ab0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
15ac0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
15ad0 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
15ae0 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
15af0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
15b00 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
15b10 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
15b20 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
15b30 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
15b40 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
15b50 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
15b60 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15b70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15b80 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
15b90 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
15ba0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
15bb0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15bc0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
15bd0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
15be0 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
15bf0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
15c00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
15c10 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
15c20 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
15c30 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
15c40 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
15c50 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
15c60 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
15c70 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
15c80 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
15c90 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
15ca0 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
15cb0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
15cc0 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
15cd0 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
15ce0 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
15cf0 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
15d00 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
15d10 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
15d20 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15d30 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15d40 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
15d50 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15d60 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15d70 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
15d80 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15d90 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15da0 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
15db0 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
15dc0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
15dd0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
15de0 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
15df0 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
15e00 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
15e10 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
15e20 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
15e30 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
15e40 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
15e50 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
15e60 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
15e70 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
15e80 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
15e90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
15ea0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
15eb0 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
15ec0 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
15ed0 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
15ee0 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
15ef0 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
15f00 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
15f10 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
15f20 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
15f30 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
15f40 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
15f50 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
15f60 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
15f90 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
15fa0 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
15fb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
15fc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15fd0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
15fe0 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
15ff0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
16000 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
16010 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
16020 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
16030 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
16040 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
16050 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
16060 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
16070 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
16080 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
16090 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
160a0 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
160b0 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
160c0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
160d0 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
160e0 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
160f0 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
16100 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
16110 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16120 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
16130 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
16140 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
16150 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16160 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
16170 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
16180 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
16190 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
161a0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
161b0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
161c0 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20    }.    .       
161d0 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
161e0 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
161f0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
16200 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
16210 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
16220 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
16230 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
16240 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
16250 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
16260 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
16270 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
16280 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
16290 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
162a0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
162b0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
162c0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
162d0 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
162e0 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
162f0 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
16300 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
16310 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
16320 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
16330 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
16340 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
16350 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
16360 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
16370 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
16380 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
16390 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
163a0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
163b0 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
163c0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
163d0 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
163e0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
163f0 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
16400 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
16410 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
16420 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
16430 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16440 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
16450 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
16460 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
16470 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16480 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
16490 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
164a0 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
164b0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
164c0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
164d0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
164e0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
164f0 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
16500 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
16510 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
16520 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
16530 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
16540 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16550 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
16560 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
16570 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
16580 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
16590 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a  ts in progress".
165a0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
165b0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
165c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
165d0 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
165e0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
165f0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
16600 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
16610 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
16620 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
16630 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
16640 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
16650 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
16660 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
16670 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
16680 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
16690 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
166a0 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
166b0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
166c0 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
166d0 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
166e0 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
166f0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16700 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
16710 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
16720 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
16730 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16740 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16750 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
16760 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16770 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
16780 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16790 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
167a0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
167b0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
167c0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
167d0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
167e0 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
167f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16800 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
16810 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16820 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16830 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16840 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
16850 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
16860 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
16870 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  {.        iSavep
16880 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
16890 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
168a0 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
168b0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
168c0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
168d0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
168e0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
168f0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
16900 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
16910 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
16920 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c  aDb[ii].pBt, SQL
16930 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20  ITE_ABORT);.    
16940 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16950 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
16960 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
16970 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
16980 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16990 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
169a0 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
169b0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
169c0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
169d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
169e0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
169f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16a00 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
16a10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16a20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16a30 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64  T_ROLLBACK && (d
16a40 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
16a50 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
16a60 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
16a70 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
16a80 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
16a90 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
16aa0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
16ab0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
16ac0 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
16ad0 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
16ae0 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
16af0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
16b00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16b10 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
16b20 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
16b30 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
16b40 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
16b50 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
16b60 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
16b70 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
16b80 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
16b90 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16ba0 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
16bb0 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
16bc0 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
16bd0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
16be0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16bf0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16c00 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
16c10 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
16c20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
16c30 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
16c40 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16c50 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
16c60 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
16c70 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
16c80 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
16c90 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
16ca0 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
16cb0 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
16cc0 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
16cd0 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
16ce0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
16cf0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
16d00 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
16d10 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
16d20 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
16d30 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
16d40 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
16d50 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
16d60 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
16d70 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16d80 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16d90 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
16da0 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
16db0 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
16dc0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
16dd0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16de0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
16df0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
16e00 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
16e10 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
16e20 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
16e30 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16e40 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
16e50 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16e60 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
16e70 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
16e80 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
16e90 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
16ea0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
16eb0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
16ec0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
16ed0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
16ee0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
16ef0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  n ){.        rc 
16f00 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
16f10 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
16f20 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16f30 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16f40 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
16f50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
16f60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16f70 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   }..  break;.}..
16f80 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
16f90 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
16fa0 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
16fb0 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
16fc0 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
16fd0 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
16fe0 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
16ff0 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
17000 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
17010 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
17020 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
17030 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
17040 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
17050 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
17060 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
17070 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
17080 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
17090 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
170a0 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
170b0 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
170c0 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
170d0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
170e0 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
170f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
17100 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
17110 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17120 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
17130 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f  ack;.  int turnO
17140 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  nAC;..  desiredA
17150 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
17160 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
17170 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75   = pOp->p2;.  tu
17180 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64  rnOnAC = desired
17190 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64  AutoCommit && !d
171a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  b->autoCommit;. 
171b0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
171c0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
171d0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
171e0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
171f0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17200 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
17210 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
17220 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
17230 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
17240 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
17250 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
17260 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
17270 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30  Reader );..#if 0
17280 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17290 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  && iRollback && 
172a0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
172b0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
172c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
172d0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
172e0 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
172f0 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
17300 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
17310 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
17320 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
17330 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
17340 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
17350 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17360 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17370 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17380 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17390 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
173a0 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
173b0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
173c0 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
173d0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
173e0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
173f0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17400 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
17410 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
17420 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
17430 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
17440 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
17450 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17460 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
17470 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
17480 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
17490 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
174a0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
174b0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
174c0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
174d0 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
174e0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
174f0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17500 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d   db, "cannot com
17510 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
17520 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
17530 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
17540 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
17550 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17560 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
17570 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
17580 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
17590 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
175a0 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
175b0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
175c0 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
175d0 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
175e0 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
175f0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
17600 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
17610 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
17620 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
17630 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17640 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17650 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
17660 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17670 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17680 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17690 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
176a0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
176b0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
176c0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
176d0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
176e0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
176f0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17700 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
17710 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
17720 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
17730 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17740 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
17750 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
17760 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
17770 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17780 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
17790 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
177a0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
177b0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
177c0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
177d0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
177e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
177f0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17800 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
17810 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
17820 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
17830 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17840 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
17850 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
17860 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
17870 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
17880 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
17890 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
178a0 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
178b0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
178c0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
178d0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
17900 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
17910 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
17920 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
17930 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17940 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
17960 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
17970 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
17980 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
17990 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
179a0 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
179b0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
179c0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
179d0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
179e0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
179f0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
17a00 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
17a10 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
17a20 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
17a30 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
17a40 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
17a50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
17a60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
17a70 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
17a80 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
17a90 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
17aa0 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
17ab0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
17ac0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
17ad0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
17ae0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
17af0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
17b00 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
17b10 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
17b20 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
17b30 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
17b40 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
17b50 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17b60 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
17b70 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
17b80 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
17b90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17ba0 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
17bb0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17bc0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
17bd0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
17be0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
17bf0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
17c00 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
17c10 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
17c20 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
17c30 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
17c40 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
17c50 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
17c60 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
17c70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
17c80 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
17c90 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
17ca0 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
17cb0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
17cc0 20 49 66 20 50 32 20 69 73 20 67 72 65 61 74 65   If P2 is greate
17cd0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
17ce0 74 6f 20 32 20 74 68 65 6e 20 61 6e 20 45 58 43  to 2 then an EXC
17cf0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 0a 2a  LUSIVE lock is.*
17d00 2a 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 20  * also obtained 
17d10 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a  on the file..**.
17d20 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
17d30 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
17d40 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
17d50 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
17d60 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
17d70 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
17d80 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
17d90 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
17da0 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
17db0 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
17dc0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
17dd0 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
17de0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
17df0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
17e00 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
17e10 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
17e20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17e30 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
17e40 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
17e50 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
17e60 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
17e70 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
17e80 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
17e90 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
17ea0 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
17eb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
17ec0 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
17ed0 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
17ee0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
17ef0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
17f00 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
17f10 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
17f20 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
17f30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
17f40 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
17f50 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
17f60 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17f70 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
17f80 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
17f90 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
17fa0 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
17fb0 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
17fc0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20   a read-lock is 
17fd0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
17fe0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
17ff0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
18000 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
18010 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
18020 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
18030 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
18040 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
18050 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
18060 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
18070 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
18080 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
18090 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
180a0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
180b0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
180c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
180d0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
180e0 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
180f0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
18100 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
18110 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18120 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
18130 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
18140 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
18150 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
18160 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18170 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
18180 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
18190 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
181a0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
181b0 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
181c0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
181d0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
181e0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
181f0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
18200 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
18210 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
18220 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
18230 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
18240 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
18250 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
18260 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
18270 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
18280 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
18290 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
182a0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
182b0 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
182c0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
182d0 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
182e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
182f0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
18300 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
18310 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
18320 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
18330 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
18340 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
18350 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
18360 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
18370 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
18380 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
18390 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
183a0 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
183b0 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
183c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
183d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
183e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
183f0 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
18400 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
18410 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
18420 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
18430 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
18440 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
18450 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
18460 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
18470 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
18480 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18490 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
184a0 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
184b0 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
184c0 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
184d0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
184e0 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
184f0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
18500 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18510 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
18520 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
18530 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18540 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
18550 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18560 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
18570 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
18580 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
18590 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
185a0 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
185b0 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
185c0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
185d0 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
185e0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
185f0 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
18600 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
18610 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
18620 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
18630 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
18640 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
18650 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
18660 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
18670 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
18680 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
18690 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
186a0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
186b0 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
186c0 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
186d0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
186e0 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
186f0 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
18700 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
18710 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
18720 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
18730 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
18740 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
18750 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
18760 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
18770 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
18780 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
18790 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
187a0 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
187b0 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ie;..  assert( p
187c0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
187d0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
187e0 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
187f0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
18800 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
18810 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
18820 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
18830 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
18840 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
18850 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
18860 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
18870 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
18880 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
18890 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  !=0 );..  sqlite
188a0 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
188b0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
188c0 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
188d0 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d  &iMeta);.  pOut-
188e0 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
188f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18900 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
18910 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18920 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
18930 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
18940 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
18950 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
18960 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
18970 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
18980 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
18990 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
189a0 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
189b0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
189c0 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
189d0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
189e0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
189f0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
18a00 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
18a10 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18a20 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
18a30 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
18a40 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
18a50 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
18a60 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
18a70 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
18a80 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
18a90 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
18aa0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
18ab0 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
18ac0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
18ad0 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
18ae0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
18af0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
18b00 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
18b10 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
18b20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
18b30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
18b40 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
18b50 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
18b60 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
18b70 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
18b80 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
18b90 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
18ba0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
18bb0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
18bc0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
18bd0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
18be0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
18bf0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
18c00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
18c10 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
18c20 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
18c30 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
18c40 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
18c50 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
18c60 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
18c70 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
18c80 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
18c90 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
18ca0 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
18cb0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
18cc0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
18cd0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
18ce0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
18cf0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
18d00 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
18d10 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
18d20 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
18d30 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
18d40 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
18d50 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
18d60 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
18d70 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
18d80 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
18d90 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
18da0 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
18db0 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
18dc0 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
18dd0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
18de0 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
18df0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
18e00 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
18e10 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
18e20 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
18e30 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
18e40 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
18e50 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
18e60 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
18e70 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
18e80 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
18e90 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
18ea0 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
18eb0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
18ec0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18ed0 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65  de: VerifyCookie
18ee0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
18ef0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
18f00 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
18f10 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
18f20 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
18f30 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
18f40 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
18f50 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
18f60 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a  2 and that the.*
18f70 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
18f80 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61  nter on the loca
18f90 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65  l schema parse e
18fa0 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  quals P3..**.** 
18fb0 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
18fc0 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
18fd0 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
18fe0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
18ff0 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
19000 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
19010 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
19020 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
19030 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
19040 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
19050 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
19060 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
19070 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
19080 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
19090 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
190a0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
190b0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
190c0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
190d0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
190e0 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
190f0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
19100 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
19110 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
19120 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
19130 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
19140 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
19150 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
19160 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
19170 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
19180 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
19190 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
191a0 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
191b0 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
191c0 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a  VerifyCookie: {.
191d0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
191e0 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65  nt iGen;.  Btree
191f0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
19200 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
19210 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
19220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
19230 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
19240 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
19250 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
19260 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
19270 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
19280 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
19290 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
192a0 52 65 61 64 65 72 20 29 3b 0a 20 20 70 42 74 20  Reader );.  pBt 
192b0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
192c0 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42  1].pBt;.  if( pB
192d0 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
192e0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
192f0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
19300 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
19310 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
19320 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19330 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
19340 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19350 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19360 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
19370 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  f( iMeta!=pOp->p
19380 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  2 || iGen!=pOp->
19390 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p3 ){.    sqlite
193a0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
193b0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
193c0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
193d0 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
193e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
193f0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
19400 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19410 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19420 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19430 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19440 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19450 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19460 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19470 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19480 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19490 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
194a0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
194b0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
194c0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
194d0 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
194e0 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
194f0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19500 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19510 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19520 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
19530 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
19540 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19550 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19560 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19570 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19580 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19590 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
195a0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
195b0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
195c0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
195d0 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
195e0 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
195f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19600 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
19610 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
19620 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
19630 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
19640 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
19650 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19660 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19670 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19680 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19690 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
196a0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
196b0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
196c0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
196d0 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
196e0 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
196f0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
19700 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
19710 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
19720 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
19730 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
19740 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78      }..    p->ex
19750 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
19760 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
19770 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
19780 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19790 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
197a0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
197b0 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
197c0 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
197d0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
197e0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
197f0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
19800 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
19810 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
19820 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
19830 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
19840 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
19850 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
19860 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19870 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19880 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
19890 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
198a0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
198b0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
198c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
198d0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
198e0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
198f0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19900 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19910 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
19920 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
19930 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
19940 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
19950 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
19960 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
19970 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19980 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
19990 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
199a0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
199b0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
199c0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
199d0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
199e0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
199f0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19a00 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19a10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
19a20 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
19a30 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
19a40 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
19a50 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
19a60 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
19a70 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
19a80 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
19a90 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
19aa0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
19ab0 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
19ac0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
19ad0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
19ae0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19af0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19b00 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
19b10 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
19b20 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
19b30 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
19b40 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
19b50 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
19b60 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
19b70 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
19b80 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
19b90 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
19ba0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19bb0 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19bc0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19bd0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19be0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19bf0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19c00 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19c10 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19c20 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19c30 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19c40 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19c50 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19c60 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19c70 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19c80 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19c90 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19ca0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19cb0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19cc0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19cd0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19ce0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19cf0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19d00 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19d10 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19d20 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19d30 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
19d40 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
19d50 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
19d60 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
19d70 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
19d80 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
19d90 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
19da0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
19db0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
19dc0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
19dd0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
19de0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
19df0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
19e00 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19e10 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
19e20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
19e30 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
19e40 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
19e50 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
19e60 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
19e70 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
19e80 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
19e90 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
19ea0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
19eb0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
19ec0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
19ed0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
19ee0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
19ef0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
19f00 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
19f10 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
19f20 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
19f30 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
19f40 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
19f50 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
19f60 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
19f70 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
19f80 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
19f90 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
19fa0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
19fb0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
19fc0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
19fd0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
19fe0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
19ff0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1a000 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1a010 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1a020 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1a030 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1a040 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1a050 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1a060 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1a070 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1a080 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1a090 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1a0a0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1a0b0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a0c0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1a0d0 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1a0e0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
1a0f0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1a100 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1a110 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1a120 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1a130 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1a140 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1a150 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1a160 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  ;..  assert( (pO
1a170 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32  p->p5&(OPFLAG_P2
1a180 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c  ISREG|OPFLAG_BUL
1a190 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20  KCSR))==pOp->p5 
1a1a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a1b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a1c0 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1a1d0 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  5==0 );.  assert
1a1e0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a200 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a210 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  Read || p->readO
1a220 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1a230 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1a240 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1a250 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
1a260 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1a270 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1a280 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1a290 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1a2a0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1a2b0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a2c0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a2d0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
1a2e0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
1a2f0 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
1a300 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1a310 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1a320 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1a330 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1a340 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a350 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
1a360 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
1a370 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1a380 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1a390 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1a3a0 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1a3b0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1a3c0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1a3d0 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1a3e0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1a3f0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1a400 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1a410 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1a420 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1a430 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1a440 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1a450 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1a460 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1a470 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1a480 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
1a490 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1a4a0 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1a4b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1a4c0 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1a4d0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1a4e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1a4f0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1a500 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1a510 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1a520 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1a530 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1a540 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1a550 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1a560 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1a570 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1a580 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1a590 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1a5a0 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1a5b0 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1a5c0 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1a5d0 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1a5e0 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1a5f0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1a600 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1a610 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1a620 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1a630 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
1a640 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
1a650 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1a660 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1a670 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a680 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a690 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1a6a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a6b0 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1a6c0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1a6d0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1a6e0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1a6f0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1a700 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1a710 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1a720 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1a730 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
1a740 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c  pKeyInfo->nXFiel
1a750 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1a760 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1a770 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1a780 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1a790 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1a7a0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1a7b0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1a7c0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1a7d0 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1a7e0 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1a7f0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1a800 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1a810 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1a820 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1a830 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1a840 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  Db, 1);.  if( pC
1a850 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
1a860 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
1a870 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72  lRow = 1;.  pCur
1a880 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b  ->isOrdered = 1;
1a890 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1a8a0 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1a8b0 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1a8c0 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
1a8d0 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1a8e0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1a8f0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1a900 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1a910 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1a920 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1a930 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43  orHints(pCur->pC
1a940 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20  ursor, (pOp->p5 
1a950 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1a960 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20  ));..  /* Since 
1a970 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d  it performs no m
1a980 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1a990 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79   or IO, the only
1a9a0 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a   value that.  **
1a9b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1a9c0 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e  sor() may return
1a9d0 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a   is SQLITE_OK. *
1a9e0 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  /.  assert( rc==
1a9f0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
1aa00 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43  /* Set the VdbeC
1aa10 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61  ursor.isTable va
1aa20 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73  riable. Previous
1aa30 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
1aa40 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
1aa50 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
1aa60 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
1aa70 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
1aa80 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
1aa90 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
1aaa0 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
1aab0 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
1aac0 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
1aad0 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
1aae0 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
1aaf0 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
1ab00 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
1ab10 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
1ab20 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a  YINFO;.  break;.
1ab30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1ab40 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
1ab50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e  2 * P4 P5.** Syn
1ab60 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1ab70 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  2.**.** Open a n
1ab80 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
1ab90 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1aba0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1abb0 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
1abc0 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
1abd0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
1abe0 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
1abf0 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70  ad-only.  The ep
1ac00 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65  hemeral.** table
1ac10 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
1ac20 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
1ac30 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
1ac40 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
1ac50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1ac60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70  olumns in the ep
1ac70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a  hemeral table..*
1ac80 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
1ac90 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
1aca0 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
1acb0 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
1acc0 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
1acd0 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
1ace0 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
1acf0 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
1ad00 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
1ad10 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
1ad20 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
1ad30 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
1ad40 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
1ad50 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b  er can be a mask
1ad60 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20   of the BTREE_* 
1ad70 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a  flags defined.**
1ad80 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68   in btree.h.  Th
1ad90 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f  ese flags contro
1ada0 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
1adb0 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a   operation of.**
1adc0 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65   the btree.  The
1add0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1ade0 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49  NAL and BTREE_SI
1adf0 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a  NGLE flags are.*
1ae00 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69  * added automati
1ae10 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  cally..*/./* Opc
1ae20 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
1ae30 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
1ae40 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1ae50 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68  lumn=P2.**.** Th
1ae60 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1ae70 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f  the same as OP_O
1ae80 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49  penEphemeral.  I
1ae90 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65  t has a.** diffe
1aea0 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73  rent name to dis
1aeb0 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65  tinguish its use
1aec0 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65  .  Tables create
1aed0 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68  d using.** by th
1aee0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  is opcode will b
1aef0 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d  e used for autom
1af00 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1af10 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e   transient.** in
1af20 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a  dices in joins..
1af30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41  */.case OP_OpenA
1af40 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20  utoindex: .case 
1af50 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1af60 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1af70 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f   *pCx;.  KeyInfo
1af80 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73   *pKeyInfo;..  s
1af90 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
1afa0 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
1afb0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
1afc0 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
1afd0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
1afe0 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1aff0 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
1b000 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1b010 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
1b020 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
1b030 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
1b040 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _DB;.  assert( p
1b050 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1b060 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1b070 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1b080 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1b090 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1b0a0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1b0b0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1b0c0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1b0d0 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
1b0e0 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1b0f0 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1b100 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b120 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1b130 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1b140 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1b150 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1b160 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1b170 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1b180 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1b190 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1b1a0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1b1b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b1c0 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1b1d0 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1b1e0 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1b1f0 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1b200 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1b210 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1b220 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1b230 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1b240 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1b250 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1b260 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1b270 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1b280 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1b290 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1b2a0 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1b2b0 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1b2c0 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1b2d0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b    */.    if( (pK
1b2e0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1b2f0 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1b300 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1b310 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1b320 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b330 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1b340 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b350 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1b360 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1b370 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1b380 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1b390 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b3a0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1b3b0 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1b3c0 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1b3d0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1b3e0 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1b3f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1b400 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1b410 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
1b420 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1b430 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20   pKeyInfo;.     
1b440 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b450 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1b460 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b  pBt, pgno, 1, pK
1b470 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75  eyInfo, pCx->pCu
1b480 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
1b490 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1b4a0 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1b4b0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1b4c0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1b4d0 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1b4e0 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1b4f0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1b500 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1b510 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1b520 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1b530 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1b540 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62  _UNORDERED);.  b
1b550 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1b560 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
1b570 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1b580 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1b590 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1b5a0 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1b5b0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1b5c0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1b5d0 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1b5e0 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1b5f0 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1b600 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1b610 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1b620 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1b630 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1b640 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1b650 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1b660 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b670 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b680 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1b690 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1b6a0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1b6b0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1b6c0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1b6d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1b6e0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b6f0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b700 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1b710 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1b720 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1b730 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1b740 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1b750 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1b760 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1b770 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1b780 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b790 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1b7a0 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
1b7b0 3a 20 63 6f 6e 74 65 6e 74 20 69 6e 20 72 5b 50  : content in r[P
1b7c0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  2@P3].**.** Open
1b7d0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1b7e0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1b7f0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1b800 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1b810 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1b820 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1b830 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e   that one row in
1b840 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1b850 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1b860 65 72 20 50 32 20 77 68 65 6e 20 50 35 3d 3d 30  er P2 when P5==0
1b870 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1b880 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
1b890 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
1b8a0 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
1b8b0 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
1b8c0 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
1b8d0 20 50 32 2e 20 20 57 68 65 6e 20 50 35 3d 3d 31   P2.  When P5==1
1b8e0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 72 6f  , then the.** ro
1b8f0 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
1b900 20 62 79 20 50 33 20 63 6f 6e 73 65 63 75 74 69   by P3 consecuti
1b910 76 65 20 72 65 67 69 73 74 65 72 73 20 62 65 67  ve registers beg
1b920 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 32 2e 0a  inning with P2..
1b930 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1b940 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1b950 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1b960 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1b970 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1b980 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1b990 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1b9a0 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1b9b0 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1b9c0 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1b9d0 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1b9e0 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1b9f0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1ba00 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1ba10 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1ba20 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1ba30 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1ba40 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1ba50 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1ba60 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1ba70 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1ba80 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1ba90 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1baa0 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1bab0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1bac0 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1bad0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1bae0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1baf0 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1bb00 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1bb10 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1bb20 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1bb30 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1bb40 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1bb50 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1bb60 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1bb70 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1bb80 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1bb90 0a 20 20 70 43 78 2d 3e 6d 75 6c 74 69 50 73 65  .  pCx->multiPse
1bba0 75 64 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  udo = pOp->p5;. 
1bbb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bbc0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1bbd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1bbe0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1bbf0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1bc00 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1bc10 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1bc20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1bc30 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1bc40 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1bc50 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1bc60 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1bc70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1bc80 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1bc90 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1bca0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1bcb0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1bcc0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1bcd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1bce0 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
1bcf0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1bd00 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1bd10 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1bd20 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1bd30 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1bd40 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1bd50 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1bd60 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1bd70 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1bd80 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1bd90 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1bda0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1bdb0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1bdc0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1bdd0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1bde0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1bdf0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1be00 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1be10 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1be20 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1be30 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1be40 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1be50 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1be60 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1be70 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1be80 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1be90 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1bea0 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1beb0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1bec0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1bed0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1bee0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1bef0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1bf00 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1bf10 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1bf20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1bf30 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1bf40 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kGt P1 P2 P3 P4 
1bf50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1bf60 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1bf70 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1bf80 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1bf90 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1bfa0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1bfb0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1bfc0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1bfd0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1bfe0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1bff0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1c000 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1c010 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1c020 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1c030 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1c040 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1c050 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1c060 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1c070 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1c080 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1c090 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1c0a0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1c0b0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1c0c0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1c0d0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1c0e0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1c0f0 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1c100 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1c110 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1c120 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1c130 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c140 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1c150 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1c160 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1c170 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1c180 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1c190 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1c1a0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1c1b0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c1c0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1c1d0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1c1e0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1c1f0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1c200 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1c210 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1c220 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c230 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1c240 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1c250 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1c260 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1c270 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1c280 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1c290 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c2a0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1c2b0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1c2c0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1c2d0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1c2e0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1c2f0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1c300 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1c310 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1c320 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1c330 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1c340 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1c350 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c360 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1c370 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c380 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1c390 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1c3a0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1c3b0 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20  e: SeekLe P1 P2 
1c3c0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1c3d0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1c3e0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1c3f0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1c400 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1c410 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1c420 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1c430 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1c440 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1c450 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1c460 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1c470 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1c480 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1c490 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1c4a0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1c4b0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1c4c0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1c4d0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1c4e0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1c4f0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1c500 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1c510 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1c520 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1c530 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1c540 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1c550 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1c560 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1c570 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1c580 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1c590 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1c5a0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1c5b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1c5c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1c5d0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1c5e0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1c5f0 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
1c600 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLt:         /*
1c610 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1c620 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20  se OP_SeekLe:   
1c630 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1c640 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1c650 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGe:         /*
1c660 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1c670 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20  se OP_SeekGt: { 
1c680 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1c690 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
1c6a0 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62  .  int oc;.  Vdb
1c6b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55  eCursor *pC;.  U
1c6c0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1c6d0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1c6e0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1c6f0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1c700 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1c710 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1c720 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1c730 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1c740 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c750 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1c760 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c770 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1c780 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c790 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1c7a0 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
1c7b0 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20  t( OP_SeekLe == 
1c7c0 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20  OP_SeekLt+1 );. 
1c7d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1c7e0 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Ge == OP_SeekLt+
1c7f0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1c800 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53  P_SeekGt == OP_S
1c810 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73  eekLt+3 );.  ass
1c820 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
1c830 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
1c840 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1c850 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1c860 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  code;.  pC->null
1c870 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  Row = 0;.  if( p
1c880 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1c890 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1c8a0 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1c8b0 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1c8c0 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1c8d0 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1c8e0 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1c8f0 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1c900 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1c910 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1c920 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1c930 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1c940 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1c950 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
1c960 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1c970 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 69  ity(pIn3);.    i
1c980 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1c990 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1c9a0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1c9b0 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
1c9c0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1c9d0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1c9e0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1c9f0 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1ca00 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1ca10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1ca20 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1ca30 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1ca40 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1ca50 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1ca60 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1ca70 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1ca80 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1ca90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1caa0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1cab0 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1cac0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1cad0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1cae0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1caf0 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1cb00 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1cb10 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1cb20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1cb30 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   - 1;.        br
1cb40 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
1cb50 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1cb60 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1cb70 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
1cb80 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1cb90 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1cba0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1cbb0 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20   >= for > and < 
1cbc0 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20  for <=. e.g. if 
1cbd0 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a  the search term.
1cbe0 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20        ** is 4.9 
1cbf0 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
1cc00 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a  approximation 5:
1cc10 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
1cc20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20  **        (x >  
1cc30 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1cc40 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a  x >= 5).      **
1cc50 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e          (x <= 4.
1cc60 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1cc70 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20  <  5).      */. 
1cc80 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1cc90 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  <(double)iKey ){
1cca0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ccb0 20 4f 50 5f 53 65 65 6b 47 65 3d 3d 28 4f 50 5f   OP_SeekGe==(OP_
1ccc0 53 65 65 6b 47 74 2d 31 29 20 29 3b 0a 20 20 20  SeekGt-1) );.   
1ccd0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1cce0 53 65 65 6b 4c 74 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLt==(OP_Seek
1ccf0 4c 65 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  Le-1) );.       
1cd00 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1cd10 6b 4c 65 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLe & 0x0001)==(
1cd20 4f 50 5f 53 65 65 6b 47 74 20 26 20 30 78 30 30  OP_SeekGt & 0x00
1cd30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1cd40 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1cd50 3d 3d 28 4f 50 5f 53 65 65 6b 47 74 20 26 20 30  ==(OP_SeekGt & 0
1cd60 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20  x0001) ) oc--;. 
1cd70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1cd80 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1cd90 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d  ation iKey is sm
1cda0 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61  aller than the a
1cdb0 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1cdc0 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1cdd0 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66   substitute <= f
1cde0 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e  or < and > for >
1cdf0 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73  =.  */.      els
1ce00 65 20 69 66 28 20 70 49 6e 33 2d 3e 72 3e 28 64  e if( pIn3->r>(d
1ce10 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1ce20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1ce30 5f 53 65 65 6b 4c 65 3d 3d 28 4f 50 5f 53 65 65  _SeekLe==(OP_See
1ce40 6b 4c 74 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLt+1) );.      
1ce50 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1ce60 6b 47 74 3d 3d 28 4f 50 5f 53 65 65 6b 47 65 2b  kGt==(OP_SeekGe+
1ce70 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1ce80 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 74  sert( (OP_SeekLt
1ce90 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1cea0 53 65 65 6b 47 65 20 26 20 30 78 30 30 30 31 29  SeekGe & 0x0001)
1ceb0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1cec0 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1ced0 4f 50 5f 53 65 65 6b 4c 74 20 26 20 30 78 30 30  OP_SeekLt & 0x00
1cee0 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
1cef0 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1cf00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cf10 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1cf20 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1cf30 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1cf40 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1cf50 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1cf60 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1cf70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1cf80 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30  }.    if( res==0
1cf90 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f   ){.      pC->ro
1cfa0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a  widIsValid = 1;.
1cfb0 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
1cfc0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
1cfd0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  }.  }else{.    n
1cfe0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1cff0 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
1d000 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1d010 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65  NT32 );.    asse
1d020 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1d030 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1d040 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1d050 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1d060 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
1d070 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1d080 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1d090 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1d0a0 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a  ly faster:.    *
1d0b0 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1d0c0 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
1d0d0 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 2a 2a  SeekLe ){.    **
1d0e0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1d0f0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b  NPACKED_INCRKEY;
1d100 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1d110 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c  .    **     r.fl
1d120 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 2a 2a 20  ags = 0;.    ** 
1d130 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
1d140 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28 55 4e  .flags = (u8)(UN
1d150 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a  PACKED_INCRKEY *
1d160 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53   (1 & (oc - OP_S
1d170 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 61 73  eekLt)));.    as
1d180 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d190 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kGt || r.flags==
1d1a0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1d1b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1d1c0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc!=OP_SeekLe ||
1d1d0 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b   r.flags==UNPACK
1d1e0 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20  ED_INCRKEY );.  
1d1f0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d200 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61  _SeekGe || r.fla
1d210 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  gs==0 );.    ass
1d220 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d230 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Lt || r.flags==0
1d240 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
1d250 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1d260 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d270 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
1d280 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1d290 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1d2a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1d2b0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1d2c0 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
1d2d0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1d2e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d2f0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d300 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1d310 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1d320 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1d330 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d340 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d350 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1d360 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d370 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  alid = 0;.  }.  
1d380 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d390 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1d3a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1d3b0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1d3c0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1d3d0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1d3e0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
1d3f0 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1d400 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1d410 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1d420 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1d430 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1d440 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1d450 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20  P_SeekGt) ){.   
1d460 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d470 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1d480 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d490 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1d4a0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1d4b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d4c0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1d4d0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d4e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73  }else{.      res
1d4f0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 0;.    }.  }e
1d500 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1d510 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1d520 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1d530 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30  );.    if( res>0
1d540 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1d550 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b  c==OP_SeekLt) ){
1d560 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1d570 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
1d580 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d590 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1d5a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d5b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d5c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1d5d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d5e0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d5f0 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1d600 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1d610 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1d620 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1d630 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
1d640 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
1d650 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
1d660 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1d670 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1d680 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1d690 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1d6a0 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 69 66 28 20  ->p2>0 );.  if( 
1d6b0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
1d6c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1d6d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d6e0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
1d6f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1d700 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b  psis:  intkey=r[
1d710 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P2].**.** P1 is 
1d720 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75  an open table cu
1d730 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61  rsor and P2 is a
1d740 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20   rowid integer. 
1d750 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20   Arrange.** for 
1d760 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68  P1 to move so th
1d770 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1d780 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20  the rowid given 
1d790 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  by P2..**.** Thi
1d7a0 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1d7b0 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
1d7c0 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
1d7d0 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
1d7e0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
1d7f0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
1d800 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
1d810 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
1d820 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
1d830 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
1d840 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ns..*/.case OP_S
1d850 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32  eek: {    /* in2
1d860 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d870 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1d880 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d890 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d8a0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1d8b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1d8c0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d8e0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1d8f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1d900 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  ble );.  pC->nul
1d910 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32  lRow = 0;.  pIn2
1d920 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1d930 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ];.  pC->movetoT
1d940 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1d950 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1d960 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  );.  pC->rowidIs
1d970 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1d980 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1d990 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 1;.  break;.}.
1d9a0 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1d9b0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1d9c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d9d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1d9e0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1d9f0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1da00 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1da10 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1da20 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1da30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1da40 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1da50 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1da60 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1da70 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1da80 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1da90 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1daa0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1dab0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1dac0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1dad0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1dae0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1daf0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1db00 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1db10 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1db20 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1db30 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1db40 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1db50 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
1db60 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
1db70 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
1db80 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1db90 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1dba0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1dbb0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1dbc0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1dbd0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1dbe0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1dbf0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1dc00 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1dc10 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1dc20 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1dc30 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1dc40 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1dc50 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1dc60 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1dc70 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1dc80 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1dc90 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1dca0 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
1dcb0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1dcc0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1dcd0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1dce0 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
1dcf0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
1dd00 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
1dd10 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
1dd20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
1dd30 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
1dd40 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1dd50 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1dd60 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
1dd70 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1dd80 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
1dd90 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  try..**.** See a
1dda0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1ddb0 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
1ddc0 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
1ddd0 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
1dde0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1ddf0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1de00 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1de10 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1de20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1de30 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1de40 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1de50 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1de60 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1de70 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1de80 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1de90 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1dea0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1deb0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1dec0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1ded0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1dee0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1def0 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
1df00 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
1df10 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1df20 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
1df30 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
1df40 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
1df50 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
1df60 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
1df70 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
1df80 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
1df90 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
1dfa0 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
1dfb0 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
1dfc0 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
1dfd0 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
1dfe0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
1dff0 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
1e000 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
1e010 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
1e020 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1e030 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
1e040 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
1e050 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
1e060 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
1e070 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
1e080 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
1e090 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
1e0a0 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
1e0b0 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
1e0c0 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
1e0d0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  NULL..**.** See 
1e0e0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
1e0f0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1e100 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
1e110 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
1e120 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e130 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1e140 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e150 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1e160 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1e170 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1e180 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1e190 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
1e1a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1e1b0 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a  nt res;.  char *
1e1c0 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65  pFree;.  Unpacke
1e1d0 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1e1e0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1e1f0 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65  rd r;.  char aTe
1e200 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1e210 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1e220 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1e230 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64  m)*4 + 7];..#ifd
1e240 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1e250 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1e260 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  !=OP_NoConflict 
1e270 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  ) sqlite3_found_
1e280 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1e290 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1e2a0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1e2b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e2c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e2d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e2e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1e2f0 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1e300 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1e310 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1e320 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1e330 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1e340 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1e350 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1e360 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1e370 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1e380 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
1e390 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1e3a0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1e3b0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
1e3c0 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
1e3d0 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
1e3e0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1e3f0 20 20 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 69     {.      int i
1e400 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
1e410 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1e420 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1e430 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1e440 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  .aMem[i]) );.   
1e450 20 20 20 20 20 69 66 28 20 69 20 29 20 52 45 47       if( i ) REG
1e460 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1e470 3e 70 33 2b 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  >p3+i, &r.aMem[i
1e480 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
1e490 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 66  }.#endif.    r.f
1e4a0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1e4b0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1e4c0 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1e4d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
1e4e0 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
1e4f0 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
1e500 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
1e510 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1e520 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1e530 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1e540 20 20 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20      ); .    if( 
1e550 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
1e560 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
1e570 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1e580 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1e590 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1e5a0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1e5b0 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1e5c0 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1e5d0 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1e5e0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1e5f0 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1e600 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1e610 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
1e620 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e  );.    pIdxKey->
1e630 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45  flags |= UNPACKE
1e640 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1e650 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1e660 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
1e670 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
1e680 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
1e690 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
1e6a0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
1e6b0 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
1e6c0 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
1e6d0 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
1e6e0 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
1e6f0 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
1e700 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
1e710 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
1e720 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1e730 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b       if( r.aMem[
1e740 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1e750 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
1e760 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e770 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1e780 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1e790 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1e7a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e7b0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1e7c0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
1e7d0 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f   &res);.  if( pO
1e7e0 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1e7f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1e800 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a  db, pFree);.  }.
1e810 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e820 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  _OK ){.    break
1e830 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
1e840 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
1e850 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1e860 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
1e870 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
1e880 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
1e890 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e8a0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1e8b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e8c0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
1e8d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1e8e0 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1e8f0 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1e900 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1e910 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1e920 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1e930 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e940 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1e950 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1e960 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1e970 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1e980 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
1e990 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1e9a0 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
1e9b0 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
1e9c0 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
1e9d0 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
1e9e0 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
1e9f0 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
1ea00 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
1ea10 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
1ea20 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
1ea30 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1ea40 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1ea50 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
1ea60 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68  a record.** with
1ea70 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c   rowid P3 then l
1ea80 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
1ea90 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
1eaa0 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
1eab0 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74  .** through to t
1eac0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1ead0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
1eae0 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
1eaf0 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
1eb00 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
1eb10 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
1eb20 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
1eb30 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
1eb40 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  s)..**.** See al
1eb50 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1eb60 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
1eb70 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1eb80 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1eb90 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1eba0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ebb0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1ebc0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1ebd0 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
1ebe0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1ebf0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1ec00 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1ec10 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1ec20 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1ec30 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1ec40 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1ec50 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1ec60 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1ec70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1ec80 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
1ec90 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1eca0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1ecb0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1ecc0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
1ecd0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
1ece0 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
1ecf0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
1ed00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ed10 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1ed20 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1ed30 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73  &res);.  pC->las
1ed40 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1ed50 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  .i;.  pC->rowidI
1ed60 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1ed70 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ?1:0;.  pC->null
1ed80 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
1ed90 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1eda0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
1edb0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1edc0 20 30 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30   0;.  if( res!=0
1edd0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1ede0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1edf0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1ee00 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d  sValid==0 );.  }
1ee10 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
1ee20 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b  t = res;.  break
1ee30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ee40 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1ee50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1ee60 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
1ee70 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
1ee80 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
1ee90 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
1eea0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
1eeb0 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
1eec0 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
1eed0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
1eee0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1eef0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
1ef00 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
1ef10 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
1ef20 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
1ef30 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
1ef40 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1ef50 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1ef60 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1ef70 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1ef80 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1ef90 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1efa0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
1efb0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1efc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1efd0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
1efe0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1eff0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
1f000 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1f010 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
1f020 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
1f030 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
1f040 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
1f050 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
1f060 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
1f070 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
1f080 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1f090 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
1f0a0 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
1f0b0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f0c0 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
1f0d0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
1f0e0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
1f0f0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
1f100 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
1f110 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1f120 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
1f130 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
1f140 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
1f150 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
1f160 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
1f170 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
1f180 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
1f190 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
1f1a0 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1f1b0 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
1f1c0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
1f1d0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1f1e0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1f1f0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1f200 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
1f210 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
1f220 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
1f230 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
1f240 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
1f250 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
1f260 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
1f270 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
1f280 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
1f290 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
1f2a0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
1f2b0 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
1f2c0 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
1f2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1f2e0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1f2f0 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
1f300 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1f310 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
1f320 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1f330 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
1f340 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
1f350 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1f360 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1f370 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1f380 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
1f390 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1f3a0 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
1f3b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1f3c0 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
1f3d0 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
1f3e0 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
1f3f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
1f400 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f410 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
1f420 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
1f430 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
1f440 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
1f450 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
1f460 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
1f470 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
1f480 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f490 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f4a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f4b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f4c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1f4d0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
1f4e0 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
1f4f0 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
1f500 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
1f510 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
1f520 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
1f530 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
1f540 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
1f550 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
1f560 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
1f570 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
1f580 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
1f590 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
1f5a0 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
1f5b0 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1f5c0 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
1f5d0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1f5e0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1f5f0 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
1f600 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
1f610 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
1f620 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1f630 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
1f640 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
1f650 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
1f660 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
1f670 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
1f680 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
1f690 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
1f6a0 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
1f6b0 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
1f6c0 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
1f6d0 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
1f6e0 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
1f6f0 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
1f700 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
1f710 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1f720 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
1f730 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
1f740 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
1f750 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
1f760 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
1f770 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
1f780 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
1f790 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
1f7a0 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
1f7b0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1f7c0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
1f7d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
1f7e0 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
1f7f0 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
1f800 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
1f810 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
1f820 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
1f830 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
1f840 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
1f850 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
1f860 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
1f870 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
1f880 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
1f890 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
1f8a0 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
1f8b0 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
1f8c0 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
1f8d0 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
1f8e0 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
1f8f0 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
1f900 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
1f910 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
1f920 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
1f930 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
1f940 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
1f950 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1f960 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1f970 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43  sqlite3BtreeGetC
1f980 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f990 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69  Cursor);.      i
1f9a0 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( v==0 ){.     
1f9b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f9c0 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1f9d0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1f9e0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1f9f0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1fa00 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1fa10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1fa20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1fa30 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1fa40 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
1fa50 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
1fa60 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65  74 */.        }e
1fa70 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1fa80 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1fa90 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1faa0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1fab0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1fac0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1fad0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1fae0 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1faf0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1fb00 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1fb10 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1fb20 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1fb30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1fb40 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
1fb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1fb60 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1fb70 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1fb80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1fb90 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
1fba0 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
1fbb0 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  /.          }.  
1fbc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1fbd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fbe0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1fbf0 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1fc00 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1fc10 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1fc20 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1fc30 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1fc40 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1fc50 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
1fc60 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
1fc70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
1fc80 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
1fc90 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
1fca0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
1fcb0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
1fcc0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1fcd0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1fce0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1fcf0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1fd00 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1fd10 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
1fd20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1fd30 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
1fd40 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1fd50 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1fd60 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1fd70 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1fd80 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1fd90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fda0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
1fdb0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
1fdc0 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
1fdd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1fde0 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41  ;.          memA
1fdf0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
1fe00 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d  pMem);.        }
1fe10 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fe20 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
1fe30 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45  ) );..        RE
1fe40 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1fe50 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
1fe60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1fe70 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
1fe80 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  em);.        ass
1fe90 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
1fea0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1feb0 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
1fec0 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
1fed0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  */.        if( p
1fee0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
1fef0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
1ff00 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1ff10 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1ff20 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
1ff30 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
1ff40 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f   */.          go
1ff50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ff60 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
1ff70 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70  .        if( v<p
1ff80 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
1ff90 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
1ffa0 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
1ffb0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65     }.        pMe
1ffc0 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
1ffd0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
1ffe0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1fff0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
20000 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f  >pCursor, v<MAX_
20010 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29  ROWID ? v+1 : 0)
20020 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
20030 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20040 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
20050 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
20060 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
20070 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
20080 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
20090 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
200a0 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
200b0 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
200c0 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
200d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
200e0 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
200f0 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
20100 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
20110 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
20120 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
20130 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
20140 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
20150 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
20160 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20170 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
20180 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
20190 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
201a0 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
201b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201c0 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
201d0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
201e0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f  e. */.      /* o
201f0 6e 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65  n the first atte
20200 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f  mpt, simply do o
20210 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65  ne more than pre
20220 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76  vious */.      v
20230 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
20240 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
20250 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
20260 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
20270 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
20280 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
20290 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
202a0 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
202b0 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20  while(   ((rc = 
202c0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
202d0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
202e0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
202f0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
20330 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
20340 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
20350 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
20360 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20   (++cnt<100)){. 
20370 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73         /* collis
20380 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65  ion - try anothe
20390 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a  r random rowid *
203a0 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
203b0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
203c0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
203d0 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
203e0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  {.          /* t
203f0 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f  ry "small" rando
20400 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65  m rowids for the
20410 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74   initial attempt
20420 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76  s */.          v
20430 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20   &= 0xffffff;.  
20440 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20450 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
20460 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
20470 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
20480 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
20490 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76       }.        v
204a0 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
204b0 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
204c0 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
204d0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
204e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
204f0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
20500 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
20510 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
20520 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20530 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20540 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
20550 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
20560 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
20570 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
20580 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
20590 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
205a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
205b0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
205c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
205d0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
205e0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
205f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
20600 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
20610 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
20620 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
20630 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
20640 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
20650 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
20660 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
20670 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
20680 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
20690 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
206a0 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
206b0 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
206c0 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
206d0 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
206e0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
206f0 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
20700 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
20710 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
20720 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
20730 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
20740 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
20750 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
20760 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
20770 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
20780 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
20790 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
207a0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
207b0 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
207c0 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
207d0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
207e0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
207f0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
20800 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
20810 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
20820 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
20830 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
20840 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
20850 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
20860 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
20870 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
20880 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
20890 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
208a0 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
208b0 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
208c0 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
208d0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
208e0 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
208f0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
20900 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
20910 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
20920 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
20930 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
20940 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
20950 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
20960 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
20970 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
20980 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
20990 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
209a0 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
209b0 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
209c0 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
209d0 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
209e0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
209f0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
20a00 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
20a10 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
20a20 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
20a30 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
20a40 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
20a50 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
20a60 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
20a70 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
20a80 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
20a90 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
20aa0 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
20ab0 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
20ac0 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
20ad0 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
20ae0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
20af0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
20b00 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
20b10 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
20b20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
20b30 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
20b40 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
20b50 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
20b60 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
20b70 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
20b80 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
20b90 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
20ba0 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
20bb0 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
20bc0 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
20bd0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
20be0 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
20bf0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
20c00 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
20c10 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
20c20 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
20c30 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
20c40 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
20c50 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
20c60 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
20c70 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
20c80 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
20c90 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
20ca0 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
20cb0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
20cc0 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
20cd0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
20ce0 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
20cf0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
20d00 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
20d10 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
20d20 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
20d30 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
20d40 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
20d50 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
20d60 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
20d70 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
20d80 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
20d90 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
20da0 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
20db0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
20dc0 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
20dd0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
20de0 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
20df0 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
20e00 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
20e10 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
20e20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
20e30 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
20e40 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
20e50 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
20e60 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
20e70 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
20e80 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
20e90 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
20ea0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
20eb0 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
20ec0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
20ed0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
20ee0 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
20ef0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
20f00 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
20f10 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
20f20 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
20f30 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
20f40 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
20f50 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
20f60 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
20f70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
20f80 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
20f90 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
20fa0 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
20fb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
20fc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20fd0 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
20fe0 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
20ff0 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
21000 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
21010 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
21020 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
21030 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
21040 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
21050 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
21060 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
21070 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
21080 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
21090 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
210a0 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
210b0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
210c0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
210d0 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
210e0 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
210f0 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
21100 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
21110 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
21120 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
21130 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21140 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21150 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
21160 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
21170 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21180 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21190 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
211a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
211b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
211c0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
211d0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
211e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
211f0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
21200 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21210 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
21220 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21230 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
21240 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
21250 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
21260 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
21270 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
21280 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21290 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
212a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
212b0 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
212c0 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
212d0 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
212e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
212f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21300 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
21310 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
21320 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
21330 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
21340 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
21350 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21360 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
21370 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
21380 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
21390 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
213a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
213b0 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
213c0 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
213d0 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
213e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
213f0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
21400 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
21410 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
21420 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
21430 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
21440 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
21450 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
21460 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21470 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
21480 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
21490 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
214a0 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
214b0 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
214c0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
214d0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
214e0 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
214f0 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
21500 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
21510 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
21540 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21560 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
21570 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d  OPFLAG_APPEND)!=
21580 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  0, seekResult.  
21590 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  );.  pC->rowidIs
215a0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
215b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
215c0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
215d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
215e0 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
215f0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
21600 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
21610 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
21620 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
21630 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
21640 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
21650 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
21660 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
21670 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e      zTbl = pOp->
21680 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28  p4.z;.    op = (
21690 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
216a0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
216b0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
216c0 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
216d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
216e0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
216f0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
21700 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
21710 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
21720 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
21730 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
21740 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21750 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
21760 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
21770 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
21780 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
21790 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
217a0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
217b0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
217c0 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
217d0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
217e0 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
217f0 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
21800 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
21810 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
21820 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21830 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
21840 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
21850 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
21860 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
21870 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
21880 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
21890 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
218a0 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
218b0 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
218c0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
218d0 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
218e0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
218f0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
21900 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
21910 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
21920 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
21930 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
21940 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
21950 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
21960 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
21970 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
21980 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
21990 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
219a0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
219b0 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
219c0 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
219d0 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
219e0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
219f0 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
21a00 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
21a10 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
21a20 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
21a30 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
21a40 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
21a50 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
21a60 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
21a70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
21a80 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65  ete: {.  i64 iKe
21a90 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  y;.  VdbeCursor 
21aa0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
21ab0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21ac0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21ad0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21ae0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21af0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21b00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
21b10 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
21b20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
21b30 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
21b40 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
21b50 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
21b60 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20  tRowid;      /* 
21b70 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68  Only used for th
21b80 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
21b90 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
21ba0 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
21bb0 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
21bc0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
21bd0 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
21be0 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
21bf0 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
21c00 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
21c10 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
21c20 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
21c30 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
21c40 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
21c50 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
21c60 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
21c70 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
21c80 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
21c90 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
21ca0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
21cb0 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
21cc0 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
21cd0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
21ce0 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
21cf0 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
21d00 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
21d10 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
21d20 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
21d30 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
21d40 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
21d50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
21d60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
21d70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
21d80 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
21d90 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
21da0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
21db0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21dc0 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
21dd0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
21de0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
21df0 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
21e00 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
21e10 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
21e20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21e30 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
21e40 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
21e50 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
21e60 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
21e70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21e80 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
21e90 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
21ea0 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62  4.z && pC->isTab
21eb0 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55  le ){.    db->xU
21ec0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
21ed0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
21ee0 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20  LITE_DELETE,.   
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d       db->aDb[pC-
21f10 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70  >iDb].zName, pOp
21f20 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20  ->p4.z, iKey);. 
21f30 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21f40 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69  Db>=0 );.  }.  i
21f50 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
21f60 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
21f70 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72  >nChange++;.  br
21f80 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
21f90 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
21fa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
21fb0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
21fc0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
21fd0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
21fe0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
21ff0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
22000 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
22010 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
22020 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
22030 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
22040 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
22050 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
22060 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
22070 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
22080 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
22090 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
220a0 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
220b0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
220c0 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
220d0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
220e0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
220f0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
22100 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
22110 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
22120 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 72 74    if key(P1)!=rt
22130 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
22140 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
22150 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
22160 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
22170 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
22180 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
22190 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20  the record blob 
221a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
221b0 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20  gainst a prefix 
221c0 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
221d0 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72  t .** the sorter
221e0 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c   cursor currentl
221f0 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  y points to.  Th
22200 65 20 66 69 6e 61 6c 20 50 34 20 66 69 65 6c 64  e final P4 field
22210 73 20 6f 66 20 62 6f 74 68 0a 2a 2a 20 74 68 65  s of both.** the
22220 20 50 33 20 61 6e 64 20 73 6f 72 74 65 72 20 72   P3 and sorter r
22230 65 63 6f 72 64 20 61 72 65 20 69 67 6e 6f 72 65  ecord are ignore
22240 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
22250 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
22260 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
22270 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
22280 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
22290 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
222a0 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
222b0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
222c0 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
222d0 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
222e0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
222f0 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
22300 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
22310 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
22320 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
22330 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
22340 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
22350 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
22360 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
22370 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
22380 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
22390 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
223a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
223b0 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
223c0 49 67 6e 6f 72 65 3b 0a 0a 20 20 70 43 20 3d 20  Ignore;..  pC = 
223d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
223e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
223f0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
22400 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
22410 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
22420 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
22430 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67 6e 6f  Op->p3];.  nIgno
22440 72 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  re = pOp->p4.i;.
22450 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
22460 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
22470 70 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e 6f 72  pC, pIn3, nIgnor
22480 65 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  e, &res);.  if( 
22490 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
224a0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
224b0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
224c0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
224d0 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
224e0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
224f0 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
22500 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
22510 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
22520 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
22530 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
22540 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
22550 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
22560 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
22570 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
22580 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
22590 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
225a0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
225b0 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
225c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
225d0 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
225e0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
225f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
22600 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
22610 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22620 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
22630 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
22640 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
22650 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
22660 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
22670 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
22680 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
22690 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
226a0 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
226b0 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
226c0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
226d0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
226e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
226f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22700 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
22710 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
22720 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
22730 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
22740 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
22750 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
22760 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
22770 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
22780 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22790 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57  [P2]=key.**.** W
227a0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
227b0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
227c0 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
227d0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
227e0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
227f0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
22800 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
22810 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
22820 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
22830 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
22840 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
22850 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
22860 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
22870 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
22880 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
22890 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
228a0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
228b0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
228c0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
228d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
228e0 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
228f0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
22900 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
22910 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
22920 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
22930 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
22940 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
22950 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
22960 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
22970 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
22980 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
22990 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
229a0 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
229b0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
229c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
229d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
229e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
229f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22a00 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
22a10 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
22a20 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22a30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
22a40 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
22a50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22a60 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
22a70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
22a80 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
22a90 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22aa0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
22ab0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22ac0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
22ad0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
22ae0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22af0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22b00 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
22b10 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
22b20 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
22b30 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
22b40 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
22b50 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
22b60 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
22b70 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
22b80 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
22b90 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
22ba0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
22bb0 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
22bc0 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
22bd0 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
22be0 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
22bf0 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
22c00 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
22c10 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
22c20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
22c30 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
22c40 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
22c50 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
22c60 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
22c70 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22c80 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
22c90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22ca0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
22cb0 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
22cc0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
22cd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22ce0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
22cf0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
22d00 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
22d10 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22d20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
22d30 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
22d40 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
22d50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
22d60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
22d70 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
22d80 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
22d90 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
22da0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
22db0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
22dc0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
22dd0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
22de0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
22df0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
22e00 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
22e10 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
22e20 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
22e30 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
22e40 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22e50 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
22e60 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
22e70 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
22e80 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
22e90 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
22ea0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
22eb0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
22ec0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
22ed0 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
22ee0 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
22ef0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
22f00 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
22f10 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
22f20 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
22f30 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
22f40 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
22f50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22f60 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
22f70 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
22f80 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
22f90 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
22fa0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
22fb0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
22fc0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
22fd0 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
22fe0 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
22ff0 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
23000 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
23010 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
23020 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
23030 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
23040 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23050 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
23060 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
23070 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
23080 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
23090 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
230a0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
230b0 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
230c0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
230d0 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
230e0 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
230f0 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
23100 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
23110 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
23120 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
23130 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
23140 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
23150 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
23160 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
23170 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
23180 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
23190 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
231a0 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
231b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
231c0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
231d0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
231e0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
231f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23200 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
23210 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
23220 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
23230 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
23240 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23250 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23260 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23270 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23280 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23290 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
232a0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
232b0 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43  ableReg==0 || pC
232c0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
232d0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
232e0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
232f0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
23300 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
23310 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
23320 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
23330 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
23340 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
23350 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23360 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
23370 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
23380 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
23390 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
233a0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
233b0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
233c0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
233d0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
233e0 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
233f0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
23400 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
23410 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
23420 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
23430 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64  (p, pVtab);.#end
23440 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
23450 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
23460 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
23470 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23480 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
23490 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
234a0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
234b0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
234c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
234d0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
234e0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
234f0 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
23500 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
23510 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
23520 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
23530 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
23540 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
23550 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23560 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
23570 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
23580 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
23590 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
235a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
235b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
235c0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
235d0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
235e0 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
235f0 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
23600 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
23610 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
23620 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
23630 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
23640 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
23650 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
23660 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
23670 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
23680 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23690 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
236a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
236b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
236c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
236d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
236e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
236f0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23700 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
23710 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
23720 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23730 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 61 73  ACHE_STALE;.  as
23740 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
23750 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62 43 75  r || pC->pVtabCu
23760 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
23770 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  ->pCursor ){.   
23780 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
23790 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  arCursor(pC->pCu
237a0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
237b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
237c0 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Last P1 P2 * *
237d0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
237e0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
237f0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
23800 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
23810 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
23820 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
23830 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
23840 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
23850 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
23860 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23870 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
23880 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
23890 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
238a0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
238b0 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
238c0 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
238d0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
238e0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
238f0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
23900 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
23910 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
23920 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
23930 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
23940 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
23950 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
23960 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23970 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23980 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23990 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
239a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
239b0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
239c0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72  pC->pCursor;.  r
239d0 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
239e0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
239f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23a00 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
23a10 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
23a20 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
23a30 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23a40 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
23a50 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
23a60 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
23a70 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23a80 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
23a90 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  && res ){.    pc
23aa0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
23ab0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
23ac0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
23ad0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23ae0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
23af0 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
23b00 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
23b10 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
23b20 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
23b30 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
23b40 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
23b50 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
23b60 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
23b70 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
23b80 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
23b90 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
23ba0 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
23bb0 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
23bc0 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
23bd0 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
23be0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
23bf0 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
23c00 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
23c10 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
23c20 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
23c30 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
23c40 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
23c50 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
23c60 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
23c70 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
23c80 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
23c90 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
23ca0 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
23cb0 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
23cc0 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
23cd0 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
23ce0 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
23cf0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
23d00 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
23d10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
23d20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
23d30 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
23d40 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
23d50 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
23d60 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
23d70 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
23d80 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
23d90 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
23da0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
23db0 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
23dc0 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
23dd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
23de0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
23df0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
23e00 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
23e10 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
23e20 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
23e30 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
23e40 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
23e50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
23e60 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
23e70 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
23e80 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
23e90 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
23ea0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
23eb0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
23ec0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
23ed0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
23ee0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
23ef0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
23f00 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
23f10 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
23f20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23f30 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
23f40 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
23f50 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
23f60 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
23f70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23f80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23f90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23fa0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23fb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23fc0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
23fd0 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
23fe0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f  ode==OP_SorterSo
23ff0 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rt) );.  res = 1
24000 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72  ;.  if( isSorter
24010 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (pC) ){.    rc =
24020 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
24030 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70 43 2c  erRewind(db, pC,
24040 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
24050 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
24060 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  >pCursor;.    as
24070 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
24080 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
24090 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
240a0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
240b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
240c0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
240d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
240e0 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72  STALE;.    pC->r
240f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
24100 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
24110 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24120 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
24130 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
24140 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73  nOp );.  if( res
24150 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
24160 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
24170 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24180 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
24190 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76  * * P5.**.** Adv
241a0 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
241b0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
241c0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
241d0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
241e0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
241f0 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
24200 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
24210 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
24220 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
24230 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
24240 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
24250 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
24260 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
24270 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
24280 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24290 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
242a0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
242b0 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
242c0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
242d0 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
242e0 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
242f0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
24300 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
24310 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
24320 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  ault..**.** P4 i
24330 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
24340 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
24350 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
24360 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
24370 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
24380 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
24390 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
243a0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
243b0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
243c0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
243d0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
243e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
243f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
24400 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
24410 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
24420 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
24430 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 2a 20  tIfOpen P1 P2 * 
24440 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  * P5.**.** This 
24450 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
24460 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
24470 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
24480 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
24490 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
244a0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a  s a no-op..*/./*
244b0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
244c0 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
244d0 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
244e0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
244f0 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
24500 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
24510 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
24520 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
24530 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
24540 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
24550 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
24560 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24570 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24580 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
24590 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
245a0 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
245b0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
245c0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
245d0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
245e0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
245f0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
24600 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
24610 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
24620 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
24630 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
24640 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  ined..**.** P4 i
24650 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
24660 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
24670 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
24680 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
24690 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
246a0 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
246b0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
246c0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
246d0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
246e0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
246f0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24700 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24710 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24720 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
24730 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
24740 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68   * * P5.**.** Th
24750 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
24760 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50 72 65  just like OP_Pre
24770 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  v except that if
24780 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
24790 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
247a0 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
247b0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e  .case OP_SorterN
247c0 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20  ext: {  /* jump 
247d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
247e0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
247f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24800 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24810 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
24820 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
24830 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
24840 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  t(db, pC, &res);
24850 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
24860 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49  l;.case OP_PrevI
24870 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
24880 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
24890 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  tIfOpen:    /* j
248a0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ump */.  if( p->
248b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d  apCsr[pOp->p1]==
248c0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
248d0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a  Fall through */.
248e0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
248f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
24900 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
24910 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24920 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
24930 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24940 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
24950 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24960 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
24970 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
24980 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24990 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
249a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
249b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
249c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
249d0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
249e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
249f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
24a00 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
24a10 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
24a20 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
24a30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24a40 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
24a50 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24a60 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
24a70 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
24a80 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24a90 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
24aa0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24ab0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24ac0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
24ad0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24ae0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
24af0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24b00 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
24b10 72 65 76 69 6f 75 73 29 3b 0a 20 20 72 63 20 3d  revious);.  rc =
24b20 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24b30 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
24b40 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a  res);.next_tail:
24b50 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24b60 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24b70 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
24b80 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
24b90 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20  w = 0;.    pc = 
24ba0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
24bb0 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
24bc0 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
24bd0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
24be0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
24bf0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
24c00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e   }else{.    pC->
24c10 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d  nullRow = 1;.  }
24c20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
24c30 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20  lid = 0;.  goto 
24c40 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
24c50 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
24c60 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
24c70 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79  P2 P3 * P5.** Sy
24c80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
24c90 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
24ca0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
24cb0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
24cc0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
24cd0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
24ce0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
24cf0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
24d00 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
24d10 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
24d20 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
24d30 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
24d40 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
24d50 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
24d60 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
24d70 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
24d80 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
24d90 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
24da0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
24db0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
24dc0 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
24dd0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
24de0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
24df0 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
24e00 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
24e10 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
24e20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
24e30 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
24e40 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
24e50 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
24e60 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
24e70 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
24e80 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
24e90 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
24ea0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24eb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24ec0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24ed0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24ee0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24ef0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24f00 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
24f10 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
24f20 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
24f30 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
24f40 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
24f50 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
24f60 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
24f70 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
24f80 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  sor;.  if( pOp->
24f90 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
24fa0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
24fb0 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
24fc0 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
24fd0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
24fe0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
24ff0 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
25000 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25010 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73  OK ){.    if( is
25020 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
25030 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25040 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
25050 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20  db, pC, pIn2);. 
25060 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25070 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
25080 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
25090 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
250a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
250b0 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
250c0 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
250d0 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
250e0 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
250f0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
25100 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
25110 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
25120 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
25130 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
25140 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
25150 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
25160 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25170 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
25180 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25190 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
251a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
251b0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
251c0 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
251d0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
251e0 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
251f0 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
25200 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
25210 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
25220 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
25230 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
25240 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
25250 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
25260 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
25270 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
25280 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25290 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
252a0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
252b0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
252c0 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
252d0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
252e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
252f0 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
25300 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
25310 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
25320 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25330 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25340 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25350 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25360 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25370 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25380 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25390 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
253a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
253b0 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
253c0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
253d0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
253e0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
253f0 2d 3e 70 33 3b 0a 20 20 72 2e 66 6c 61 67 73 20  ->p3;.  r.flags 
25400 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
25410 58 5f 4d 41 54 43 48 3b 0a 20 20 72 2e 61 4d 65  X_MATCH;.  r.aMe
25420 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
25430 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  2];.#ifdef SQLIT
25440 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
25450 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
25460 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
25470 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
25480 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
25490 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73  .#endif.  rc = s
254a0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
254b0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
254c0 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
254d0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
254e0 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
254f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
25500 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
25510 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73  Crsr);.  }.  ass
25520 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25530 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25540 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
25550 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
25560 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25570 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
25580 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
25590 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
255a0 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
255b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
255c0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
255d0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
255e0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
255f0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
25600 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
25610 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
25620 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
25630 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
25640 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
25650 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
25660 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
25670 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
25680 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
25690 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
256a0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
256b0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
256c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
256d0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
256e0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
256f0 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
25700 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
25710 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
25720 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25730 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25740 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25750 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25760 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25770 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
25780 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
25790 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f  pCrsr!=0 );.  pO
257a0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
257b0 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Null;.  rc = sql
257c0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
257d0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
257e0 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
257f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25800 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ror;.  assert( p
25810 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25820 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25830 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
25840 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e   );.  if( !pC->n
25850 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 63  ullRow ){.    rc
25860 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
25870 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
25880 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
25890 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
258a0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
258b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
258c0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  r;.    }.    pOu
258d0 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
258e0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
258f0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20  = MEM_Int;.  }. 
25900 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25910 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
25920 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
25930 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
25940 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
25950 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
25960 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
25970 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
25980 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
25990 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
259a0 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
259b0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
259c0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
259d0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
259e0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
259f0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
25a00 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
25a10 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
25a20 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
25a30 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
25a40 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
25a50 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
25a60 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
25a70 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
25a80 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
25a90 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
25aa0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
25ab0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
25ac0 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
25ad0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
25ae0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
25af0 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
25b00 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
25b10 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
25b20 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
25b30 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
25b40 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
25b50 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
25b60 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
25b70 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
25b80 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
25b90 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
25ba0 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
25bb0 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
25bc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
25bd0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
25be0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
25bf0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
25c00 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
25c10 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
25c20 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
25c30 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
25c40 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
25c50 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
25c60 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
25c70 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
25c80 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
25c90 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
25ca0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
25cb0 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
25cc0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
25cd0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
25ce0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
25cf0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
25d00 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
25d10 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
25d20 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
25d30 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
25d40 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
25d50 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
25d60 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
25d70 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
25d80 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
25d90 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f  lon prior .** to
25da0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
25db0 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65    This makes the
25dc0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
25dd0 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65  e IdxLE..*/.case
25de0 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
25df0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
25e00 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20  ase OP_IdxGE: { 
25e10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
25e20 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
25e30 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
25e40 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
25e50 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
25e60 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25e70 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25e80 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25e90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25ea0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25eb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
25ec0 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
25ed0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
25ee0 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
25ef0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25f00 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25f10 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
25f20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
25f30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25f40 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
25f50 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
25f60 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
25f70 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25f80 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
25f90 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
25fa0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
25fb0 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
25fc0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
25fd0 43 48 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  CH;.  }else{.   
25fe0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
25ff0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
26000 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
26010 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
26020 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26030 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
26040 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
26050 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
26060 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
26070 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
26080 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
26090 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
260a0 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65  pare(pC, &r, &re
260b0 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  s);.  if( pOp->o
260c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
260d0 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65  ){.    res = -re
260e0 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
260f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26100 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b  ode==OP_IdxGE );
26110 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
26120 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
26130 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
26140 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1 ;.  }.  brea
26150 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26160 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
26170 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
26180 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
26190 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
261a0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
261b0 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
261c0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
261d0 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
261e0 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
261f0 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
26200 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
26210 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
26220 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
26230 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
26240 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
26250 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
26260 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
26270 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
26280 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
26290 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
262a0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
262b0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
262c0 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
262d0 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
262e0 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
262f0 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
26300 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
26310 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
26320 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
26330 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
26340 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
26350 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
26360 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
26370 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
26380 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
26390 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
263a0 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
263b0 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
263c0 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
263d0 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
263e0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
263f0 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65   P2.  If no page
26400 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61   .** movement wa
26410 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
26420 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65  use the table be
26430 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
26440 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20  already .** the 
26450 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
26460 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
26470 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
26480 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
26490 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
264a0 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
264b0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
264c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
264d0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
264e0 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
264f0 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
26500 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
26510 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
26520 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e  Moved;.  int iCn
26530 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  t;.  Vdbe *pVdbe
26540 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
26550 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
26560 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65  nly==0 );.#ifnde
26570 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
26580 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e  RTUALTABLE.  iCn
26590 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
265a0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
265b0 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64  dbe; pVdbe = pVd
265c0 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  be->pNext){.    
265d0 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63  if( pVdbe->magic
265e0 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
265f0 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65   && pVdbe->bIsRe
26600 61 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56  ader .     && pV
26610 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
26620 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
26630 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >=0 .    ){.    
26640 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
26650 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
26660 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64   = db->nVdbeRead
26670 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d  ;.#endif.  pOut-
26680 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
26690 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  l;.  if( iCnt>1 
266a0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
266b0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
266c0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
266d0 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
266e0 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
266f0 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
26700 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
26710 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
26720 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
26730 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
26740 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
26750 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
26760 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
26770 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
26780 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
26790 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
267a0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
267b0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
267c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
267d0 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
267e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
267f0 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
26800 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
26810 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
26820 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
26830 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
26840 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
26850 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
26860 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
26870 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
26880 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
26890 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
268a0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
268b0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
268c0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
268d0 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
268e0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
268f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26900 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
26910 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
26920 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
26930 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26940 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
26950 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
26960 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26970 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
26980 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
26990 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
269a0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
269b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
269c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
269d0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
269e0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
269f0 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
26a00 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26a10 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
26a20 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
26a30 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
26a40 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
26a50 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
26a60 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
26a70 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
26a80 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
26a90 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
26aa0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
26ab0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
26ac0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
26ad0 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
26ae0 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
26af0 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
26b00 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
26b10 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
26b20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
26b30 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
26b40 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
26b50 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26b60 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26b70 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26b80 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
26b90 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
26ba0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
26bb0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
26bc0 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
26bd0 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
26be0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
26bf0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
26c00 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26c10 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
26c20 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
26c30 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
26c40 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
26c50 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
26c60 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
26c70 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
26c80 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d 31 20 29  rt( pOp->p1!=1 )
26c90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
26ca0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
26cb0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
26cc0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
26cd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
26ce0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
26cf0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
26d00 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
26d10 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
26d20 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
26d30 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
26d40 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
26d50 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
26d60 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
26d70 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
26d80 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
26d90 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
26da0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
26db0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
26dc0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
26dd0 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
26de0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
26df0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
26e00 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
26e10 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
26e20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26e30 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
26e40 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
26e50 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
26e60 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
26e70 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
26e80 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
26e90 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26ea0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
26eb0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
26ec0 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
26ed0 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
26ee0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
26ef0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
26f00 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
26f10 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
26f20 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
26f30 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
26f40 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
26f50 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
26f60 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
26f70 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
26f80 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
26f90 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
26fa0 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
26fb0 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
26fc0 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
26fd0 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
26fe0 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
26ff0 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
27000 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
27010 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
27020 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
27030 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
27040 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
27050 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27060 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
27070 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
27080 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
27090 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
270a0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
270b0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
270c0 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
270d0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
270e0 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
270f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
27100 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
27110 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
27120 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
27130 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
27140 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
27150 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
27160 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
27170 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
27180 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
27190 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
271a0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
271b0 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
271c0 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
271d0 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
271e0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
271f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27200 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27210 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
27220 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
27230 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
27240 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27250 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
27260 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
27270 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
27280 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
27290 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
272a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
272b0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
272c0 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
272d0 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
272e0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
272f0 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
27300 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
27310 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
27320 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27330 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
27340 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
27350 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
27360 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
27370 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27380 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
27390 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
273a0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
273b0 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
273c0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
273d0 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
273e0 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
273f0 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
27400 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
27410 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
27420 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
27430 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
27440 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
27450 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
27460 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
27470 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
27480 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
27490 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
274a0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
274b0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
274c0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
274d0 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
274e0 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
274f0 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
27500 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
27510 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
27520 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
27530 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
27540 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
27550 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
27560 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
27570 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
27580 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
27590 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
275a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
275b0 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
275c0 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
275d0 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
275e0 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
275f0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
27600 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
27610 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
27620 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27630 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
27640 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
27650 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
27660 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
27670 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
27680 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
27690 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
276a0 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
276b0 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
276c0 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
276d0 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
276e0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
276f0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
27700 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
27710 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
27720 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
27730 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
27740 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
27750 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
27760 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
27770 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
27780 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
27790 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
277a0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
277b0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
277c0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
277d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
277e0 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
277f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
27800 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
27810 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
27820 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
27830 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
27840 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
27850 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
27860 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
27870 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27880 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
27890 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
278a0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
278b0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
278c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
278d0 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
278e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
278f0 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
27900 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
27910 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
27920 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
27930 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
27940 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
27950 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
27960 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
27970 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
27980 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
27990 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
279a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
279b0 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
279c0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
279d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
279e0 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
279f0 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
27a00 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
27a10 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
27a20 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
27a30 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
27a40 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
27a50 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
27a60 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
27a70 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
27a80 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
27a90 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
27aa0 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
27ab0 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
27ac0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27ad0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27ae0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
27af0 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
27b00 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
27b10 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
27b20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
27b30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27b40 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
27b50 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
27b60 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
27b70 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
27b80 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
27b90 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
27ba0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
27bb0 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
27bc0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
27bd0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
27be0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
27bf0 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
27c00 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
27c10 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
27c20 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
27c30 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
27c40 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
27c50 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
27c60 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
27c70 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
27c80 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
27c90 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
27ca0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27cb0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27cc0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
27cd0 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
27ce0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
27cf0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
27d00 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
27d10 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
27d20 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
27d30 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
27d40 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
27d50 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
27d60 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
27d70 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27d80 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27d90 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27da0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27db0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27dc0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27dd0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
27de0 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
27df0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
27e00 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
27e10 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
27e20 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
27e30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
27e40 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
27e50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
27e60 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
27e70 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
27e80 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
27e90 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
27ea0 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
27eb0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
27ec0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
27ed0 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
27ee0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
27ef0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
27f00 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
27f10 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
27f20 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
27f30 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
27f40 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
27f50 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
27f60 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
27f70 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
27f80 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
27f90 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
27fa0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
27fb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27fc0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
27fd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
27fe0 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
27ff0 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
28000 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
28010 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
28020 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
28030 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
28040 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
28050 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
28060 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
28070 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
28080 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
28090 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
280a0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
280b0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
280c0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
280d0 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
280e0 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
280f0 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
28100 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
28110 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
28120 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
28130 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
28140 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
28150 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
28160 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
28170 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
28180 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
28190 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
281a0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
281b0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
281c0 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
281d0 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
281e0 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
281f0 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
28200 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
28210 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
28220 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
28230 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
28240 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
28250 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
28260 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
28270 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
28280 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
28290 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
282a0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
282b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
282c0 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
282d0 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
282e0 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
282f0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
28300 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
28310 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
28320 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
28330 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
28340 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
28350 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
28360 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
28370 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
28380 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
28390 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
283a0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
283b0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
283c0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
283d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
283e0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
283f0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
28400 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
28410 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
28420 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
28430 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
28440 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
28450 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
28460 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
28470 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
28480 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
28490 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
284a0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
284b0 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
284c0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
284d0 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
284e0 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
284f0 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
28500 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
28510 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
28520 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
28530 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
28540 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
28550 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
28560 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
28570 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
28580 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
28590 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
285a0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
285b0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
285c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
285d0 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
285e0 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
285f0 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
28600 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
28610 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
28620 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
28630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28640 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
28650 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
28660 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
28670 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d  )1)<<pOp->p5))!=
28680 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
28690 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
286a0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
286b0 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
286c0 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
286f0 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
28700 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
28710 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
28720 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
28730 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
28740 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
28750 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
28760 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
28770 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
28780 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
28790 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
287a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
287b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
287c0 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
287d0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
287e0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
287f0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
28800 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
28810 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
28820 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
28830 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
28840 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
28850 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
28860 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
28870 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
28880 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
28890 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
288a0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
288b0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
288c0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
288d0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
288e0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
288f0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
28900 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
28910 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
28920 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
28930 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
28940 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28950 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
28960 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
28970 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28980 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
28990 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
289a0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
289b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
289c0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
289d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
289e0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
289f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28a00 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
28a10 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
28a20 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28a30 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
28a40 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
28a50 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
28a60 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28a70 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
28a80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28a90 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
28aa0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
28ab0 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
28ac0 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
28ad0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
28ae0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
28af0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
28b00 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
28b10 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
28b20 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
28b30 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
28b40 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
28b50 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
28b60 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
28b70 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
28b80 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
28b90 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
28ba0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
28bb0 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
28bc0 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
28bd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
28be0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
28bf0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28c00 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
28c10 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
28c20 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28c30 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
28c40 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
28c50 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
28c60 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
28c70 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
28c80 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
28c90 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
28ca0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
28cb0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
28cc0 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
28cd0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28ce0 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
28cf0 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
28d00 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
28d10 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
28d20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
28d30 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
28d40 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
28d50 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
28d60 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
28d70 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
28d80 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
28d90 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
28da0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
28db0 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
28dc0 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
28dd0 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
28de0 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
28df0 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
28e00 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
28e10 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
28e20 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
28e30 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
28e40 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
28e50 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
28e60 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
28e70 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
28e80 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
28e90 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
28ea0 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
28eb0 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
28ec0 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
28ed0 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
28ee0 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
28ef0 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
28f00 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
28f10 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
28f20 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
28f30 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
28f40 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
28f50 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
28f60 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
28f70 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
28f80 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
28f90 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
28fa0 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
28fb0 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
28fc0 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
28fd0 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
28fe0 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
28ff0 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
29000 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
29010 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
29020 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
29030 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
29040 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
29050 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
29060 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
29070 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
29080 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
29090 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
290a0 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
290b0 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
290c0 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
290d0 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
290e0 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
290f0 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
29100 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
29110 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
29120 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
29130 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
29140 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
29150 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
29160 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
29170 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
29180 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
29190 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
291a0 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
291b0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
291c0 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
291d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
291e0 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
291f0 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
29200 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
29210 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
29220 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
29230 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29240 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
29250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
29260 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
29270 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
29280 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
29290 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
292a0 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
292b0 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
292c0 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
292d0 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
292e0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
292f0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
29300 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
29310 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
29320 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
29330 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
29340 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
29350 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
29360 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
29370 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
29380 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29390 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
293a0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
293b0 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
293c0 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
293d0 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
293e0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
293f0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
29400 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
29430 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
29440 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
29470 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
29480 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
29490 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
294a0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
294b0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
294c0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
294d0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
294e0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
294f0 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
29500 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
29510 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29520 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
29530 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
29540 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
29550 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
29560 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
29570 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
29580 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
29590 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
295a0 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
295b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
295c0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
295d0 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
295e0 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
295f0 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
29600 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
29610 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
29620 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
29630 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
29640 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
29650 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
29660 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
29670 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
29680 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
29690 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
296a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
296b0 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
296c0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
296d0 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
296e0 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
296f0 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
29700 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
29710 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
29720 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
29730 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
29740 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
29750 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
29760 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
29770 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
29780 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
29790 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
297a0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
297b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
297c0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
297d0 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
297e0 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29800 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
29810 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
29820 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
29830 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
29840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29850 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
29860 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
29870 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
29880 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
29890 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
298a0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
298b0 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
298c0 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
298d0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
298e0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
298f0 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
29900 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
29910 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
29920 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
29930 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
29940 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
29950 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
29960 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
29970 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
29980 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
29990 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
299a0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
299b0 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
299c0 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
299d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
299e0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
299f0 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
29a00 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
29a10 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
29a20 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
29a30 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29a40 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
29a50 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
29a60 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
29a70 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
29a80 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
29a90 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
29aa0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
29ab0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
29ac0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
29ad0 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
29ae0 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
29af0 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
29b00 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
29b10 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
29b20 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
29b30 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
29b40 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
29b50 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
29b60 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
29b70 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
29b80 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
29b90 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
29ba0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
29bb0 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
29bc0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
29bd0 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
29be0 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
29bf0 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
29c00 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
29c10 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
29c20 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
29c30 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
29c40 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
29c50 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
29c60 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
29c70 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
29c80 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
29c90 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
29ca0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
29cb0 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
29cc0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
29cd0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
29ce0 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
29cf0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
29d00 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
29d10 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
29d20 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
29d30 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
29d40 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
29d50 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
29d60 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
29d70 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
29d80 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
29d90 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
29da0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
29db0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
29dc0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
29dd0 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
29de0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
29df0 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
29e00 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
29e10 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
29e20 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
29e30 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
29e40 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
29e50 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
29e60 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
29e70 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
29e80 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
29e90 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
29ea0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
29eb0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
29ec0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
29ed0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
29ee0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
29ef0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
29f00 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
29f10 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
29f20 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
29f30 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
29f40 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
29f50 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
29f60 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
29f70 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
29f80 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
29f90 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
29fa0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
29fb0 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
29fc0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
29fd0 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
29fe0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
29ff0 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2a000 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2a010 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2a020 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2a030 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2a040 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2a050 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2a060 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2a070 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2a080 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2a090 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2a0b0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2a0c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a0d0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2a0e0 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2a0f0 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2a100 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2a110 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2a120 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2a130 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2a140 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2a150 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2a160 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2a170 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2a180 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a190 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2a1a0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2a1b0 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2a1c0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2a1d0 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2a1e0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2a1f0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a200 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2a210 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2a220 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2a230 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2a240 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2a250 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2a260 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2a270 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2a280 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2a290 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2a2a0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2a2b0 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2a2c0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2a2d0 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2a2e0 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2a2f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2a300 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2a310 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2a320 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2a330 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2a340 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2a350 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2a360 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2a370 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2a380 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2a390 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2a3a0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2a3b0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2a3c0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2a3d0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2a3e0 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64  gs = MEM_Invalid
2a3f0 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2a400 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2a410 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2a420 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2a430 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2a440 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2a450 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2a460 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2a470 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2a480 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2a490 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2a4a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2a4b0 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  c==pFrame->pc );
2a4c0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2a4d0 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2a4e0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2a4f0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2a500 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2a510 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2a520 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2a530 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2a540 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2a550 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2a560 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2a570 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2a580 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2a590 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2a5a0 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2a5b0 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2a5c0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2a5d0 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2a5e0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2a5f0 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2a600 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2a610 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2a620 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2a630 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2a640 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2a650 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2a660 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2a670 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2a680 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20  ->nOnce;.  pc = 
2a690 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  -1;.  memset(p->
2a6a0 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2a6b0 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2a6c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a6d0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2a6e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2a6f0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2a700 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2a710 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2a720 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2a730 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2a740 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2a750 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2a760 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2a770 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2a780 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2a790 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2a7a0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2a7b0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2a7c0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2a7d0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2a7e0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2a7f0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2a800 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2a810 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2a820 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2a830 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2a840 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2a850 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2a860 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2a870 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2a880 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2a890 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2a8a0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2a8b0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2a8c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2a8d0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2a8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2a8f0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2a900 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2a910 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
2a920 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
2a930 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
2a940 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2a950 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
2a960 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
2a970 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
2a980 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
2a990 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
2a9a0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
2a9b0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
2a9c0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2a9d0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
2a9e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a9f0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2aa00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
2aa10 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
2aa20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
2aa30 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
2aa40 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
2aa50 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2aa60 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
2aa70 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
2aa80 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
2aa90 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2aaa0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
2aab0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2aac0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2aad0 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
2aae0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2aaf0 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
2ab00 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
2ab10 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
2ab20 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
2ab30 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
2ab40 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2ab50 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2ab60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
2ab70 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
2ab80 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2ab90 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
2aba0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
2abb0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
2abc0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
2abd0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
2abe0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
2abf0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2ac00 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
2ac10 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
2ac20 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
2ac30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ac40 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
2ac50 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2ac60 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
2ac70 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2ac80 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
2ac90 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
2aca0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
2acb0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
2acc0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
2acd0 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
2ace0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
2acf0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2ad00 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2ad10 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2ad20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
2ad30 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2ad40 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2ad50 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2ad60 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2ad70 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
2ad80 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
2ad90 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
2ada0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2adb0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
2adc0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
2add0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2ade0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
2adf0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2ae00 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
2ae10 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2ae20 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2ae30 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
2ae40 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
2ae50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2ae60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2ae70 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  {.    if( db->nD
2ae80 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2ae90 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2aea0 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2aeb0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
2aec0 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
2aed0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2aee0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2aef0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2af00 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2af10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2af20 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2af30 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2af40 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2af50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2af60 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2af70 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2af80 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2af90 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2afa0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2afb0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2afc0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2afd0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2afe0 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2aff0 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2b000 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2b010 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2b020 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2b030 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2b040 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2b050 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2b060 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b070 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2b080 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2b090 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2b0a0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2b0b0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2b0c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2b0d0 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2b0e0 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2b0f0 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2b100 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2b110 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2b120 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2b130 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d     /* in2 */.  M
2b140 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65  em *pIn1;.  Vdbe
2b150 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2b160 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2b170 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2b180 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2b190 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2b1a0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2b1b0 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2b1c0 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2b1d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2b1e0 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2b1f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2b200 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2b210 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2b220 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2b230 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2b240 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2b250 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2b260 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2b270 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2b280 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2b290 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2b2a0 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2b2b0 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2b2c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2b2d0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2b2e0 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2b2f0 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2b300 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2b310 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2b320 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  oto P2.**.** If 
2b330 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2b340 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
2b350 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
2b360 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
2b370 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2b380 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2b390 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2b3a0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2b3b0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b3c0 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2b3d0 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2b3e0 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2b3f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2b400 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2b410 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2b420 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b430 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b440 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2b450 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
2b460 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
2b470 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2b480 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b490 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2b4a0 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  eg P1 P2 * * *.*
2b4b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2b4c0 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]<0 goto P2.*
2b4d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
2b4e0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2b4f0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
2b500 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
2b510 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b520 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b530 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b540 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b550 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b560 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b570 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b580 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b590 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b5a0 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20  ase OP_IfNeg: { 
2b5b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b5c0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b5d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b5e0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b5f0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b600 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b610 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
2b620 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b630 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b640 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
2b650 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2b660 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d  ynopsis: r[P1]+=
2b670 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20  P3, if r[P1]==0 
2b680 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2b690 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2b6a0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2b6b0 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2b6c0 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2b6d0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2b6e0 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2b6f0 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2b700 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2b710 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b720 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b730 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b740 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b750 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b760 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b770 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b780 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b790 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b7a0 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
2b7b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b7c0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2b7d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b7e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2b7f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b800 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2b810 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
2b820 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
2b830 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2b840 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2b850 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b860 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2b870 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2b880 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
2b890 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
2b8a0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2b8b0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2b8c0 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2b8d0 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
2b8e0 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
2b8f0 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
2b900 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2b910 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
2b920 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
2b930 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
2b940 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a   Use register.**
2b950 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d   P3 as the accum
2b960 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
2b970 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
2b980 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
2b990 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
2b9a0 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
2b9b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
2b9c0 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  tep: {.  int n;.
2b9d0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2b9e0 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65  pMem;.  Mem *pRe
2b9f0 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c;.  sqlite3_con
2ba00 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
2ba10 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
2ba20 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  l;..  n = pOp->p
2ba30 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d  5;.  assert( n>=
2ba40 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61  0 );.  pRec = &a
2ba50 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2ba60 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
2ba70 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
2ba80 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66  l || n==0 );.  f
2ba90 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
2baa0 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61  , pRec++){.    a
2bab0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2bac0 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61  d(pRec) );.    a
2bad0 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a  pVal[i] = pRec;.
2bae0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2baf0 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20  ange(p, pRec);. 
2bb00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2bb10 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63 29  mStoreType(pRec)
2bb20 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
2bb30 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
2bb40 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
2bb50 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2bb60 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2bb70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78  Cursor) );.  ctx
2bb80 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
2bb90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2bba0 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
2bbb0 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
2bbc0 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
2bbd0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
2bbe0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
2bbf0 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
2bc00 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
2bc10 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2bc20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
2bc30 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2bc40 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
2bc50 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20  Func->funcFlags 
2bc60 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
2bc70 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
2bc80 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
2bc90 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bca0 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
2bcb0 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
2bcc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2bcd0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2bce0 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
2bcf0 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
2bd00 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
2bd10 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
2bd20 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
2bd30 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
2bd40 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
2bd50 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
2bd60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2bd70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2bd80 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2bd90 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2bda0 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
2bdb0 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
2bdc0 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73  .  }.  if( ctx.s
2bdd0 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2bde0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2bdf0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2be00 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2be10 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2be20 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2be30 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2be40 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20  m[i], 1);.  }.. 
2be50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2be60 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
2be70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2be80 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
2be90 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
2bea0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2beb0 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
2bec0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
2bed0 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
2bee0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2bef0 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
2bf00 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2bf10 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
2bf20 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
2bf30 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
2bf40 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
2bf50 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2bf60 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
2bf70 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
2bf80 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2bf90 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2bfa0 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
2bfb0 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
2bfc0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
2bfd0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
2bfe0 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
2bff0 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
2c000 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
2c010 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
2c020 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
2c030 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
2c040 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
2c050 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
2c060 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
2c070 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
2c080 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
2c090 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
2c0a0 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
2c0b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2c0c0 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
2c0d0 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2c0e0 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
2c0f0 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
2c100 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2c110 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2c120 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c130 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2c140 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
2c150 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
2c160 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
2c170 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
2c180 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
2c190 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2c1a0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2c1b0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2c1c0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2c1d0 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
2c1e0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
2c1f0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2c200 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
2c210 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2c220 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
2c230 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2c240 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
2c250 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2c260 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2c270 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2c280 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
2c290 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
2c2a0 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
2c2b0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
2c2c0 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
2c2d0 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
2c2e0 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
2c2f0 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
2c300 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
2c310 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
2c320 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2c330 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20  ASSIVE, FULL.** 
2c340 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69  or RESTART.  Wri
2c350 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
2c360 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
2c370 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
2c380 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
2c390 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
2c3a0 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
2c3b0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2c3c0 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
2c3d0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2c3e0 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
2c3f0 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
2c400 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
2c410 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
2c420 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
2c430 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
2c440 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
2c450 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
2c460 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
2c470 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
2c480 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
2c490 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
2c4a0 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
2c4b0 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
2c4c0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2c4f0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2c500 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
2c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c520 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
2c530 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c550 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
2c560 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
2c570 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2c580 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
2c590 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2c5a0 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2c5b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2c5c0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2c5d0 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2c5e0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2c5f0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c600 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2c610 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2c620 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2c630 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  T.  );.  rc = sq
2c640 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2c650 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2c660 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2c670 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2c680 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2c690 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2c6a0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2c6b0 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2c6c0 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2c6d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2c6e0 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2c6f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2c700 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2c710 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2c720 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2c730 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2c740 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c750 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2c760 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2c770 65 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  e P1 P2 P3 * P5.
2c780 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2c790 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2c7a0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2c7b0 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
2c7c0 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
2c7d0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
2c7e0 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
2c7f0 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
2c800 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
2c810 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
2c820 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
2c830 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
2c840 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
2c850 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
2c860 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
2c870 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
2c880 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
2c890 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
2c8a0 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
2c8b0 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
2c8c0 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
2c8d0 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
2c8e0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
2c8f0 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
2c900 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
2c910 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
2c920 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
2c930 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2c940 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f       /* Btree to
2c970 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20   change journal 
2c980 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67  mode of */.  Pag
2c990 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c9b0 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  Pager associated
2c9c0 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69   with pBt */.  i
2c9d0 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20  nt eNew;        
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c9f0 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f  * New journal mo
2ca00 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64  de */.  int eOld
2ca10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ca20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
2ca30 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ld journal mode 
2ca40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2ca50 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e  E_OMIT_WAL.  con
2ca60 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2ca70 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2ca80 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2ca90 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2caa0 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e   */.#endif..  eN
2cab0 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
2cac0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
2cad0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cae0 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
2caf0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2cb00 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2cb10 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2cb20 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cb30 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
2cb40 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2cb50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2cb60 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
2cb70 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cb80 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
2cb90 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2cba0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cbb0 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
2cbc0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cbd0 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
2cbe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cbf0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2cc00 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2cc10 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2cc20 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
2cc30 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2cc40 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
2cc50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
2cc60 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
2cc70 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
2cc80 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2cc90 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
2cca0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ccb0 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
2ccc0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
2ccd0 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
2cce0 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
2ccf0 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
2cd00 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
2cd10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2cd20 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
2cd30 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
2cd40 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
2cd50 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
2cd60 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
2cd70 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
2cd80 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
2cd90 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
2cda0 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
2cdb0 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
2cdc0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
2cdd0 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
2cde0 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
2cdf0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ce00 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
2ce10 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
2ce20 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
2ce30 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
2ce40 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
2ce50 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
2ce60 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
2ce70 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
2ce80 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
2ce90 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
2cea0 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
2ceb0 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
2cec0 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
2ced0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2cee0 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
2cef0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2cf00 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
2cf10 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
2cf20 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
2cf30 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
2cf40 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2cf50 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2cf60 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2cf70 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  , db, .         
2cf80 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
2cf90 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
2cfa0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2cfb0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
2cfc0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
2cfd0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2cfe0 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
2cff0 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
2d000 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65     break;.    }e
2d010 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
2d020 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2d030 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
2d040 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
2d050 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
2d060 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
2d070 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
2d080 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
2d090 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
2d0a0 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
2d0b0 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
2d0c0 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
2d0d0 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
2d0e0 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
2d0f0 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
2d100 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
2d110 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2d120 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
2d130 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
2d140 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
2d150 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
2d160 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
2d170 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20  seWal(pPager);. 
2d180 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2d190 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2d1a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2d1b0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2d1c0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2d1d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2d1e0 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
2d1f0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d200 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
2d210 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
2d220 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
2d230 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
2d240 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
2d250 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
2d260 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
2d270 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
2d280 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2d290 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2d2a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d2b0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
2d2c0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
2d2d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
2d2e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2d2f0 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
2d300 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
2d310 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
2d320 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
2d330 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
2d340 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
2d350 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
2d360 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
2d370 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
2d380 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
2d390 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2d3a0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
2d3b0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
2d3c0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
2d3d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d3e0 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2d3f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2d400 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
2d410 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d420 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
2d430 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  rc ){.    eNew =
2d440 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65   eOld;.  }.  eNe
2d450 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
2d460 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2d470 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
2d480 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
2d490 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p2];.  pOut->
2d4a0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
2d4b0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
2d4c0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
2d4d0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
2d4e0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2d4f0 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
2d500 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
2d510 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
2d520 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
2d530 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
2d540 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2d550 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
2d560 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
2d570 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2d580 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
2d590 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2d5a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
2d5b0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
2d5c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
2d5d0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
2d5e0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
2d5f0 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
2d600 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2d610 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
2d620 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
2d630 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
2d640 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
2d650 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
2d660 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
2d670 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
2d680 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
2d690 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
2d6a0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
2d6b0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2d6c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2d6d0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2d6e0 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2d6f0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2d700 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d710 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2d720 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2d730 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2d740 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2d750 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2d760 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2d770 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2d780 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2d790 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2d7a0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2d7b0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2d7c0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2d7d0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2d7e0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2d7f0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2d800 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2d810 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2d820 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2d830 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2d840 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2d850 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2d860 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2d870 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2d880 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2d890 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2d8a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2d8b0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42  dOnly==0 );.  pB
2d8c0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2d8d0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
2d8e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
2d8f0 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
2d900 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
2d910 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
2d920 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2d930 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2d940 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d950 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
2d960 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
2d970 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
2d980 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
2d990 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
2d9a0 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
2d9b0 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
2d9c0 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
2d9d0 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
2d9e0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
2d9f0 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
2da00 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
2da10 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
2da20 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
2da30 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
2da40 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
2da50 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
2da60 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
2da70 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
2da80 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
2da90 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
2daa0 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
2dab0 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
2dac0 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
2dad0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
2dae0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2daf0 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
2db00 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
2db10 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
2db20 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2db30 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2db40 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
2db50 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
2db60 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
2db70 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
2db80 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
2db90 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
2dba0 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
2dbb0 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
2dbc0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
2dbd0 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
2dbe0 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
2dbf0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
2dc00 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
2dc10 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2dc20 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
2dc30 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
2dc40 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2dc50 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
2dc60 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
2dc70 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
2dc80 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
2dc90 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
2dca0 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
2dcb0 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
2dcc0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
2dcd0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
2dce0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
2dcf0 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
2dd00 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
2dd10 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
2dd20 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
2dd30 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
2dd40 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
2dd50 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
2dd60 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
2dd70 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
2dd80 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
2dd90 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
2dda0 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
2ddb0 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
2ddc0 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
2ddd0 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
2dde0 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
2ddf0 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
2de00 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
2de10 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
2de20 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
2de30 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
2de40 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
2de50 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  )<<p1))!=0 );.  
2de60 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
2de70 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
2de80 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
2de90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2dea0 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
2deb0 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
2dec0 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
2ded0 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
2dee0 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
2def0 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
2df00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
2df10 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
2df20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2df30 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2df40 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
2df50 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
2df60 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
2df70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2df80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2df90 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
2dfa0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2dfb0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2dfc0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
2dfd0 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
2dfe0 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2dff0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
2e000 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2e010 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
2e020 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
2e030 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
2e040 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
2e050 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
2e060 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
2e070 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
2e080 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
2e090 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
2e0a0 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
2e0b0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2e0c0 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
2e0d0 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
2e0e0 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
2e0f0 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
2e100 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
2e110 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
2e120 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
2e130 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
2e140 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
2e150 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2e160 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
2e170 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
2e180 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2e190 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
2e1a0 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2e1b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e1c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e1d0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e1e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e1f0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e200 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2e210 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2e220 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2e230 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e240 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2e250 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2e260 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2e270 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2e280 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2e290 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2e2a0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2e2b0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2e2c0 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2e2d0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2e2e0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e2f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e300 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e310 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e320 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e330 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2e340 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2e350 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2e360 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2e370 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2e380 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2e390 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2e3a0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2e3b0 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2e3c0 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2e3d0 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2e3e0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2e3f0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2e400 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2e410 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2e420 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2e430 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2e440 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e450 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2e460 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e470 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2e480 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2e490 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2e4a0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2e4b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e4c0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2e4d0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2e4e0 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2e4f0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2e500 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2e510 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2e520 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2e530 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2e540 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2e550 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2e560 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2e570 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2e580 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2e590 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2e5a0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2e5b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2e5c0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2e5d0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2e5e0 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
2e5f0 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2e600 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2e610 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2e620 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2e630 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2e640 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2e650 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2e660 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2e670 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2e680 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2e690 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
2e6a0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2e6b0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2e6c0 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2e6d0 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2e6e0 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2e6f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2e700 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2e710 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2e720 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2e730 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2e740 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2e750 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2e760 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2e770 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2e780 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2e790 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2e7a0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2e7b0 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2e7c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2e7d0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2e7e0 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2e7f0 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2e800 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2e810 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2e820 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2e830 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e840 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2e850 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e860 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2e870 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
2e880 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2e890 69 73 3a 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20  is: iPlan=r[P3] 
2e8a0 7a 50 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zPlan='P4'.**.**
2e8b0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
2e8c0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
2e8d0 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
2e8e0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
2e8f0 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
2e900 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
2e910 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
2e920 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
2e930 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
2e940 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
2e950 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
2e960 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
2e970 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
2e980 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
2e990 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
2e9a0 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
2e9b0 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
2e9c0 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
2e9d0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2e9e0 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
2e9f0 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
2ea00 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
2ea10 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
2ea20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
2ea30 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
2ea40 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
2ea50 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2ea60 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
2ea70 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
2ea80 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
2ea90 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
2eaa0 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
2eab0 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
2eac0 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
2ead0 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
2eae0 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
2eaf0 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
2eb00 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
2eb10 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
2eb20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
2eb30 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
2eb40 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
2eb50 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
2eb60 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
2eb70 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
2eb80 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
2eb90 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
2eba0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
2ebb0 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
2ebc0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
2ebd0 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
2ebe0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2ebf0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2ec00 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
2ec10 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
2ec20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2ec30 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
2ec40 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2ec50 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
2ec60 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
2ec70 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
2ec80 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2ec90 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
2eca0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
2ecb0 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
2ecc0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2ecd0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ece0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2ecf0 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
2ed00 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2ed10 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
2ed20 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2ed30 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2ed40 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2ed50 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2ed60 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
2ed70 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2ed80 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2ed90 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
2eda0 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
2edb0 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
2edc0 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
2edd0 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
2ede0 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
2edf0 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
2ee00 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
2ee10 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
2ee20 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
2ee30 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
2ee40 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
2ee50 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
2ee60 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20   method */.  {. 
2ee70 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
2ee80 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
2ee90 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
2eea0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2eeb0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
2eec0 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20  &pArgc[i+1];.   
2eed0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2eee0 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67  mStoreType(apArg
2eef0 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  [i]);.    }..   
2ef00 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2ef10 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
2ef20 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
2ef30 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
2ef40 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
2ef50 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
2ef60 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2ef70 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
2ef80 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2ef90 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2efa0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2efb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73  _OK ){.      res
2efc0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
2efd0 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
2efe0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65     }..    if( re
2eff0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
2f000 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2f010 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e   }.  }.  pCur->n
2f020 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62  ullRow = 0;..  b
2f030 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2f040 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2f050 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2f060 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f070 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2f080 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
2f090 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mn P1 P2 P3 * *.
2f0a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2f0b0 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
2f0c0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2f0d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2f0e0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2f0f0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2f100 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2f110 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2f120 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2f130 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2f140 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2f150 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2f160 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2f170 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2f180 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2f190 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2f1a0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2f1b0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2f1c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2f1d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2f1e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f1f0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2f210 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2f220 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
2f230 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
2f240 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
2f250 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
2f260 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
2f270 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
2f280 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
2f290 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2f2a0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
2f2b0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
2f2c0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
2f2d0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2f2e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2f2f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2f300 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
2f310 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
2f320 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
2f330 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
2f340 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75  ));..  /* The ou
2f350 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c  tput cell may al
2f360 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66  ready have a buf
2f370 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d  fer allocated. M
2f380 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ove.  ** the cur
2f390 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f  rent contents to
2f3a0 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69   sContext.s so i
2f3b0 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
2f3c0 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63  function .  ** c
2f3d0 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61  an use the alrea
2f3e0 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
2f3f0 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
2f400 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a  llocating a .  *
2f410 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a  * new one..  */.
2f420 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f430 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73  Move(&sContext.s
2f440 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53  , pDest);.  MemS
2f450 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e  etTypeFlag(&sCon
2f460 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  text.s, MEM_Null
2f470 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  );..  rc = pModu
2f480 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
2f490 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
2f4a0 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
2f4b0 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
2f4c0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
2f4d0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
2f4e0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
2f4f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
2f500 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
2f510 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
2f520 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
2f530 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50  unction to the P
2f540 33 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20  3 register. We. 
2f550 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61   ** do this rega
2f560 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2f570 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f  r or not an erro
2f580 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e  r occurred to en
2f590 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79  sure any.  ** dy
2f5a0 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e  namic allocation
2f5b0 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28   in sContext.s (
2f5c0 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73  a Mem struct) is
2f5d0 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f    released..  */
2f5e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2f5f0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43  angeEncoding(&sC
2f600 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69  ontext.s, encodi
2f610 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
2f620 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c  beMemMove(pDest,
2f630 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20   &sContext.s);. 
2f640 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2f650 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
2f660 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2f670 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
2f680 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2f690 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74  eMemTooBig(pDest
2f6a0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
2f6b0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
2f6c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f6d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f6e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2f6f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f700 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2f710 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
2f720 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2f730 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
2f740 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
2f750 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
2f760 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
2f770 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
2f780 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
2f790 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
2f7a0 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
2f7b0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
2f7c0 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
2f7d0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
2f7e0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2f7f0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2f800 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
2f810 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
2f820 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2f830 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
2f840 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2f850 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  e;.  int res;.  
2f860 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
2f870 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  ;..  res = 0;.  
2f880 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2f890 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2f8a0 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
2f8b0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
2f8c0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
2f8d0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2f8e0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2f8f0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2f900 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2f910 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2f920 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2f930 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
2f940 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
2f950 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
2f960 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
2f970 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
2f980 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
2f990 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
2f9a0 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
2f9b0 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
2f9c0 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
2f9d0 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
2f9e0 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
2f9f0 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
2fa00 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
2fa10 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
2fa20 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
2fa30 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
2fa40 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
2fa50 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
2fa60 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
2fa70 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
2fa80 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
2fa90 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
2faa0 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e  or..  */.  p->in
2fab0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a  VtabMethod = 1;.
2fac0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2fad0 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61  xNext(pCur->pVta
2fae0 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69  bCursor);.  p->i
2faf0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2fb00 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
2fb10 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
2fb20 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  tab);.  if( rc==
2fb30 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2fb40 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
2fb50 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
2fb60 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20  Cursor);.  }..  
2fb70 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2fb80 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2fb90 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2fba0 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2fbb0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67  >p2 - 1;.  }.  g
2fbc0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
2fbd0 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69  terrupt;.}.#endi
2fbe0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2fbf0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2fc00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fc10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2fc20 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
2fc30 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
2fc40 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2fc50 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2fc60 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2fc70 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2fc80 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2fc90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2fca0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
2fcb0 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
2fcc0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
2fcd0 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
2fce0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
2fcf0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
2fd00 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
2fd10 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
2fd20 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
2fd30 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2fd40 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
2fd50 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
2fd60 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2fd70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
2fd80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2fd90 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
2fda0 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2fdb0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
2fdc0 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
2fdd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2fde0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2fdf0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2fe00 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29  (pOp->p1, pName)
2fe10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d  ;.  assert( pNam
2fe20 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  e->flags & MEM_S
2fe30 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  tr );.  testcase
2fe40 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
2fe50 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74  LITE_UTF8 );.  t
2fe60 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
2fe70 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
2fe80 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73  6BE );.  testcas
2fe90 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
2fea0 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
2feb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2fec0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2fed0 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  g(pName, SQLITE_
2fee0 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d  UTF8);.  if( rc=
2fef0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2ff00 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d    rc = pVtab->pM
2ff10 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70  odule->xRename(p
2ff20 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b  Vtab, pName->z);
2ff30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
2ff40 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2ff50 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65  pVtab);.    p->e
2ff60 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
2ff70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ff80 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2ff90 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ffa0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2ffb0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
2ffc0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2ffd0 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
2ffe0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2fff0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
30000 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
30010 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30020 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
30030 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
30040 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
30050 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
30060 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
30070 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
30080 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
30090 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
300a0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
300b0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
300c0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
300d0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
300e0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
300f0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
30100 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
30110 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
30120 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
30130 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
30140 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
30150 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
30160 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
30170 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
30180 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
30190 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
301a0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
301b0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
301c0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
301d0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
301e0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
301f0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
30200 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
30210 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
30220 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
30230 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
30240 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
30250 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30260 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
30270 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
30280 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
30290 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
302a0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
302b0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
302c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
302d0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
302e0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
302f0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
30300 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
30310 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
30320 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
30330 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
30340 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
30350 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
30360 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
30370 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
30380 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
30390 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
303a0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
303b0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
303c0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
303d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
303e0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
303f0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
30400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
30410 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
30420 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
30430 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
30440 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
30450 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
30460 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
30470 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
30480 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
30490 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
304a0 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
304b0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
304c0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
304d0 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
304e0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
304f0 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
30500 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
30510 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
30520 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ace.  );.  asser
30530 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
30540 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  0 );.  pVtab = p
30550 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
30560 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
30570 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
30580 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
30590 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
305a0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
305b0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
305c0 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
305d0 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
305e0 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20  date) ){.    u8 
305f0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
30600 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
30610 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  ict;.    apArg =
30620 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
30630 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
30640 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
30650 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
30660 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
30670 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
30680 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
30690 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
306a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
306b0 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
306c0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
306d0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
306e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
306f0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
30700 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
30710 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
30720 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
30730 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
30740 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
30750 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
30760 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71  Conflict;.    sq
30770 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
30780 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
30790 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
307a0 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
307b0 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
307c0 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
307d0 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
307e0 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
307f0 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
30800 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
30810 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a  tRowid = rowid;.
30820 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72      }.    if( (r
30830 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
30840 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
30850 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
30860 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
30870 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
30880 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
30890 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
308a0 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
308b0 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
308c0 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
308d0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
308e0 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
308f0 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
30900 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30910 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
30920 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
30930 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
30940 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30950 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
30960 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
30970 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
30980 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
30990 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
309a0 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
309b0 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
309c0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
309d0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
309e0 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
309f0 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
30a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
30a10 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
30a20 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
30a30 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
30a40 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
30a50 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
30a60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
30a70 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
30a80 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
30a90 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  AS./* Opcode: Ma
30aa0 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20  xPgcnt P1 P2 P3 
30ab0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  * *.**.** Try to
30ac0 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   set the maximum
30ad0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20   page count for 
30ae0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74  database P1 to t
30af0 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a  he value in P3..
30b00 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68  ** Do not let th
30b10 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
30b20 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20  ount fall below 
30b30 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65  the current page
30b40 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f   count and.** do
30b50 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
30b60 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
30b70 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d  nt value if P3==
30b80 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  0..**.** Store t
30b90 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
30ba0 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20  count after the 
30bb0 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74  change in regist
30bc0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
30bd0 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20  P_MaxPgcnt: {   
30be0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
30bf0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
30c00 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65   unsigned int ne
30c10 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70  wMax;.  Btree *p
30c20 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d  Bt;..  pBt = db-
30c30 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
30c40 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b  t;.  newMax = 0;
30c50 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
30c60 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73  {.    newMax = s
30c70 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
30c80 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66  age(pBt);.    if
30c90 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69  ( newMax < (unsi
30ca0 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e  gned)pOp->p3 ) n
30cb0 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65  ewMax = (unsigne
30cc0 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  d)pOp->p3;.  }. 
30cd0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
30ce0 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65  ite3BtreeMaxPage
30cf0 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61  Count(pBt, newMa
30d00 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  x);.  break;.}.#
30d10 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
30d20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
30d30 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  E./* Opcode: Tra
30d40 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  ce * * * P4 *.**
30d50 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
30d60 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
30d70 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
30d80 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
30d90 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
30da0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
30db0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
30dc0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
30dd0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  allback..*/.case
30de0 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63   OP_Trace: {.  c
30df0 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63  har *zTrace;.  c
30e00 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64  har *z;..  if( d
30e10 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20  b->xTrace.   && 
30e20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20  !p->doingRerun. 
30e30 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28    && (zTrace = (
30e40 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
30e50 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
30e60 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20  )!=0.  ){.    z 
30e70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  = sqlite3VdbeExp
30e80 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65  andSql(p, zTrace
30e90 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  );.    db->xTrac
30ea0 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
30eb0 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   z);.    sqlite3
30ec0 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
30ed0 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
30ee0 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  _USE_FCNTL_TRACE
30ef0 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  .  zTrace = (pOp
30f00 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
30f10 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20  .z : p->zSql);. 
30f20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20   if( zTrace ){. 
30f30 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
30f40 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
30f50 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
30f60 28 20 28 28 31 3c 3c 69 29 20 26 20 70 2d 3e 62  ( ((1<<i) & p->b
30f70 74 72 65 65 4d 61 73 6b 29 3d 3d 30 20 29 20 63  treeMask)==0 ) c
30f80 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
30f90 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
30fa0 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
30fb0 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
30fc0 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
30fd0 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
30fe0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
30ff0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
31000 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
31010 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
31020 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
31030 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
31040 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
31050 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
31060 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
31070 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
31080 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
31090 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
310a0 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
310b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
310c0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62 72  TE_DEBUG */.  br
310d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
310e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
310f0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
31100 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
31110 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
31120 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
31130 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
31140 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
31150 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
31160 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
31170 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
31180 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
31190 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
311a0 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
311b0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
311c0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
311d0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
311e0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
311f0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
31200 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
31210 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
31220 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
31230 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
31240 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
31250 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
31260 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
31270 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
31280 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
31290 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
312a0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
312b0 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
312c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
312d0 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
312e0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
312f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31330 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
31340 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
31350 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
31360 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
31370 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
31380 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
31390 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
313a0 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
313b0 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
313c0 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
313d0 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
313e0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
313f0 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
31400 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
31410 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
31420 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
31430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31470 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
31480 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
31490 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
314a0 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
314b0 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
314c0 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
314d0 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
314e0 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
314f0 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
31500 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
31510 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
31520 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
31530 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
31540 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
31550 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
31560 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
31570 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
31580 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
31590 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
315a0 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
315b0 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
315c0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
315d0 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
315e0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
315f0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
31600 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
31610 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
31620 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
31630 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
31640 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
31650 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
31660 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
31670 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
31680 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
31690 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
316a0 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
316b0 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
316c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
316d0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
316e0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
316f0 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
31700 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
31710 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e   printf("rc=%d\n
31720 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
31730 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
31740 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52  (OPFLG_OUT2_PRER
31750 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54  ELEASE|OPFLG_OUT
31760 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
31770 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d  gisterTrace(pOp-
31780 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
31790 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
317a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
317b0 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
317c0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
317d0 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
317e0 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
317f0 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
31800 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
31810 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
31820 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
31830 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
31840 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
31850 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
31860 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
31870 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
31880 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
31890 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
318a0 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
318b0 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
318c0 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
318d0 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
318e0 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
318f0 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
31900 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
31910 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
31920 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
31930 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
31940 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
31950 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
31960 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
31980 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
31990 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
319a0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
319b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
319c0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
319d0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
319e0 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
319f0 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
31a00 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
31a10 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
31a20 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
31a30 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
31a40 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
31a50 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
31a60 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
31a70 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
31a80 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
31a90 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
31aa0 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
31ab0 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
31ac0 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
31ad0 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
31ae0 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
31af0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
31b00 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
31b10 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
31b20 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
31b30 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
31b40 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
31b50 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
31b60 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
31b70 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
31b80 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
31b90 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
31ba0 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
31bb0 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
31bc0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
31bd0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
31be0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
31bf0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
31c00 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
31c10 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
31c20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
31c30 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
31c40 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
31c50 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31c60 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
31c70 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
31c80 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
31c90 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
31ca0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
31cb0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
31cc0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
31cd0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
31ce0 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
31cf0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
31d00 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31d10 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
31d20 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
31d30 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
31d40 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
31d50 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
31d60 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
31d70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
31d80 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
31d90 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
31da0 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
31db0 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
31dc0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
31dd0 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
31de0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
31df0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31e00 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31e10 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31e20 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
31e30 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31e40 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
31e50 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
31e60 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
31e70 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
31e80 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
31e90 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
31ea0 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
31eb0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
31ec0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
31ed0 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
31ee0 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
31ef0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
31f00 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31f10 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31f20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31f30 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
31f40 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31f50 3b 0a 7d 0a                                      ;.}.