/ Hex Artifact Content
Login

Artifact c375ba0385f747e58d98686f5f4f0439c6297b35:


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 20 2b 20 31 3b 0a 20 20 70 31 20 3d 20 70  p3 + 1;.  p1 = p
8900: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
8910: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
8920: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
8930: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
8940: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
8950: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
8960: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a  n1 = &aMem[p1];.
8970: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
8980: 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d  2];.  while( n--
8990: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
89a0: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pOut<=&aMem[(p->
89b0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
89c0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
89d0: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
89e0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
89f0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
8a00: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
8a10: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
8a20: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
8a30: 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63  ut);.    zMalloc
8a40: 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63   = pOut->zMalloc
8a50: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c  ;.    pOut->zMal
8a60: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  loc = 0;.    sql
8a70: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
8a80: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
8a90: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
8aa0: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
8ab0: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
8ac0: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
8ad0: 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70  copyFrom<&aMem[p
8ae0: 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20  1+pOp->p3] ){.  
8af0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
8b00: 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70  From += p1 - pOp
8b10: 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ->p2;.    }.#end
8b20: 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61  if.    pIn1->zMa
8b30: 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a  lloc = zMalloc;.
8b40: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
8b50: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
8b60: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
8b70: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pOut++;.  }.  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 73  4.pFunc;.  ctx.s
b9b0: 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
b9c0: 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20  l;.  ctx.s.db = 
b9d0: 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c  db;.  ctx.s.xDel
b9e0: 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
b9f0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78  alloc = 0;.  ctx
ba00: 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78  .iOp = pc;.  ctx
ba10: 2e 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f  .pVdbe = p;..  /
ba20: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
ba30: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
ba40: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
ba50: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
ba60: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
ba70: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
ba80: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
ba90: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
baa0: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
bab0: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
bac0: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
bad0: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
bae0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
baf0: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
bb00: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
bb10: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
bb20: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
bb30: 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  x.fErrorOrAux = 
bb40: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
bb50: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
bb60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
bb70: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
bb80: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
bb90: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
bba0: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
bbb0: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
bbc0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
bbd0: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
bbe0: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
bbf0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
bc00: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
bc10: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
bc20: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
bc30: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
bc40: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
bc50: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
bc60: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
bc70: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
bc80: 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  d;..  if( db->ma
bc90: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
bca0: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
bcb0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
bcc0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
bcd0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
bce0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
bcf0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
bd00: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
bd10: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
bd20: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
bd30: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
bd40: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
bd50: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
bd60: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
bd70: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
bd80: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
bd90: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
bda0: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
bdb0: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
bdc0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
bdd0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
bde0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
bdf0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
be00: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
be10: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
be20: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
be30: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
be40: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
be50: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
be60: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
be70: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
be80: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20 20  &ctx.s));.      
be90: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
bea0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
beb0: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
bec0: 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d  Data(p, pc, pOp-
bed0: 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  >p1);.  }..  /* 
bee0: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
bef0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
bf00: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
bf10: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
bf20: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
bf30: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
bf40: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
bf50: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63  MemMove(pOut, &c
bf60: 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c  tx.s);.  if( sql
bf70: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
bf80: 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  g(pOut) ){.    g
bf90: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
bfa0: 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65  ..#if 0.  /* The
bfb0: 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e   app-defined fun
bfc0: 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73  ction has done s
bfd0: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73  omething that as
bfe0: 20 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a   caused this.  *
bff0: 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  * statement to e
c000: 78 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73  xpire.  (Perhaps
c010: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   the function ca
c020: 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65  lled sqlite3_exe
c030: 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20  c().  ** with a 
c040: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
c050: 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20  tement.).  */.  
c060: 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
c070: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
c080: 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45  RT;.#endif..  RE
c090: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c0a0: 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
c0b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c0c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
c0d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c0e0: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
c0f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c100: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  :  r[P3]=r[P1]&r
c110: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c120: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
c130: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c140: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c150: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c160: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c170: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c180: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c190: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c1a0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c1b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
c1c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c1d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c1e0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c1f0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c200: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
c210: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c220: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c230: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c240: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c250: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c260: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c270: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c280: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c290: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
c2a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c2b0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c2c0: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
c2d0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
c2e0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
c2f0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
c300: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
c310: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
c320: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
c330: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
c340: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
c350: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c360: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c370: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c380: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c390: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c3a0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
c3b0: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
c3c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c3d0: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
c3e0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
c3f0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
c400: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
c410: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
c420: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
c430: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
c440: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
c450: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c460: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
c470: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c480: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c490: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c4a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c4b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
c4c0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
c4d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c4e0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
c4f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
c500: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
c510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c520: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
c530: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c540: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
c550: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
c560: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c570: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
c580: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c590: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c5b0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
c5c0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c5d0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
c5e0: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
c5f0: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
c600: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c610: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
c620: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
c630: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
c640: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
c650: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
c660: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
c670: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
c680: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
c690: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
c6a0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
c6b0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
c6c0: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
c6d0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
c6e0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
c6f0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
c700: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
c710: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
c720: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
c730: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
c740: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
c750: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
c760: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
c770: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
c780: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
c790: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
c7a0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
c7b0: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
c7c0: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
c7d0: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
c7e0: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
c7f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
c800: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
c810: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
c820: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
c830: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
c840: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
c850: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
c860: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
c870: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
c880: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
c890: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
c8a0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
c8b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
c8c0: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
c8d0: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
c8e0: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
c8f0: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
c900: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
c910: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c920: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
c930: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
c940: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
c950: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
c960: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
c970: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
c980: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
c990: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
c9a0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
c9b0: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
c9c0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
c9d0: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
c9e0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
c9f0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
ca00: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ca10: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ca20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ca30: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
ca40: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
ca50: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d  ynopsis:  r[P1]=
ca60: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
ca70: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
ca80: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
ca90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
caa0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
cab0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
cac0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
cad0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
cae0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
caf0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
cb00: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
cb10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
cb20: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
cb30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cb40: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
cb50: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cb60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
cb70: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
cb80: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
cb90: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
cba0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cbb0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
cbc0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
cbd0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cbe0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
cbf0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
cc00: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
cc10: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
cc20: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
cc30: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
cc40: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
cc50: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
cc60: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
cc70: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
cc80: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
cc90: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
cca0: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
ccb0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
ccc0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
ccd0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
cce0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
ccf0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
cd00: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
cd10: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
cd20: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
cd30: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
cd40: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
cd50: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
cd60: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
cd70: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
cd80: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
cd90: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
cda0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
cdb0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
cdc0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
cdd0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
cde0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 63  else{.        pc
cdf0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
ce00: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
ce10: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
ce20: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
ce30: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
ce40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
ce50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ce60: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
ce70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
ce80: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
ce90: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
cea0: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
ceb0: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
cec0: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
ced0: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
cee0: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
cef0: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
cf00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
cf10: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
cf20: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
cf30: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
cf40: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
cf50: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
cf60: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
cf70: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
cf80: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
cf90: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
cfa0: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
cfb0: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
cfc0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
cfd0: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cff0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
d000: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d010: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
d020: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
d030: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d040: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
d050: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
d060: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
d070: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
d080: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54  T./* Opcode: ToT
d090: 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ext P1 * * * *.*
d0a0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d0b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d0c0: 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a   P1 to be text..
d0d0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d0e0: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
d0f0: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
d100: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ng using the.** 
d110: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72  equivalent of pr
d120: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
d130: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
d140: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
d150: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
d160: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
d170: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
d180: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d190: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d1a0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d1b0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d1c0: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d1f0: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
d200: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d210: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d220: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
d230: 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1);.  if( pIn1->
d240: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d250: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
d260: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
d270: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
d280: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
d290: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
d2a0: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
d2b0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
d2c0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
d2d0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
d2e0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
d2f0: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
d300: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d310: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
d320: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
d330: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
d340: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
d350: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
d360: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
d370: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
d380: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d390: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
d3a0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d3b0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d3c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d3d0: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
d3e0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
d3f0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
d400: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
d410: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
d420: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
d430: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
d440: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
d450: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
d460: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
d470: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d480: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d490: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d4a0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d4b0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d4c0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
d4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d4e0: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
d4f0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d500: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d510: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
d520: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
d530: 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e  reak;.  if( (pIn
d540: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
d550: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  lob)==0 ){.    a
d560: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d570: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
d580: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
d590: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d     assert( pIn1-
d5a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
d5b0: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
d5c0: 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53  iled );.    MemS
d5d0: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
d5e0: 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65   MEM_Blob);.  }e
d5f0: 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66  lse{.    pIn1->f
d600: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79  lags &= ~(MEM_Ty
d610: 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62  peMask&~MEM_Blob
d620: 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
d630: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
d640: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
d650: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d  /* Opcode: ToNum
d660: 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  eric P1 * * * *.
d670: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d680: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d690: 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72  r P1 to be numer
d6a0: 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a  ic (either an.**
d6b0: 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c   integer or a fl
d6c0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d  oating-point num
d6d0: 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20  ber.).** If the 
d6e0: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
d6f0: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
d700: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75  nvert it to an u
d710: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
d720: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
d730: 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73   or atof() and s
d740: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
d750: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a  h conversion .**
d760: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
d770: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d780: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d790: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d7a0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d7b0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d7c0: 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20  Numeric: {      
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d7e0: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d  ame as TK_TO_NUM
d7f0: 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  ERIC, in1 */.  p
d800: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d810: 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
d820: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
d830: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
d840: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d850: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
d860: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
d870: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d880: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d890: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d8a0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d8b0: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
d8c0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
d8d0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
d8e0: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
d8f0: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
d900: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d910: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d920: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d930: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d940: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d950: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d960: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
d970: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d980: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d990: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d9a0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d9b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d9c0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d9d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
d9e0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d9f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
da00: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
da10: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
da20: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
da30: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
da40: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
da50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
da60: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
da70: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
da80: 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.}..#if !define
da90: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
daa0: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
dab0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
dac0: 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f  TING_POINT)./* O
dad0: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
dae0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
daf0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
db00: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
db10: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
db20: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
db30: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
db40: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
db50: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
db60: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
db70: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
db80: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
db90: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
dba0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
dbb0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
dbc0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
dbd0: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
dbe0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
dbf0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
dc00: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dc10: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
dc20: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
dc30: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
dc40: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
dc70: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
dc80: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dc90: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
dca0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
dcb0: 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  n1);.  if( (pIn1
dcc0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dcd0: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
dce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
dcf0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
dd00: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
dd10: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
dd20: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
dd30: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
dd40: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
dd50: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
dd60: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
dd70: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
dd80: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b  sis: if r[P1]<r[
dd90: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
dda0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
ddb0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
ddc0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
ddd0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
dde0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
ddf0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
de00: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
de10: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
de20: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
de30: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
de40: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
de50: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
de60: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
de70: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
de80: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
de90: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
dea0: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
deb0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
dec0: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
ded0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
dee0: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
def0: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
df00: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
df10: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
df20: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
df30: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
df40: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
df50: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
df60: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
df70: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
df80: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
df90: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
dfa0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
dfb0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
dfc0: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
dfd0: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
dfe0: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
dff0: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
e000: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
e010: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
e020: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
e030: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
e040: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
e050: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
e060: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
e070: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
e080: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
e090: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
e0a0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
e0b0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
e0c0: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
e0d0: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
e0e0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
e0f0: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
e100: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
e110: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
e120: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
e130: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
e140: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
e150: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e160: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
e170: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
e180: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
e190: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
e1a0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
e1b0: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
e1c0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
e1d0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
e1e0: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
e1f0: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
e200: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
e210: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e220: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
e230: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
e240: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
e250: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
e260: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
e270: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
e280: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
e290: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e2a0: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
e2b0: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
e2c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e2d0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e2e0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e2f0: 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f  TE_STOREP2 bit o
e300: 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
e310: 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20  n do not jump.  
e320: 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72  Instead,.** stor
e330: 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75  e a boolean resu
e340: 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72  lt (either 0, or
e350: 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20   1, or NULL) in 
e360: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
e370: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e380: 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73  _NULLEQ bit is s
e390: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e  et in P5, then N
e3a0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
e3b0: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75  onsidered.** equ
e3c0: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
e3d0: 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74  r, provided that
e3e0: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76   they do not hav
e3f0: 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61  e their MEM_Clea
e400: 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a  red.** bit set..
e410: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
e420: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e430: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e440: 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]!=r[P3] got
e450: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
e460: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e470: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e480: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e490: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e4a0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
e4b0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
e4c0: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
e4d0: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
e4e0: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
e4f0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e500: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e510: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e520: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e530: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e540: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e550: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e560: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e570: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e580: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e590: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e5a0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e5b0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
e5c0: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
e5d0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e5e0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
e5f0: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
e600: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e610: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e620: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e630: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e640: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e650: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e660: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e670: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  /./* Opcode: Eq 
e680: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e690: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e6a0: 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]==r[P3] goto
e6b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e6c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e6d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e6e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e6f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e700: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e710: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e720: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
e730: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
e740: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e750: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e760: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e770: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e780: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e790: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e7a0: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e7b0: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e7c0: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e7d0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e7e0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e7f0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e800: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e810: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
e820: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e830: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e840: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
e850: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e860: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e870: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e880: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e890: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e8a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e8b0: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e8c0: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e8d0: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
e8e0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e8f0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d  psis: if r[P1]<=
e900: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e910: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e920: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e930: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e940: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e950: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e960: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e970: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
e980: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
e990: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e9a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e9b0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e9c0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e9d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e9e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
e9f0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ea00: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
ea10: 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]>r[P3] goto P2
ea20: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ea30: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ea40: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ea50: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ea60: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ea70: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
ea80: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
ea90: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
eaa0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
eab0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
eac0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
ead0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
eae0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
eaf0: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
eb00: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
eb10: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b  is: if r[P1]>=r[
eb20: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
eb30: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eb40: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
eb50: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
eb60: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eb70: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
eb80: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
eb90: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
eba0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ebb0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ebc0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ebd0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ebe0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ebf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ec00: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
ec10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ec20: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ec30: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ec40: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
ec50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ec60: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
ec70: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ec80: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
ec90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
eca0: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ecb0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ecc0: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ecd0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ece0: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ecf0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ed00: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ed10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ed20: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ed30: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
ed40: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
ed50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
ed60: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ed70: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  3 */.  int res; 
ed80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
ed90: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
eda0: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
edb0: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
edc0: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
edd0: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
ede0: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
edf0: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
ee00: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
ee10: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
ee20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
ee30: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
ee40: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
ee50: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
ee60: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
ee70: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
ee80: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ee90: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
eea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
eeb0: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
eec0: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
eed0: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
eee0: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
eef0: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
ef00: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
ef10: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
ef20: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
ef30: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
ef40: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
ef50: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
ef60: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
ef70: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
ef80: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
ef90: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
efa0: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
efb0: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
efc0: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
efd0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
efe0: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
eff0: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f000: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f010: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f020: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f030: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f040: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f050: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f060: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f070: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
f080: 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
f090: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
f0a0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
f0b0: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
f0c0: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
f0d0: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
f0e0: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
f0f0: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
f100: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
f110: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f120: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73  res = 1;  /* Res
f130: 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ults are not equ
f140: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
f150: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
f160: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
f170: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
f180: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
f190: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
f1a0: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
f1b0: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
f1c0: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
f1d0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f1e0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f1f0: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
f200: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
f210: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
f220: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f230: 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  LL ){.        pc
f240: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
f250: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
f260: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
f270: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
f280: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f290: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
f2a0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f2b0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f2c0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
f2d0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
f2e0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
f2f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f300: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
f310: 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61  /* Neither opera
f320: 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20  nd is NULL.  Do 
f330: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f  a comparison. */
f340: 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20  .    affinity = 
f350: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f360: 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69  _AFF_MASK;.    i
f370: 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20  f( affinity ){. 
f380: 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
f390: 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74  ty(pIn1, affinit
f3a0: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
f3b0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
f3c0: 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79  y(pIn3, affinity
f3d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
f3e0: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
f3f0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
f400: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20  o_mem;.    }..  
f410: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
f420: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
f430: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
f440: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70  ll==0 );.    Exp
f450: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
f460: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
f470: 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73  n3);.    res = s
f480: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f490: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
f4a0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
f4b0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
f4c0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
f4d0: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
f4e0: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
f4f0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f500: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
f510: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
f520: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
f530: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
f540: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
f550: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
f560: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
f570: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f580: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
f590: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
f5a0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
f5b0: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
f5c0: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
f5d0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
f5e0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
f5f0: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
f600: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f610: 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  2];.    memAbout
f620: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
f630: 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
f640: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
f650: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
f660: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
f670: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
f680: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
f690: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
f6a0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
f6b0: 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  2-1;.  }..  /* U
f6c0: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
f6d0: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
f6e0: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
f6f0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
f700: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
f710: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
f720: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
f730: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
f740: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
f750: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
f760: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
f770: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
f780: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
f790: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f7a0: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
f7b0: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
f7c0: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
f7d0: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
f7e0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
f7f0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
f800: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
f810: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
f820: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
f830: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
f840: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
f850: 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
f860: 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
f870: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
f880: 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
f890: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
f8a0: 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
f8b0: 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
f8c0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
f8d0: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
f8e0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
f8f0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
f900: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
f910: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
f920: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
f930: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
f940: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
f950: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f960: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
f970: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
f980: 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
f990: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
f9a0: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
f9b0: 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
f9c0: 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
f9d0: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
f9e0: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
f9f0: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
fa00: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
fa10: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
fa20: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
fa30: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
fa40: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
fa50: 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
fa60: 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
fa70: 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
fa80: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
fa90: 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
faa0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
fab0: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
fac0: 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
fad0: 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
fae0: 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
faf0: 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
fb00: 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
fb10: 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
fb20: 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
fb30: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
fb40: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
fb50: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
fb60: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
fb70: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
fb80: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
fb90: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
fba0: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
fbb0: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
fbc0: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
fbd0: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
fbe0: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
fbf0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
fc00: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
fc10: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
fc20: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
fc30: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
fc40: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
fc50: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
fc60: 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
fc70: 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
fc80: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
fc90: 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
fca0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
fcb0: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
fcc0: 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
fcd0: 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
fce0: 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
fcf0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
fd00: 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
fd10: 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
fd20: 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
fd30: 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
fd40: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
fd50: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
fd60: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69  rt order */..  i
fd70: 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
fd80: 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
fd90: 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b   ) aPermute = 0;
fda0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
fdb0: 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
fdc0: 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
fdd0: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
fde0: 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
fdf0: 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
fe00: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
fe10: 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
fe20: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
fe30: 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
fe40: 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
fe50: 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
fe60: 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
fe70: 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
fe80: 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
fe90: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
fea0: 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p1+mx<=(p->nMem
feb0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
fec0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
fed0: 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d  >0 && p2+mx<=(p-
fee0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
fef0: 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
ff00: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
ff10: 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
ff20: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
ff30: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ff40: 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
ff50: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
ff60: 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  r)+1 );.  }.#end
ff70: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
ff80: 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
ff90: 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
ffa0: 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
ffb0: 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
ffc0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
ffd0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
ffe0: 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
fff0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
10000 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
10010 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
10020 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
10030 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
10040 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10050 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
10060 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
10070 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
10080 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
10090 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
100a0 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
100b0 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
100c0 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
100d0 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
100e0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
100f0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
10100 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
10110 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
10120 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
10130 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
10140 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
10150 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
10160 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
10170 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
10180 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10190 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
101a0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
101b0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
101c0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
101d0 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
101e0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
101f0 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
10200 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
10210 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
10220 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
10230 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
10240 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
10250 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
10260 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
10270 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
10280 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10290 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
102a0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
102b0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
102c0 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
102d0 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
102e0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
102f0 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
10300 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
10310 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
10320 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10330 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
10340 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10350 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b  P3]=(r[P1] && r[
10360 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
10370 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
10380 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
10390 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
103a0 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
103b0 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
103c0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
103d0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
103e0 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
103f0 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
10400 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
10410 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
10420 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
10430 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
10440 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
10450 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
10460 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
10470 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
10480 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10490 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b  P3]=(r[P1] || r[
104a0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
104b0 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
104c0 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
104d0 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
104e0 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
104f0 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
10500 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
10510 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
10520 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
10530 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
10540 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
10550 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
10560 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10570 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10580 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
10590 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
105a0 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
105b0 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
105c0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
105d0 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
105e0 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
105f0 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
10600 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10610 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
10620 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
10630 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74  t v1;    /* Left
10640 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41   operand:  0==FA
10650 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
10660 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
10670 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20   */.  int v2;   
10680 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e   /* Right operan
10690 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  d: 0==FALSE, 1==
106a0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
106b0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70   or NULL */..  p
106c0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
106d0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
106e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
106f0 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
10700 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
10710 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
10720 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
10730 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26  ;.  }.  pIn2 = &
10740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10750 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
10760 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10770 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
10780 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
10790 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
107a0 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
107b0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
107c0 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
107d0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
107e0 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
107f0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
10800 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
10810 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
10820 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
10830 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
10840 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
10850 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
10860 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
10870 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
10880 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
10890 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
108a0 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
108b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
108c0 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
108d0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
108e0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
108f0 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
10900 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
10910 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
10920 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
10930 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
10940 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10950 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
10960 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10970 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  2]= !r[P1].**.**
10980 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
10990 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
109a0 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
109b0 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
109c0 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
109d0 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
109e0 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
109f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10a00 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
10a10 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
10a20 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
10a30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
10a40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
10a50 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
10a60 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
10a70 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10a80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
10a90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10aa0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10ab0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10ac0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
10ad0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
10ae0 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10af0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10b00 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73  etInt64(pOut, !s
10b10 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10b20 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
10b30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10b40 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
10b50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
10b60 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
10b70 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
10b80 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
10b90 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
10ba0 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
10bb0 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
10bc0 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
10bd0 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
10be0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10bf0 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
10c00 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
10c10 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
10c20 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
10c30 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10c40 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
10c50 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
10c60 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10c70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
10c80 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10c90 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
10ca0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10cb0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
10cc0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
10cd0 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10ce0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10cf0 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e  SetInt64(pOut, ~
10d00 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10d10 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
10d20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10d30 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
10d40 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
10d50 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66  eck if OP_Once f
10d60 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e 20 49  lag P1 is set. I
10d70 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
10d80 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
10d90 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20  herwise,.** set 
10da0 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
10db0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
10dc0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
10dd0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e  n..*/.case OP_On
10de0 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
10df0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
10e00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70  ssert( pOp->p1<p
10e10 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20  ->nOnceFlag );. 
10e20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61   if( p->aOnceFla
10e30 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20  g[pOp->p1] ){.  
10e40 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
10e50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
10e60 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
10e70 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  >p1] = 1;.  }.  
10e80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10e90 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
10ea0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10eb0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10ec0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10ed0 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
10ee0 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
10ef0 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
10f00 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
10f10 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
10f20 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
10f30 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
10f40 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
10f50 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
10f60 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
10f70 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
10f80 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
10f90 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
10fa0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10fb0 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
10fc0 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
10fd0 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20  red false if it 
10fe0 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
10ff0 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
11000 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
11010 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
11020 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
11030 66 20 50 33 20 69 73 20 7a 65 72 6f 2e 0a 2a 2f  f P3 is zero..*/
11040 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11060 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
11070 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
11080 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
11090 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
110a0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
110b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
110c0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
110d0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
110e0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
110f0 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
11100 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
11110 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
11120 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11130 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
11140 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
11150 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
11160 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
11170 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
11180 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
11190 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
111a0 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
111b0 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
111c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
111d0 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
111e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
111f0 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
11200 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
11210 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11220 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11230 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11240 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
11250 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
11260 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11270 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
11280 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11290 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
112a0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
112b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
112c0 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )!=0 ){.    pc =
112d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
112e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
112f0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
11300 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11310 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
11320 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]!=NULL goto P2
11330 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11340 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11350 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11360 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
11370 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
11380 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
11390 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
113a0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
113b0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
113c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
113d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
113e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
113f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11400 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11420 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
11430 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
11440 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  is:  r[P3]=PX.**
11450 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
11460 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
11470 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
11480 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
11490 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
114a0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
114b0 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
114c0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
114d0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
114e0 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
114f0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
11500 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
11510 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
11520 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
11530 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
11540 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
11550 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
11560 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
11570 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
11580 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
11590 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
115a0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
115b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
115c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
115d0 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
115e0 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
115f0 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
11600 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
11610 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
11620 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
11630 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
11640 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
11650 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
11660 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
11670 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
11680 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
11690 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
116a0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
116b0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
116c0 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
116d0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
116e0 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
116f0 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
11700 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
11710 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
11720 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
11730 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
11740 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
11750 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
11760 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
11770 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
11780 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
11790 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
117a0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
117b0 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
117c0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  when.** the resu
117d0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
117e0 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
117f0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
11800 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
11810 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
11820 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
11830 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
11840 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
11850 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
11860 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
11870 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
11880 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
11890 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
118a0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
118b0 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34  _Column: {.  i64
118c0 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20   payloadSize64; 
118d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
118e0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
118f0 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
11900 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75           /* colu
11910 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74  mn number to ret
11920 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43  rieve */.  VdbeC
11930 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
11940 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
11950 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
11960 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
11970 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
11980 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20    u32 *aType;   
11990 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d       /* aType[i]
119a0 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72   holds the numer
119b0 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69  ic type of the i
119c0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
119d0 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
119e0 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
119f0 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
11a00 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
11a10 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
11a20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
11a30 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
11a40 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
11a50 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
11a60 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
11a70 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
11a80 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
11a90 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
11aa0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
11ab0 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
11ac0 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
11ad0 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
11ae0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
11af0 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
11b00 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11b10 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
11b20 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
11b30 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
11b40 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
11b50 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
11b60 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
11b70 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
11b80 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
11b90 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
11ba0 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
11bb0 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
11bc0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
11bd0 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
11be0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
11bf0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  he data */.  u32
11c00 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20   szField;       
11c10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11c20 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  es in the conten
11c30 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  t of a field */.
11c40 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20    int avail;    
11c50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11c60 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
11c70 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75  able data */.  u
11c80 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
11c90 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
11ca0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
11cb0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
11cc0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
11cd0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
11ce0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
11cf0 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ..  p2 = pOp->p2
11d00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
11d10 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
11d20 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
11d30 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
11d40 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11d50 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
11d60 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
11d70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
11d80 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
11d90 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
11da0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
11db0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
11dc0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
11dd0 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46  ssert( p2<pC->nF
11de0 69 65 6c 64 20 29 3b 0a 20 20 61 54 79 70 65 20  ield );.  aType 
11df0 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 61  = pC->aType;.  a
11e00 4f 66 66 73 65 74 20 3d 20 61 54 79 70 65 20 2b  Offset = aType +
11e10 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66   pC->nField;.#if
11e20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
11e30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
11e40 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
11e50 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a  bCursor==0 ); /*
11e60 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72   OP_Column never
11e70 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75   called on virtu
11e80 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  al table */.#end
11e90 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  if.  pCrsr = pC-
11ea0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
11eb0 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
11ec0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
11ed0 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72  eg>0 ); /* pCrsr
11ee0 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54   NULL on PseudoT
11ef0 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72  ables */.  asser
11f00 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
11f10 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20  C->nullRow );   
11f20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75         /* pC->nu
11f30 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54  llRow on PseudoT
11f40 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
11f50 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
11f60 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
11f70 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
11f80 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
11f90 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
11fa0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
11fb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
11fc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
11fd0 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
11fe0 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 7c  s!=p->cacheCtr |
11ff0 7c 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41  | (pOp->p5&OPFLA
12000 47 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d 30  G_CLEARCACHE)!=0
12010 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
12020 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
12030 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
12040 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12050 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
12060 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  Reg>0 );.       
12070 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
12080 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12090 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ];.        if( p
120a0 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 29  C->multiPseudo )
120b0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
120c0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
120d0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 52 65  wCopy(pDest, pRe
120e0 67 2b 70 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  g+p2, MEM_Ephem)
120f0 3b 0a 20 20 20 20 20 20 20 20 20 20 44 65 65 70  ;.          Deep
12100 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65 73 74  hemeralize(pDest
12110 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
12120 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
12130 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12140 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
12150 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
12160 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
12170 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12180 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
12190 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
121a0 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61   = pC->szRow = a
121b0 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  vail = pReg->n;.
121c0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
121d0 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
121e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
121f0 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
12200 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
12210 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67  Null);.        g
12220 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12230 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
12240 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
12250 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
12260 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
12270 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
12280 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
12290 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
122a0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
122b0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
122c0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
122d0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
122e0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a  payloadSize64);.
122f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12300 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12310 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
12320 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
12330 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
12340 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
12350 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c  te3BtreeParseCel
12360 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56  lPtr() uses getV
12370 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74  arint32() to ext
12380 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20  ract the.       
12390 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
123a0 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
123b0 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
123c0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
123d0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
123e0 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
123f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12400 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
12410 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
12420 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
12430 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20  ize64 );.       
12440 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
12450 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
12460 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12470 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
12480 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
12490 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
124a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
124b0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
124c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
124d0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
124e0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
124f0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
12500 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
12510 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53  r, &pC->payloadS
12520 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ize);.        as
12530 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
12540 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
12550 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
12560 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43  il */.        pC
12570 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
12580 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
12590 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
125a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
125b0 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
125c0 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
125d0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
125e0 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
125f0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12600 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
12610 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
12620 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
12630 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
12640 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
12650 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
12660 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
12670 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12680 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
12690 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
126a0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
126b0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
126c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
126d0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
126e0 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
126f0 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66  ;.    pC->iHdrOf
12700 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74  fset = getVarint
12710 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66  32(pC->aRow, off
12720 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  set);.    pC->nH
12730 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20  drParsed = 0;.  
12740 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f    aOffset[0] = o
12750 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61  ffset;.    if( a
12760 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
12770 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
12780 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
12790 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
127a0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
127b0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
127c0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
127d0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
127e0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
127f0 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
12800 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
12810 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
12820 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
12830 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
12840 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
12850 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
12860 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
12870 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
12880 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
12890 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
128a0 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
128b0 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
128c0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
128d0 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
128e0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
128f0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
12900 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
12910 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
12920 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
12930 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
12940 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
12950 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
12960 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
12970 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
12980 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
12990 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
129a0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
129b0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
129c0 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
129d0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
129e0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
129f0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
12a00 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
12a10 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
12a20 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
12a30 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
12a40 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
12a50 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
12a60 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
12a70 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
12a80 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
12a90 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
12aa0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
12ab0 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
12ac0 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
12ad0 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
12ae0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
12af0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
12b00 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12b10 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
12b20 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
12b30 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69   at least the fi
12b40 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73  rst p2+1 entries
12b50 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68   of the header h
12b60 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61  ave been.  ** pa
12b70 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69  rsed and valid i
12b80 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e  nformation is in
12b90 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 61   aOffset[] and a
12ba0 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
12bb0 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
12bc0 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
12bd0 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
12be0 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
12bf0 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
12c00 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
12c10 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
12c20 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
12c30 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
12c40 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
12c50 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
12c60 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
12c70 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
12c80 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
12c90 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
12ca0 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
12cb0 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
12cc0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
12cd0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
12ce0 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
12cf0 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
12d00 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
12d10 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
12d20 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12d30 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
12d40 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20  Offset[0], .    
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
12d80 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
12d90 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
12da0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
12db0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
12dc0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
12dd0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
12de0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
12df0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12e00 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
12e10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
12e20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61 54     /* Fill in aT
12e30 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
12e40 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
12e50 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
12e60 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ield. */.      i
12e70 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65   = pC->nHdrParse
12e80 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20  d;.      offset 
12e90 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20  = aOffset[i];.  
12ea0 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61      zHdr = zData
12eb0 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65   + pC->iHdrOffse
12ec0 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72  t;.      zEndHdr
12ed0 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73   = zData + aOffs
12ee0 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73  et[0];.      ass
12ef0 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ert( i<=p2 && zH
12f00 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
12f10 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
12f20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30  if( zHdr[0]<0x80
12f30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20   ){.          t 
12f40 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20  = zHdr[0];.     
12f50 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
12f60 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12f70 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
12f80 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
12f90 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
12fa0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54      }.        aT
12fb0 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20  ype[i] = t;.    
12fc0 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
12fd0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12fe0 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
12ff0 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
13000 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
13010 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
13020 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
13030 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
13040 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48   */.          zH
13050 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dr = &zEndHdr[1]
13060 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
13070 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
13080 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
13090 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
130a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
130b0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66  ++;.        aOff
130c0 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
130d0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
130e0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
130f0 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43  dHdr );.      pC
13100 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
13110 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
13120 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
13130 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
13140 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13150 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
13160 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
13170 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
13180 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20       sMem.flags 
13190 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
131a0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
131b0 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20  If we have read 
131c0 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61  more header data
131d0 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69   than was contai
131e0 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65  ned in the heade
131f0 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 69  r,.      ** or i
13200 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
13210 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
13220 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74  ars to be past t
13230 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20  he end of the.  
13240 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
13250 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
13260 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
13270 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
13280 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
13290 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
132a0 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
132b0 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
132c0 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
132d0 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a 20  aling .      ** 
132e0 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64  with a corrupt d
132f0 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
13300 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
13310 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20 20  r > zEndHdr).   
13320 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e      || (offset >
13330 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13340 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48 64  ).       || (zHd
13350 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66  r==zEndHdr && of
13360 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61  fset!=pC->payloa
13370 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
13380 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
13390 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
133a0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
133b0 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
133c0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
133d0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
133e0 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e  rying to extra n
133f0 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
13400 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
13410 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
13420 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
13430 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
13440 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
13450 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
13460 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
13470 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
13480 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
13490 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
134a0 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
134b0 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
134c0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
134d0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
134e0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
134f0 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
13500 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
13510 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
13520 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
13530 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
13540 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  se{.        MemS
13550 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
13560 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
13570 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
13580 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
13590 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45     }.  }..  /* E
135a0 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
135b0 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
135c0 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
135d0 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
135e0 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
135f0 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
13600 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
13610 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d 20  , and aType[p2] 
13620 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
13630 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
13640 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
13650 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
13660 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
13670 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52  );.  if( pC->szR
13680 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31  ow>=aOffset[p2+1
13690 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ] ){.    /* This
136a0 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63   is the common c
136b0 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65  ase where the de
136c0 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69  sired content fi
136d0 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e  ts on the origin
136e0 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d  al.    ** page -
136f0 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65   where the conte
13700 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20  nt is not on an 
13710 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f  overflow page */
13720 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65  .    VdbeMemRele
13730 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ase(pDest);.    
13740 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13750 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f  lGet(pC->aRow+aO
13760 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79 70 65  ffset[p2], aType
13770 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
13780 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
13790 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
137a0 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
137b0 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
137c0 6f 77 20 70 61 67 65 73 20 2a 2f 09 0a 20 20 20  ow pages */..   
137d0 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a   t = aType[p2];.
137e0 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70      if( ((pOp->p
137f0 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47  5 & (OPFLAG_LENG
13800 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50  THARG|OPFLAG_TYP
13810 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20  EOFARG))!=0.    
13820 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32        && ((t>=12
13830 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c   && (t&1)==0) ||
13840 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
13850 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30  AG_TYPEOFARG)!=0
13860 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20  )).     || (len 
13870 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13880 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d  ialTypeLen(t))==
13890 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f  0.    ){.      /
138a0 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72  * Content is irr
138b0 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65 20  elevant for the 
138c0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
138d0 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20 20  n and for.      
138e0 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  ** the length(X)
138f0 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
13900 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77 65  s a blob.  So we
13910 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
13920 73 65 0a 20 20 20 20 20 20 2a 2a 20 62 6f 67 75  se.      ** bogu
13930 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
13940 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63 6f   than reading co
13950 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
13960 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20    NULL works.   
13970 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61     ** for text a
13980 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74  nd blob and what
13990 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70  ever is in the p
139a0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72  ayloadSize64 var
139b0 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77  iable.      ** w
139c0 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
139d0 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 20 43  rything else.  C
139e0 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73 6f 20 69  ontent is also i
139f0 72 72 65 6c 65 76 61 6e 74 20 69 66 0a 20 20 20  rrelevant if.   
13a00 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e     ** the conten
13a10 74 20 6c 65 6e 67 74 68 20 69 73 20 30 2e 20 2a  t length is 0. *
13a20 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
13a30 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70 61  t<=13 ? (u8*)&pa
13a40 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 3b  yloadSize64 : 0;
13a50 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a 4d 61 6c  .      sMem.zMal
13a60 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  loc = 0;.    }el
13a70 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74  se{.      memset
13a80 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
13a90 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
13aa0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
13ab0 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29  ve(&sMem, pDest)
13ac0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
13ad0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13ae0 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66  tree(pCrsr, aOff
13af0 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70  set[p2], len, !p
13b00 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20  C->isTable,.    
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
13b30 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
13b40 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13b50 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
13b60 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13b70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
13b80 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
13b90 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  z;.    }.    sql
13ba0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
13bb0 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73  t(zData, t, pDes
13bc0 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  t);.    /* If we
13bd0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13be0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
13bf0 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
13c00 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71 6c  n the.    ** sql
13c10 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13c20 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
13c30 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
13c40 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
13c50 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61  .    ** dynamica
13c60 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
13c70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ace over to the 
13c80 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e  pDest structure.
13c90 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 70 72 65  .    ** This pre
13ca0 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
13cb0 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  opy. */.    if( 
13cc0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
13cd0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 4d        assert( sM
13ce0 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
13cf0 6f 63 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  oc );.      asse
13d00 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13d10 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  gs & MEM_Dyn) );
13d20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
13d30 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
13d40 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
13d50 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d  r)) || pDest->z=
13d60 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 20  =sMem.z );.     
13d70 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
13d80 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
13d90 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20  _Static);.      
13da0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
13db0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 20 20  MEM_Term;.      
13dc0 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
13dd0 7a 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  z;.      pDest->
13de0 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a  zMalloc = sMem.z
13df0 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d 0a 20 20  Malloc;.    }.  
13e00 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d  }.  pDest->enc =
13e10 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63   encoding;..op_c
13e20 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 72 63 20  olumn_out:.  rc 
13e30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
13e40 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
13e50 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  est);.op_column_
13e60 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f  error:.  UPDATE_
13e70 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
13e80 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
13e90 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
13ea0 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
13eb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
13ec0 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
13ed0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
13ee0 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50   affinity(r[P1@P
13ef0 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  2]).**.** Apply 
13f00 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
13f10 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
13f20 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
13f30 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
13f40 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
13f50 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
13f60 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
13f70 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
13f80 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
13f90 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
13fa0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
13fb0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
13fc0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
13fd0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
13fe0 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
13ff0 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
14000 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
14010 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
14020 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
14030 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
14040 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
14050 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
14060 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
14070 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
14080 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14090 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
140a0 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
140b0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
140c0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
140d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
140e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
140f0 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
14100 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
14110 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
14120 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
14130 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
14140 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
14150 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
14160 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
14170 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
14180 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
14190 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
141a0 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
141b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
141c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
141d0 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
141e0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
141f0 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
14200 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
14210 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
14220 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
14230 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
14240 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
14250 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
14260 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
14270 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
14280 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
14290 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
142a0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
142b0 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
142c0 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
142d0 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
142e0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
142f0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
14300 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
14310 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
14320 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
14330 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14340 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
14350 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
14360 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
14370 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
14380 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
14390 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
143a0 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
143b0 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
143c0 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
143d0 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
143e0 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
143f0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
14400 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
14410 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
14420 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
14430 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
14440 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
14450 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
14460 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
14470 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
14480 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
14490 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
144a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
144b0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
144c0 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
144d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
144e0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
144f0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
14500 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
14510 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14520 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
14530 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
14540 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
14550 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
14560 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
14570 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14580 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
14590 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
145a0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
145b0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
145c0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
145d0 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
145e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
145f0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
14600 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
14610 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
14620 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
14630 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
14640 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
14650 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
14660 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
14670 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
14680 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
14690 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
146a0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
146b0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
146c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
146d0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
146e0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
146f0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
14700 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
14710 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
14720 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14730 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
14740 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
14750 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
14760 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
14770 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
14780 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
14790 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
147a0 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  rd[] */.  int le
147b0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
147c0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
147d0 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
147e0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
147f0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
14800 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
14810 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
14820 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
14830 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
14840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14880 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
14890 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
148a0 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
148b0 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
148c0 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
148d0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
148e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14900 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14910 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14920 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
14930 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
14940 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
14950 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
14960 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
14970 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
14980 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
14990 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
149a0 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
149b0 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
149c0 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
149d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
149e0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
149f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14a00 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
14a10 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
14a20 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
14a30 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
14a40 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
14a50 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
14a60 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14a70 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
14a80 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
14a90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14aa0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
14ab0 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
14ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14ad0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14ae0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
14af0 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20    nZero = 0;    
14b00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14b10 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
14b20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14b30 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c  ecord */.  nFiel
14b40 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  d = pOp->p1;.  z
14b50 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
14b60 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
14b70 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d  nField>0 && pOp-
14b80 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
14b90 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65  +nField<=(p->nMe
14ba0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
14bb0 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
14bc0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
14bd0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
14be0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
14bf0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
14c00 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
14c10 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
14c20 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
14c30 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
14c40 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
14c50 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
14c60 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
14c70 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
14c80 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
14c90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
14ca0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
14cb0 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
14cc0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
14cd0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
14ce0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
14cf0 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
14d00 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
14d10 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
14d20 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
14d30 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
14d40 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
14d50 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
14d60 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
14d70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
14d80 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ec) );.    if( z
14d90 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14da0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
14db0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
14dc0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
14dd0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
14de0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
14df0 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
14e00 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
14e10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14e20 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
14e30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
14e40 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14e50 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14e60 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
14e70 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
14e80 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14e90 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
14ea0 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
14eb0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
14ec0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
14ed0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
14ee0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
14ef0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
14f00 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
14f10 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
14f20 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
14f30 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
14f40 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
14f50 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
14f60 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
14f70 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
14f80 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
14f90 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
14fa0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
14fb0 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
14fc0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
14fd0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14fe0 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
14ff0 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
15000 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
15010 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
15020 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
15030 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
15040 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
15050 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15060 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
15070 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
15080 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
15090 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
150a0 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
150b0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
150c0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
150d0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
150e0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
150f0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
15100 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
15110 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
15120 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
15130 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
15140 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
15150 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
15160 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
15170 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
15180 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
15190 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
151a0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
151b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
151c0 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
151d0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
151e0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
151f0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
15200 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
15210 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
15220 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
15230 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
15240 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
15250 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
15260 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
15270 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
15280 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
15290 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
152a0 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
152b0 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
152c0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
152d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
152e0 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
152f0 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
15300 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
15310 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
15320 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
15330 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
15340 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
15350 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
15360 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
15370 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
15380 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
15390 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
153a0 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
153b0 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
153c0 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
153d0 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
153e0 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
153f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
15400 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
15410 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
15420 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
15430 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
15440 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
15450 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45   = MEM_Blob | ME
15460 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78  M_Dyn;.  pOut->x
15470 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  Del = 0;.  if( n
15480 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
15490 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
154a0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
154b0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
154c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
154d0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
154e0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
154f0 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
15500 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
15510 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
15520 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
15530 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
15540 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
15550 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15560 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
15570 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
15580 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
15590 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
155a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
155b0 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
155c0 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
155d0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
155e0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
155f0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
15600 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
15610 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
15620 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
15630 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
15640 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
15650 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
15660 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
15670 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
15680 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
15690 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
156a0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
156b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
156c0 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
156d0 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75   &nEntry);.  pOu
156e0 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
156f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
15700 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
15710 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
15720 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
15730 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
15740 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
15750 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
15760 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
15770 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
15780 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
15790 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
157a0 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
157b0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
157c0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
157d0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
157e0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
157f0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
15800 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
15810 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
15820 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
15850 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
15860 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
15890 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
158a0 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
158b0 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
158c0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
158d0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
158e0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
158f0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
15900 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
15910 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
15920 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
15930 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
15940 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
15950 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
15960 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
15970 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
15980 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
15990 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
159a0 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
159b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
159c0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
159d0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
159e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
159f0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
15a00 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
15a10 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
15a20 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
15a30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
15a40 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
15a50 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
15a60 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
15a70 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
15a80 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
15a90 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
15aa0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
15ab0 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
15ac0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
15ad0 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
15ae0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
15af0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
15b00 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
15b10 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
15b20 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
15b30 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
15b40 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
15b50 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
15b60 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
15b70 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
15b80 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15b90 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15ba0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
15bb0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
15bc0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
15bd0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
15be0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
15bf0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15c00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15c10 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
15c20 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
15c30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
15c40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
15c50 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
15c60 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
15c70 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
15c80 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
15c90 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
15ca0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
15cb0 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
15cc0 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
15cd0 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
15ce0 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
15cf0 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
15d00 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15d10 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
15d20 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
15d30 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
15d40 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
15d50 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
15d60 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
15d70 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
15d80 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
15d90 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
15da0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15db0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
15dc0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
15dd0 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
15e00 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
15e10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15e20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15e30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15e40 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
15e50 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
15e60 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
15e70 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
15e80 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
15e90 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
15ea0 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
15eb0 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
15ec0 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
15ed0 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
15ee0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
15ef0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
15f00 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
15f10 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
15f20 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
15f30 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
15f40 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
15f50 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
15f60 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
15f70 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
15f80 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
15f90 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
15fa0 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
15fb0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
15fc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15fd0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
15fe0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
15ff0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
16000 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16010 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
16020 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
16030 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  }.    .        /
16040 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
16050 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
16060 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16070 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
16080 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
16090 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
160a0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
160b0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
160c0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
160d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
160e0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
160f0 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
16100 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16110 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16120 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
16130 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
16140 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
16150 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
16160 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
16170 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
16180 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
16190 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
161a0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
161b0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
161c0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
161d0 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
161e0 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
161f0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
16200 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
16210 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
16220 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
16230 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
16240 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16250 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
16260 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
16270 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
16280 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
16290 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
162a0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
162b0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
162c0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
162d0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
162e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
162f0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
16300 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16310 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
16320 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16330 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
16340 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
16350 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16360 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
16370 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
16380 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
16390 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
163a0 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
163b0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
163c0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
163d0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65        "cannot re
163e0 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
163f0 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
16400 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20   in progress".  
16410 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
16420 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16430 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
16440 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
16450 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
16460 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
16470 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
16480 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
16490 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
164a0 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
164b0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
164c0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
164d0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
164e0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
164f0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
16500 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
16510 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
16520 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16530 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
16540 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
16550 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
16560 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
16570 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
16580 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
16590 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
165a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
165b0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
165c0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
165d0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
165e0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
165f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16600 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
16610 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
16620 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
16630 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
16640 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
16650 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
16660 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16670 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16680 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
16690 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
166a0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
166b0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
166c0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
166d0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
166e0 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
166f0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
16700 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
16710 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
16720 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16730 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
16740 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
16750 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
16760 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
16770 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
16780 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
16790 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54  b[ii].pBt, SQLIT
167a0 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20  E_ABORT);.      
167b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
167c0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
167d0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
167e0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
167f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
16800 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
16810 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
16820 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16830 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16840 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16850 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
16860 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16870 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16880 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
16890 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
168a0 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d  ROLLBACK && (db-
168b0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e  >flags&SQLITE_In
168c0 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20  ternChanges)!=0 
168d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
168e0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
168f0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
16900 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
16910 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
16920 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
16930 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
16940 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66  ->flags = (db->f
16950 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e  lags | SQLITE_In
16960 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20  ternChanges);.  
16970 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
16980 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
16990 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
169a0 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
169b0 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
169c0 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
169d0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
169e0 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
169f0 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
16a00 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
16a10 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
16a20 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
16a30 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
16a40 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
16a50 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16a60 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16a70 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
16a80 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
16a90 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
16aa0 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
16ab0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
16ac0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
16ad0 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
16ae0 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
16af0 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
16b00 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16b10 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
16b20 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
16b30 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
16b40 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
16b50 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
16b60 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
16b70 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
16b80 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
16b90 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
16ba0 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
16bb0 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
16bc0 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
16bd0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
16be0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16bf0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16c00 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
16c10 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
16c20 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
16c30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
16c40 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16c50 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
16c60 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
16c70 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16c80 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
16c90 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
16ca0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
16cb0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
16cc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16cd0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
16ce0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
16cf0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
16d00 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
16d10 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
16d20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
16d30 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
16d40 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
16d50 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
16d60 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
16d70 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
16d80 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61  oint(db, p1, iSa
16d90 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
16da0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16db0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16dc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16dd0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
16de0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
16df0 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
16e00 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mit P1 P2 * * *.
16e10 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61  **.** Set the da
16e20 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d  tabase auto-comm
16e30 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31  it flag to P1 (1
16e40 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73   or 0). If P2 is
16e50 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62   true, roll.** b
16e60 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c  ack any currentl
16e70 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74  y active btree t
16e80 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20  ransactions. If 
16e90 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
16ea0 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61  tive.** VMs (apa
16eb0 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65  rt from this one
16ec0 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41  ), then a ROLLBA
16ed0 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d  CK fails.  A COM
16ee0 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20  MIT fails if.** 
16ef0 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
16f00 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20   writing VMs or 
16f10 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20  active VMs that 
16f20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65  use shared cache
16f30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
16f40 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20  truction causes 
16f50 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a  the VM to halt..
16f60 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43  */.case OP_AutoC
16f70 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64  ommit: {.  int d
16f80 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16f90 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63  ;.  int iRollbac
16fa0 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41  k;.  int turnOnA
16fb0 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74  C;..  desiredAut
16fc0 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
16fd0 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d  1;.  iRollback =
16fe0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e   pOp->p2;.  turn
16ff0 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75  OnAC = desiredAu
17000 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d  toCommit && !db-
17010 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61  >autoCommit;.  a
17020 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17030 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64  toCommit==1 || d
17040 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17050 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
17060 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17070 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61  it==1 || iRollba
17080 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ck==0 );.  asser
17090 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  t( db->nVdbeActi
170a0 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  ve>0 );  /* At l
170b0 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
170c0 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20   is active */.  
170d0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
170e0 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20  ader );..#if 0. 
170f0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
17100 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
17110 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20  ->nVdbeActive>1 
17120 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
17130 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
17140 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
17150 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
17160 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
17170 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
17180 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
17190 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
171a0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
171b0 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
171c0 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
171d0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
171e0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
171f0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17200 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17210 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
17220 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
17230 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17240 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17250 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17260 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17270 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20   }else.#endif.  
17280 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
17290 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62  !iRollback && db
172a0 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
172b0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
172c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
172d0 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
172e0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
172f0 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
17300 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
17310 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
17320 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17330 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17340 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17350 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17360 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17370 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
17380 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
17390 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
173a0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
173b0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
173c0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
173d0 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
173e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
173f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
17400 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
17410 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
17420 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17430 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
17440 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
17450 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
17460 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
17470 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17480 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
17490 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
174a0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
174b0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
174c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
174d0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
174e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
174f0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17500 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
17510 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
17520 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
17530 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
17540 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
17550 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
17560 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17570 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
17580 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
17590 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
175a0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
175b0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
175c0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
175d0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
175e0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
175f0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
17600 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
17610 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
17620 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
17630 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
17640 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
17650 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
17660 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
17670 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
17680 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
17690 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
176a0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
176b0 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
176c0 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
176d0 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
176e0 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
176f0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
17700 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
17710 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
17720 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
17730 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
17740 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
17770 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
17780 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
17790 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
177a0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
177b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
177c0 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
177d0 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20  ction P1 P2 * * 
177e0 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  *.**.** Begin a 
177f0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
17800 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e  e transaction en
17810 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74  ds when a Commit
17820 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   or Rollback.** 
17830 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e  opcode is encoun
17840 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e  tered.  Dependin
17850 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46  g on the ON CONF
17860 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68  LICT setting, th
17870 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  e.** transaction
17880 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72   might also be r
17890 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e  olled back if an
178a0 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
178b0 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  tered..**.** P1 
178c0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
178d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
178e0 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
178f0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
17900 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
17910 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
17920 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
17930 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
17940 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
17950 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
17960 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
17970 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
17980 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
17990 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
179a0 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
179b0 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
179c0 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
179d0 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45  s started.  A RE
179e0 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a  SERVED lock is.*
179f0 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  * obtained on th
17a00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17a10 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  when a write-tra
17a20 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
17a30 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65  ted.  No.** othe
17a40 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74  r process can st
17a50 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74  art another writ
17a60 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  e transaction wh
17a70 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63  ile this transac
17a80 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72  tion is.** under
17a90 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61  way.  Starting a
17aa0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
17ab0 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20  on also creates 
17ac0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
17ad0 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74  al. A.** write t
17ae0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
17af0 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
17b00 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61  e any changes ca
17b10 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65  n be made to the
17b20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49  .** database.  I
17b30 66 20 50 32 20 69 73 20 67 72 65 61 74 65 72 20  f P2 is greater 
17b40 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
17b50 20 32 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55   2 then an EXCLU
17b60 53 49 56 45 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  SIVE lock is.** 
17b70 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 20 6f 6e  also obtained on
17b80 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a   the file..**.**
17b90 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
17ba0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
17bb0 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
17bc0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
17bd0 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
17be0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
17bf0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
17c00 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
17c10 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
17c20 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
17c30 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
17c40 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
17c50 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
17c60 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
17c70 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
17c80 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
17c90 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
17ca0 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
17cb0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
17cc0 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
17cd0 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
17ce0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
17cf0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
17d00 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
17d10 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
17d20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
17d30 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
17d40 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
17d50 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
17d60 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
17d70 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
17d80 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
17d90 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
17da0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
17db0 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
17dc0 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
17dd0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17de0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
17df0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
17e00 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
17e10 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
17e20 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
17e30 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
17e40 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
17e50 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
17e60 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
17e70 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
17e80 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
17e90 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
17ea0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
17eb0 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
17ec0 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
17ed0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
17ee0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
17ef0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
17f00 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
17f10 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
17f20 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
17f30 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
17f40 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
17f50 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
17f60 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
17f70 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
17f80 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
17f90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
17fa0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
17fb0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
17fc0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
17fd0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17fe0 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
17ff0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
18000 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
18010 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
18020 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
18030 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18040 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
18050 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18060 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
18070 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18080 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18090 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
180a0 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
180b0 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
180c0 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
180d0 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
180e0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
180f0 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
18100 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18110 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
18120 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
18130 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
18140 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
18150 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18160 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
18170 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
18180 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
18190 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
181a0 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
181b0 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
181c0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
181d0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
181e0 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
181f0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18200 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18210 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
18220 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
18230 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18240 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
18250 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
18260 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
18270 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
18280 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
18290 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
182a0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
182b0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
182c0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
182d0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
182e0 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
182f0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18300 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
18310 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
18320 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
18330 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
18340 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
18350 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
18360 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
18370 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18380 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
18390 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
183a0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
183b0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20  mmCons;.    }.  
183c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
183d0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
183e0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
183f0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
18400 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
18410 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
18420 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
18430 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
18440 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
18450 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
18460 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
18470 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
18480 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
18490 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
184a0 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
184b0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
184c0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
184d0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
184e0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
184f0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
18500 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
18510 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
18520 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
18530 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
18540 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
18550 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
18560 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
18570 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
18580 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
18590 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
185a0 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
185b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
185c0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
185d0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
185e0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
185f0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
18600 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
18610 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
18620 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
18630 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69  bIsReader );.  i
18640 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
18650 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
18660 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
18670 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
18680 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
18690 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
186a0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
186b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
186c0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
186d0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
186e0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
186f0 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d  Mask)1)<<iDb))!=
18700 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  0 );..  sqlite3B
18710 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
18720 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
18730 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
18740 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
18750 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
18760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18770 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
18780 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
18790 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
187a0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
187b0 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
187c0 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
187d0 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
187e0 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
187f0 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
18800 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
18810 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
18820 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
18830 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
18840 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
18850 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
18860 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
18870 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
18880 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
18890 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
188a0 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
188b0 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
188c0 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
188d0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
188e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
188f0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
18900 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
18910 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
18920 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
18930 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
18940 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
18950 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
18960 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
18970 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
18980 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
18990 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
189a0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
189b0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
189c0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
189d0 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
189e0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
189f0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
18a00 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
18a10 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
18a20 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
18a30 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
18a40 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
18a50 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
18a60 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
18a70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p3];.  sqlite3
18a80 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
18a90 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
18aa0 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
18ab0 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
18ac0 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
18ad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18ae0 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
18af0 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
18b00 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
18b10 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
18b20 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
18b30 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
18b40 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
18b50 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
18b60 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
18b70 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
18b80 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
18b90 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
18ba0 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
18bb0 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
18bc0 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
18bd0 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
18be0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
18bf0 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
18c00 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
18c10 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
18c20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
18c30 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
18c40 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
18c50 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
18c60 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
18c70 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
18c80 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
18c90 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
18ca0 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
18cb0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
18cc0 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
18cd0 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
18ce0 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
18cf0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
18d00 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
18d10 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
18d20 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
18d30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18d40 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50  : VerifyCookie P
18d50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18d60 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75  * Check the valu
18d70 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61  e of global data
18d80 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e  base parameter n
18d90 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20  umber 0 (the.** 
18da0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20  schema version) 
18db0 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74  and make sure it
18dc0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 20   is equal to P2 
18dd0 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  and that the.** 
18de0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
18df0 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20  er on the local 
18e00 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 71 75  schema parse equ
18e10 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31  als P3..**.** P1
18e20 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18e30 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
18e40 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20   0 for the main 
18e50 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
18e60 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66   and 1 for the f
18e70 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70  ile holding temp
18e80 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
18e90 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d   some higher num
18ea0 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c  ber.** for auxil
18eb0 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a  iary databases..
18ec0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  **.** The cookie
18ed0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
18ee0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
18ef0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
18f00 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
18f10 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
18f20 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
18f30 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
18f40 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
18f50 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
18f60 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
18f70 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
18f80 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
18f90 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  Either a transac
18fa0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61  tion needs to ha
18fb0 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20  ve been started 
18fc0 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65  or an OP_Open ne
18fd0 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65  eds.** to be exe
18fe0 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c  cuted (to establ
18ff0 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29  ish a read lock)
19000 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63   before this opc
19010 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65  ode is.** invoke
19020 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65  d..*/.case OP_Ve
19030 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  rifyCookie: {.  
19040 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19050 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a   iGen;.  Btree *
19060 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
19070 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
19080 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
19090 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
190a0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
190b0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
190c0 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
190d0 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
190e0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
190f0 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
19100 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
19110 61 64 65 72 20 29 3b 0a 20 20 70 42 74 20 3d 20  ader );.  pBt = 
19120 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19130 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
19140 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
19150 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
19160 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19170 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
19180 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
19190 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
191a0 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
191b0 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
191c0 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
191d0 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
191e0 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20   iMeta!=pOp->p2 
191f0 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33  || iGen!=pOp->p3
19200 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
19210 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
19220 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
19230 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
19240 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
19250 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
19260 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
19270 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
19280 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
19290 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
192a0 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
192b0 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
192c0 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
192d0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
192e0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
192f0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
19300 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
19310 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
19320 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
19330 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
19340 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
19350 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
19360 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
19370 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
19380 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
19390 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
193a0 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
193b0 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
193c0 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
193d0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
193e0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
193f0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
19400 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
19410 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
19420 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
19430 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
19440 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
19450 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
19460 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
19470 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
19480 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
19490 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
194a0 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
194b0 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
194c0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
194d0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
194e0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
194f0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
19500 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
19510 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
19520 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
19530 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
19540 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
19550 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
19560 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
19570 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
19580 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
19590 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
195a0 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
195b0 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78 70 69    }..    p->expi
195c0 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
195d0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
195e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
195f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19600 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
19610 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
19620 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
19630 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
19640 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
19650 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
19660 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
19670 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
19680 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
19690 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
196a0 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
196b0 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
196c0 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
196d0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
196e0 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
196f0 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
19700 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
19710 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
19720 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
19730 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
19740 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
19750 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
19760 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
19770 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
19780 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
19790 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
197a0 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
197b0 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
197c0 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
197d0 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
197e0 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
197f0 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
19800 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
19810 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19820 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
19830 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
19840 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
19850 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
19860 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
19870 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
19880 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
19890 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
198a0 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
198b0 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
198c0 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
198d0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
198e0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
198f0 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
19900 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
19910 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
19920 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
19930 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
19940 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
19950 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
19960 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
19970 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
19980 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
19990 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
199a0 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
199b0 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
199c0 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
199d0 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
199e0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
199f0 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
19a00 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
19a10 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
19a20 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
19a30 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
19a40 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
19a50 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
19a60 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
19a70 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
19a80 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
19a90 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
19aa0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
19ab0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
19ac0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
19ad0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
19ae0 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
19af0 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
19b00 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
19b10 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
19b20 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
19b30 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
19b40 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
19b50 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
19b60 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
19b70 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
19b80 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
19b90 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
19ba0 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
19bb0 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69  See also OpenWri
19bc0 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  te..*/./* Opcode
19bd0 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
19be0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
19bf0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
19c00 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
19c10 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
19c20 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
19c30 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
19c40 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
19c50 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
19c60 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
19c70 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19c80 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
19c90 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
19ca0 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
19cb0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
19cc0 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
19cd0 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
19ce0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
19cf0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
19d00 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
19d10 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
19d20 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
19d30 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19d40 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19d50 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
19d60 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
19d70 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
19d80 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
19d90 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
19da0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
19db0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19dc0 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19dd0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
19de0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19df0 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
19e00 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
19e10 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
19e20 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
19e30 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
19e40 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
19e50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
19e60 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
19e70 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
19e80 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
19e90 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
19ea0 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
19eb0 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
19ec0 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
19ed0 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
19ee0 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
19ef0 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
19f00 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
19f10 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
19f20 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
19f30 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ad..*/.case OP_O
19f40 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
19f50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20  _OpenWrite: {.  
19f60 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
19f70 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
19f80 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
19f90 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
19fa0 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
19fb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
19fc0 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
19fd0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
19fe0 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53  >p5&(OPFLAG_P2IS
19ff0 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  REG|OPFLAG_BULKC
1a000 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b  SR))==pOp->p5 );
1a010 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a020 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1a030 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1a040 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a050 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1a060 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1a070 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65  pcode==OP_OpenRe
1a080 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  ad || p->readOnl
1a090 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1a0a0 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1a0b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1a0c0 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  RT;.    break;. 
1a0d0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1a0e0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1a0f0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1a100 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1a110 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1a120 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1a130 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1a140 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
1a150 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
1a160 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
1a170 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1a180 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
1a190 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
1a1a0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1a1b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a1c0 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
1a1d0 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73  lag = 1;.    ass
1a1e0 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1a1f0 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1a200 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1a210 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1a220 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1a230 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a240 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1a250 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1a260 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1a270 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1a280 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1a290 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1a2a0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1a2b0 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1a2c0 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1a2d0 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1a2e0 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1a2f0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
1a300 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1a310 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1a320 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1a330 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1a340 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1a350 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1a360 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1a370 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1a380 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1a390 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1a3a0 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1a3b0 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1a3c0 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1a3d0 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1a3e0 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1a3f0 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1a400 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1a410 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1a420 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1a430 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1a440 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1a450 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1a460 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1a470 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1a480 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1a490 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1a4a0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
1a4b0 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
1a4c0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1a4d0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1a4e0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a4f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a500 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
1a510 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1a520 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1a530 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1a540 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1a550 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1a560 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1a570 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1a580 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1a590 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1a5a0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1a5b0 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1a5c0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a5d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a5e0 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1a5f0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1a600 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1a610 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1a620 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1a630 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1a640 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1a650 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1a660 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1a670 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1a680 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1a690 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1a6a0 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1a6b0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
1a6c0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1a6d0 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
1a6e0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ow = 1;.  pCur->
1a6f0 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20  isOrdered = 1;. 
1a700 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a710 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1a720 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1a730 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  o, pCur->pCursor
1a740 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  );.  pCur->pKeyI
1a750 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1a760 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1a770 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f  _BULKCSR==BTREE_
1a780 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71  BULKLOAD );.  sq
1a790 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1a7a0 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72  Hints(pCur->pCur
1a7b0 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  sor, (pOp->p5 & 
1a7c0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1a7d0 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74  ;..  /* Since it
1a7e0 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d   performs no mem
1a7f0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  ory allocation o
1a800 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76  r IO, the only v
1a810 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73  alue that.  ** s
1a820 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a830 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69  r() may return i
1a840 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a  s SQLITE_OK. */.
1a850 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1a860 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
1a870 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72   Set the VdbeCur
1a880 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69  sor.isTable vari
1a890 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76  able. Previous v
1a8a0 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1a8b0 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1a8c0 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1a8d0 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1a8e0 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1a8f0 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1a900 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1a910 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1a920 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1a930 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1a940 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1a950 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1a960 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1a970 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1a980 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1a990 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  NFO;.  break;.}.
1a9a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a9b0 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1a9c0 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1a9d0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1a9e0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1a9f0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1aa00 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1aa10 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1aa20 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1aa30 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1aa40 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1aa50 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1aa60 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1aa70 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1aa80 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1aa90 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1aaa0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1aab0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1aac0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1aad0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1aae0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1aaf0 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1ab00 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1ab10 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1ab20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1ab30 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1ab40 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1ab50 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1ab60 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1ab70 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1ab80 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1ab90 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1aba0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1abb0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1abc0 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1abd0 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1abe0 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1abf0 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1ac00 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1ac10 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1ac20 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1ac30 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1ac40 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1ac50 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1ac60 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1ac70 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1ac80 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1ac90 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1aca0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1acb0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1acc0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1acd0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1ace0 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1acf0 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1ad00 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1ad10 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1ad20 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1ad30 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1ad40 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1ad50 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1ad60 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1ad70 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1ad80 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1ad90 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1ada0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1adb0 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1adc0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1add0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1ade0 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1adf0 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1ae00 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1ae10 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1ae20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1ae30 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1ae40 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1ae50 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ae60 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1ae70 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ae80 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1ae90 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1aea0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1aeb0 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1aec0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1aed0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1aee0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1aef0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1af00 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1af10 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1af20 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1af30 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1af40 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
1af50 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1af60 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1af70 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1afa0 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1afb0 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1afc0 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1afd0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1afe0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1aff0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1b000 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1b010 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1b020 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b030 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1b040 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1b050 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1b060 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1b070 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1b080 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1b090 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1b0a0 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1b0b0 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1b0c0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1b0d0 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1b0e0 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1b0f0 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1b100 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1b110 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1b120 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1b130 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1b140 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79  */.    if( (pKey
1b150 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1b160 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1b170 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1b180 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1b190 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b1a0 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1b1b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1b1c0 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1b1d0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1b1e0 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1b1f0 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1b200 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1b210 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1b220 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1b230 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1b240 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b250 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1b260 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b270 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1b280 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1b290 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1b2a0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1b2b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b2c0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1b2d0 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79  t, pgno, 1, pKey
1b2e0 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73  Info, pCx->pCurs
1b2f0 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1b300 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1b310 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1b320 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b330 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1b340 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
1b350 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
1b360 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1b370 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1b380 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
1b390 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
1b3a0 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
1b3b0 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65  NORDERED);.  bre
1b3c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b3d0 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20  : SorterOpen P1 
1b3e0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  * * P4 *.**.** T
1b3f0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1b400 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68   like OP_OpenEph
1b410 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68  emeral except th
1b420 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61  at it opens.** a
1b430 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1b440 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69   that is specifi
1b450 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74  cally designed t
1b460 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20  o sort large.** 
1b470 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20  tables using an 
1b480 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73  external merge-s
1b490 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a  ort algorithm..*
1b4a0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1b4b0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1b4c0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1b4d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b4e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b4f0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1b500 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1b510 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1b520 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1b530 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1b540 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1b550 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1b560 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1b570 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1b580 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1b590 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1b5a0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1b5b0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1b5c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1b5d0 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 43 78  rterInit(db, pCx
1b5e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1b5f0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1b600 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1b610 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b620 63 6f 6e 74 65 6e 74 20 69 6e 20 72 5b 50 32 40  content in r[P2@
1b630 50 33 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P3].**.** Open a
1b640 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
1b650 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
1b660 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
1b670 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
1b680 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
1b690 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
1b6a0 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74  hat one row in t
1b6b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
1b6c0 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
1b6d0 20 50 32 20 77 68 65 6e 20 50 35 3d 3d 30 2e 20   P2 when P5==0. 
1b6e0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1b6f0 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
1b700 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
1b710 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
1b720 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
1b730 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1b740 32 2e 20 20 57 68 65 6e 20 50 35 3d 3d 31 2c 20  2.  When P5==1, 
1b750 74 68 65 6e 20 74 68 65 0a 2a 2a 20 72 6f 77 20  then the.** row 
1b760 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  is represented b
1b770 79 20 50 33 20 63 6f 6e 73 65 63 75 74 69 76 65  y P3 consecutive
1b780 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1b790 6e 69 6e 67 20 77 69 74 68 20 50 32 2e 0a 2a 2a  ning with P2..**
1b7a0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1b7b0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1b7c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1b7d0 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1b7e0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1b7f0 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1b800 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1b810 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1b820 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1b830 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1b840 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1b850 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1b860 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1b870 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1b880 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1b890 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1b8a0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1b8b0 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1b8c0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1b8d0 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1b8e0 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1b8f0 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1b900 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1b910 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1b920 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1b930 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1b940 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1b950 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1b960 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1b970 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b980 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1b990 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
1b9a0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1b9b0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1b9c0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1b9d0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  >pseudoTableReg 
1b9e0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1b9f0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1ba00 20 70 43 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64   pCx->multiPseud
1ba10 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62  o = pOp->p5;.  b
1ba20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ba30 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1ba40 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1ba50 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1ba60 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1ba70 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1ba80 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1ba90 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1baa0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1bab0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1bac0 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1bad0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bae0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1baf0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1bb00 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1bb10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1bb20 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1bb30 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1bb40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1bb50 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50  : SeekGe P1 P2 P
1bb60 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1bb70 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1bb80 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1bb90 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1bba0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1bbb0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1bbc0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1bbd0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1bbe0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1bbf0 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
1bc00 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1bc10 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1bc20 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1bc30 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1bc40 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1bc50 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1bc60 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1bc70 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1bc80 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1bc90 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1bca0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1bcb0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1bcc0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1bcd0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1bce0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1bcf0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1bd00 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1bd10 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
1bd20 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1bd30 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1bd40 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1bd50 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1bd60 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1bd70 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1bd80 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1bd90 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1bda0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1bdb0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
1bdc0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1bdd0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1bde0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1bdf0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1be00 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1be10 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1be20 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1be30 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1be40 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1be50 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1be60 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1be70 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1be80 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1be90 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1bea0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1beb0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1bec0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1bed0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1bee0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1bef0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1bf00 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1bf10 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1bf20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1bf30 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1bf40 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1bf50 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1bf60 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1bf70 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1bf80 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1bf90 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1bfa0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1bfb0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1bfc0 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
1bfd0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1bfe0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20   Opcode: SeekLt 
1bff0 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1c000 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1c010 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1c020 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c030 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1c040 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1c050 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1c060 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1c070 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1c080 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1c090 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c0a0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c0b0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c0c0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c0d0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c0e0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c0f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c100 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c110 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c120 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c130 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c140 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1c150 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1c160 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1c170 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c180 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c190 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1c1a0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1c1b0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1c1c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1c1d0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1c1e0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1c1f0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1c200 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1c210 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1c220 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33   SeekLe P1 P2 P3
1c230 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1c240 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1c250 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c260 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c270 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c280 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c290 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c2a0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c2b0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1c2c0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1c2d0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1c2e0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1c2f0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1c300 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1c310 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1c320 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1c330 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1c340 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1c350 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1c360 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1c370 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1c380 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1c390 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1c3a0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1c3b0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1c3c0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1c3d0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1c3e0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1c3f0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1c400 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1c410 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1c420 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1c430 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1c440 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
1c450 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1c460 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1c470 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
1c480 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1c490 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20   OP_SeekLe:     
1c4a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1c4b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1c4c0 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
1c4d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1c4e0 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20   OP_SeekGt: {   
1c4f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1c500 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20   */.  int res;. 
1c510 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43   int oc;.  VdbeC
1c520 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70  ursor *pC;.  Unp
1c530 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1c540 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69   int nField;.  i
1c550 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
1c560 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1c570 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1c580 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c590 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1c5a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c5b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1c5c0 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1c5d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1c5e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1c5f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1c600 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1c610 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1c620 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50   OP_SeekLe == OP
1c630 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61  _SeekLt+1 );.  a
1c640 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65  ssert( OP_SeekGe
1c650 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20   == OP_SeekLt+2 
1c660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1c670 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65  SeekGt == OP_See
1c680 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLt+3 );.  asser
1c690 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1c6a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1c6b0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1c6c0 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1c6d0 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  de;.  pC->nullRo
1c6e0 77 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d  w = 0;.  if( pC-
1c6f0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1c700 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1c710 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1c720 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1c730 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1c740 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1c750 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1c760 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1c770 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1c780 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1c790 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1c7a0 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  covert it. */.  
1c7b0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1c7c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 70 70  Op->p3];.    app
1c7d0 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1c7e0 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 69 4b 65  y(pIn3);.    iKe
1c7f0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1c800 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20  ntValue(pIn3);. 
1c810 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c820 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  lid = 0;..    /*
1c830 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1c840 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1c850 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1c860 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1c870 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1c880 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1c890 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1c8a0 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1c8b0 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
1c8c0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c8d0 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1c8e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1c8f0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1c900 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
1c910 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1c920 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1c930 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1c940 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1c950 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1c960 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1c970 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1c980 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1c990 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1c9a0 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
1c9b0 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
1c9c0 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
1c9d0 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e  this point, then
1c9e0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1c9f0 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
1ca00 0a 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20  .      ** point 
1ca10 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
1ca20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
1ca30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1ca40 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 69  )!=0 );..      i
1ca50 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1ca60 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1ca70 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1ca80 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1ca90 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  {.        /* The
1caa0 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 6f   P3 value is too
1cab0 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74   large in magnit
1cac0 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ude to be expres
1cad0 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20  sed as an.      
1cae0 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f    ** integer. */
1caf0 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31  .        res = 1
1cb00 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  ;.        if( pI
1cb10 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20  n3->r<0 ){.     
1cb20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f       if( oc>=OP_
1cb30 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72  SeekGe ){  asser
1cb40 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  t( oc==OP_SeekGe
1cb50 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1cb60 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t );.           
1cb70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cb80 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72  eeFirst(pC->pCur
1cb90 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1cba0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1cbb0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1cbc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1cbd0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
1cbe0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1cbf0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
1cc00 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20  <=OP_SeekLe ){  
1cc10 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1cc20 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1cc30 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1cc40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1cc50 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1cc60 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1cc80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1cc90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1cca0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1ccb0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
1ccc0 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1ccd0 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  {.          pc =
1cce0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1ccf0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1cd00 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
1cd10 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65  se if( oc==OP_Se
1cd20 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1cd30 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
1cd40 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c   /* Use the ceil
1cd50 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  ing() function t
1cd60 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1cd70 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  int */.        i
1cd80 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f  f( pIn3->r > (do
1cd90 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79  uble)iKey ) iKey
1cda0 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ++;.      }else{
1cdb0 0a 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  .        /* Use 
1cdc0 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63  the floor() func
1cdd0 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
1cde0 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
1cdf0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1ce00 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1ce10 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1ce20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
1ce30 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r < (double)iKe
1ce40 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20  y ) iKey--;.    
1ce50 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1ce60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ce70 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1ce80 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1ce90 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1cea0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1ceb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1cec0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ced0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1cee0 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30  }.    if( res==0
1cef0 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f   ){.      pC->ro
1cf00 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a  widIsValid = 1;.
1cf10 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
1cf20 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
1cf30 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  }.  }else{.    n
1cf40 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1cf50 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
1cf60 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1cf70 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65  NT32 );.    asse
1cf80 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1cf90 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1cfa0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1cfb0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1cfc0 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
1cfd0 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1cfe0 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1cff0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1d000 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a  ly faster:.    *
1d010 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1d020 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
1d030 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 2a 2a  SeekLe ){.    **
1d040 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1d050 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b  NPACKED_INCRKEY;
1d060 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1d070 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c  .    **     r.fl
1d080 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 2a 2a 20  ags = 0;.    ** 
1d090 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
1d0a0 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28 55 4e  .flags = (u8)(UN
1d0b0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a  PACKED_INCRKEY *
1d0c0 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53   (1 & (oc - OP_S
1d0d0 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 61 73  eekLt)));.    as
1d0e0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d0f0 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kGt || r.flags==
1d100 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1d110 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1d120 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc!=OP_SeekLe ||
1d130 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b   r.flags==UNPACK
1d140 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20  ED_INCRKEY );.  
1d150 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d160 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61  _SeekGe || r.fla
1d170 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  gs==0 );.    ass
1d180 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d190 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Lt || r.flags==0
1d1a0 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
1d1b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1d1c0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d1d0 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
1d1e0 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1d1f0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1d200 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1d210 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1d220 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
1d230 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1d240 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d250 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d260 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1d270 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1d280 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1d290 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d2a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d2b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1d2c0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d2d0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  alid = 0;.  }.  
1d2e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d2f0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1d300 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1d310 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1d320 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1d330 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1d340 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
1d350 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1d360 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1d370 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1d380 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1d390 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1d3a0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1d3b0 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20  P_SeekGt) ){.   
1d3c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d3d0 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1d3e0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d3f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1d400 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1d410 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d420 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1d430 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d440 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73  }else{.      res
1d450 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 0;.    }.  }e
1d460 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1d470 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1d480 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1d490 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30  );.    if( res>0
1d4a0 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1d4b0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b  c==OP_SeekLt) ){
1d4c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1d4d0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
1d4e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d4f0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1d500 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d510 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d520 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1d530 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d540 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d550 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1d560 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1d570 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1d580 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1d590 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
1d5a0 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
1d5b0 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
1d5c0 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1d5d0 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1d5e0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1d5f0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1d600 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 69 66 28 20  ->p2>0 );.  if( 
1d610 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
1d620 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1d630 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d640 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
1d650 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1d660 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b  psis:  intkey=r[
1d670 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P2].**.** P1 is 
1d680 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75  an open table cu
1d690 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61  rsor and P2 is a
1d6a0 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20   rowid integer. 
1d6b0 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20   Arrange.** for 
1d6c0 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68  P1 to move so th
1d6d0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1d6e0 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20  the rowid given 
1d6f0 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  by P2..**.** Thi
1d700 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1d710 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
1d720 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
1d730 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
1d740 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
1d750 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
1d760 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
1d770 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
1d780 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
1d790 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
1d7a0 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ns..*/.case OP_S
1d7b0 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32  eek: {    /* in2
1d7c0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d7d0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1d7e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d7f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d800 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1d810 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1d820 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d840 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1d850 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1d860 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  ble );.  pC->nul
1d870 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32  lRow = 0;.  pIn2
1d880 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1d890 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ];.  pC->movetoT
1d8a0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1d8b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1d8c0 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  );.  pC->rowidIs
1d8d0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1d8e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1d8f0 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 1;.  break;.}.
1d900 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1d910 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1d920 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d930 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1d940 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1d950 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1d960 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1d970 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1d980 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1d990 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1d9a0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1d9b0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1d9c0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1d9d0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1d9e0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1d9f0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1da00 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1da10 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1da20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1da30 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1da40 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1da50 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1da60 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1da70 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1da80 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1da90 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1daa0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1dab0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
1dac0 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
1dad0 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
1dae0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1daf0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1db00 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1db10 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1db20 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1db30 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1db40 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1db50 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1db60 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1db70 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1db80 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1db90 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1dba0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1dbb0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1dbc0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1dbd0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1dbe0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1dbf0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1dc00 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
1dc10 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1dc20 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1dc30 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1dc40 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
1dc50 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
1dc60 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
1dc70 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
1dc80 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
1dc90 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
1dca0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1dcb0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1dcc0 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
1dcd0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1dce0 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
1dcf0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  try..**.** See a
1dd00 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1dd10 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
1dd20 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
1dd30 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
1dd40 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1dd50 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1dd60 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1dd70 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1dd80 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1dd90 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1dda0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1ddb0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1ddc0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1ddd0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1dde0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1ddf0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1de00 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1de10 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1de20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1de30 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1de40 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1de50 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
1de60 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
1de70 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1de80 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
1de90 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
1dea0 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
1deb0 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
1dec0 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
1ded0 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
1dee0 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
1def0 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
1df00 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
1df10 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
1df20 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
1df30 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
1df40 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
1df50 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
1df60 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
1df70 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
1df80 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1df90 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
1dfa0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
1dfb0 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
1dfc0 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
1dfd0 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
1dfe0 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
1dff0 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
1e000 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
1e010 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
1e020 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
1e030 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  NULL..**.** See 
1e040 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
1e050 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1e060 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
1e070 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
1e080 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e090 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1e0a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e0b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1e0c0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1e0d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1e0e0 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1e0f0 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
1e100 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1e110 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a  nt res;.  char *
1e120 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65  pFree;.  Unpacke
1e130 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1e140 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1e150 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65  rd r;.  char aTe
1e160 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1e170 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1e180 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1e190 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64  m)*4 + 7];..#ifd
1e1a0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1e1b0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1e1c0 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  !=OP_NoConflict 
1e1d0 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  ) sqlite3_found_
1e1e0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1e1f0 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1e200 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1e210 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e220 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e230 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e240 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1e250 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1e260 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1e270 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1e280 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1e290 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1e2a0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1e2b0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1e2c0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1e2d0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1e2e0 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
1e2f0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1e300 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1e310 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
1e320 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
1e330 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
1e340 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1e350 20 20 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 69     {.      int i
1e360 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
1e370 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1e380 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1e390 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1e3a0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  .aMem[i]) );.   
1e3b0 20 20 20 20 20 69 66 28 20 69 20 29 20 52 45 47       if( i ) REG
1e3c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1e3d0 3e 70 33 2b 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  >p3+i, &r.aMem[i
1e3e0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
1e3f0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 66  }.#endif.    r.f
1e400 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1e410 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1e420 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1e430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
1e440 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
1e450 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
1e460 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
1e470 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1e480 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1e490 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1e4a0 20 20 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20      ); .    if( 
1e4b0 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
1e4c0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
1e4d0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1e4e0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1e4f0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1e500 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1e510 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1e520 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1e530 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1e540 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1e550 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1e560 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1e570 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
1e580 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e  );.    pIdxKey->
1e590 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45  flags |= UNPACKE
1e5a0 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1e5b0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1e5c0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
1e5d0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
1e5e0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
1e5f0 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
1e600 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
1e610 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
1e620 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
1e630 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
1e640 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
1e650 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
1e660 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
1e670 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
1e680 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1e690 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b       if( r.aMem[
1e6a0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1e6b0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
1e6c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e6d0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1e6e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1e6f0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1e700 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e710 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1e720 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
1e730 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f   &res);.  if( pO
1e740 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1e750 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1e760 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a  db, pFree);.  }.
1e770 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e780 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  _OK ){.    break
1e790 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
1e7a0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
1e7b0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1e7c0 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
1e7d0 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
1e7e0 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
1e7f0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e800 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1e810 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e820 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
1e830 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1e840 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1e850 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1e860 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1e870 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1e880 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1e890 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e8a0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1e8b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1e8c0 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1e8d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1e8e0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
1e8f0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1e900 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
1e910 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
1e920 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
1e930 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
1e940 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
1e950 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
1e960 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
1e970 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
1e980 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
1e990 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1e9a0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1e9b0 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
1e9c0 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68  a record.** with
1e9d0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c   rowid P3 then l
1e9e0 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
1e9f0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
1ea00 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
1ea10 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74  .** through to t
1ea20 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1ea30 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
1ea40 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
1ea50 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
1ea60 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
1ea70 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
1ea80 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
1ea90 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
1eaa0 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  s)..**.** See al
1eab0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1eac0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
1ead0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1eae0 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1eaf0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1eb00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1eb10 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1eb20 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1eb30 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
1eb40 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1eb50 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1eb60 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1eb70 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1eb80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1eb90 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1eba0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1ebb0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1ebc0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1ebd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1ebe0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
1ebf0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1ec00 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1ec10 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1ec20 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
1ec30 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
1ec40 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
1ec50 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
1ec60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ec70 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1ec80 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1ec90 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73  &res);.  pC->las
1eca0 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1ecb0 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  .i;.  pC->rowidI
1ecc0 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1ecd0 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ?1:0;.  pC->null
1ece0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
1ecf0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1ed00 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
1ed10 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1ed20 20 30 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30   0;.  if( res!=0
1ed30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1ed40 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1ed50 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1ed60 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d  sValid==0 );.  }
1ed70 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
1ed80 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b  t = res;.  break
1ed90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1eda0 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1edb0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1edc0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
1edd0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
1ede0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
1edf0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
1ee00 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
1ee10 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
1ee20 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
1ee30 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
1ee40 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1ee50 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
1ee60 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
1ee70 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
1ee80 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
1ee90 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
1eea0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1eeb0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1eec0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1eed0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1eee0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1eef0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1ef00 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
1ef10 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1ef20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ef30 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
1ef40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1ef50 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
1ef60 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1ef70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
1ef80 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
1ef90 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
1efa0 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
1efb0 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
1efc0 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
1efd0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
1efe0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1eff0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
1f000 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
1f010 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f020 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
1f030 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
1f040 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
1f050 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
1f060 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
1f070 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1f080 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
1f090 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
1f0a0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
1f0b0 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
1f0c0 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
1f0d0 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
1f0e0 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
1f0f0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
1f100 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1f110 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
1f120 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
1f130 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1f140 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1f150 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1f160 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
1f170 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
1f180 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
1f190 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
1f1a0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
1f1b0 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
1f1c0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
1f1d0 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
1f1e0 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
1f1f0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
1f200 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
1f210 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
1f220 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
1f230 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1f240 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1f250 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
1f260 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1f270 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
1f280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1f290 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
1f2a0 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
1f2b0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1f2c0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1f2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1f2e0 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
1f2f0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1f300 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
1f310 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1f320 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
1f330 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
1f340 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
1f350 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
1f360 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f370 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
1f380 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
1f390 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
1f3a0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
1f3b0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
1f3c0 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
1f3d0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
1f3e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f3f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f400 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f410 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f420 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1f430 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
1f440 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
1f450 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
1f460 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
1f470 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
1f480 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
1f490 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
1f4a0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
1f4b0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
1f4c0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
1f4d0 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
1f4e0 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
1f4f0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
1f500 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
1f510 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1f520 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
1f530 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1f540 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1f550 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
1f560 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
1f570 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
1f580 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1f590 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
1f5a0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
1f5b0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
1f5c0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
1f5d0 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
1f5e0 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
1f5f0 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
1f600 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
1f610 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
1f620 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
1f630 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
1f640 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
1f650 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
1f660 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
1f670 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1f680 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
1f690 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
1f6a0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
1f6b0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
1f6c0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
1f6d0 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
1f6e0 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
1f6f0 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
1f700 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
1f710 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1f720 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
1f730 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
1f740 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
1f750 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
1f760 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
1f770 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
1f780 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
1f790 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
1f7a0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
1f7b0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
1f7c0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
1f7d0 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
1f7e0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
1f7f0 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
1f800 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
1f810 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
1f820 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
1f830 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
1f840 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
1f850 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
1f860 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
1f870 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
1f880 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
1f890 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
1f8a0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
1f8b0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1f8c0 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1f8d0 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43  sqlite3BtreeGetC
1f8e0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f8f0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69  Cursor);.      i
1f900 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( v==0 ){.     
1f910 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f920 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1f930 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1f940 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1f950 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1f960 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1f970 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1f980 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1f990 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1f9a0 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
1f9b0 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
1f9c0 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65  74 */.        }e
1f9d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1f9e0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1f9f0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1fa00 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1fa10 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1fa20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1fa30 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1fa40 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1fa50 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1fa60 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1fa70 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1fa80 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1fa90 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1faa0 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
1fab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1fac0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1fad0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1fae0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1faf0 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
1fb00 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
1fb10 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  /.          }.  
1fb20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1fb30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fb40 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1fb50 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1fb60 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1fb70 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1fb80 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1fb90 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1fba0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1fbb0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
1fbc0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
1fbd0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
1fbe0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
1fbf0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
1fc00 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
1fc10 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
1fc20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1fc30 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1fc40 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1fc50 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1fc60 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1fc70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
1fc80 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1fc90 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
1fca0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1fcb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1fcc0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1fcd0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1fce0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1fcf0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fd00 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
1fd10 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
1fd20 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
1fd30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1fd40 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41  ;.          memA
1fd50 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
1fd60 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d  pMem);.        }
1fd70 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fd80 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
1fd90 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45  ) );..        RE
1fda0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1fdb0 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
1fdc0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1fdd0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
1fde0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  em);.        ass
1fdf0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
1fe00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1fe10 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
1fe20 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
1fe30 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  */.        if( p
1fe40 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
1fe50 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
1fe60 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1fe70 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1fe80 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
1fe90 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
1fea0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f   */.          go
1feb0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fec0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
1fed0 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70  .        if( v<p
1fee0 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
1fef0 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
1ff00 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
1ff10 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65     }.        pMe
1ff20 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
1ff30 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
1ff40 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1ff50 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1ff60 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f  >pCursor, v<MAX_
1ff70 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29  ROWID ? v+1 : 0)
1ff80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1ff90 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1ffa0 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
1ffb0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1ffc0 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
1ffd0 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
1ffe0 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
1fff0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
20000 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
20010 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
20020 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
20030 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
20040 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
20050 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
20060 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
20070 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
20080 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
20090 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
200a0 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
200b0 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
200c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
200d0 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
200e0 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
200f0 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
20100 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
20130 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
20140 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f  e. */.      /* o
20150 6e 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65  n the first atte
20160 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f  mpt, simply do o
20170 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65  ne more than pre
20180 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76  vious */.      v
20190 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
201a0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
201b0 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
201c0 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
201d0 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
201e0 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
201f0 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
20200 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
20210 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20  while(   ((rc = 
20220 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
20230 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
20240 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
20250 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20280 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
20290 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
202a0 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
202b0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
202c0 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20   (++cnt<100)){. 
202d0 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73         /* collis
202e0 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65  ion - try anothe
202f0 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a  r random rowid *
20300 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
20310 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
20320 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
20330 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
20340 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  {.          /* t
20350 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f  ry "small" rando
20360 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65  m rowids for the
20370 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74   initial attempt
20380 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76  s */.          v
20390 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20   &= 0xffffff;.  
203a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
203b0 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
203c0 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
203d0 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
203e0 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
203f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76       }.        v
20400 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
20410 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
20420 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
20430 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
20440 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
20450 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
20460 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
20470 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
20480 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20490 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
204a0 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
204b0 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
204c0 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
204d0 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
204e0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
204f0 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
20500 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20510 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
20520 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20530 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
20540 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
20550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
20560 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
20570 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
20580 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
20590 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
205a0 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
205b0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
205c0 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
205d0 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
205e0 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
205f0 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
20600 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
20610 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
20620 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
20630 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
20640 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
20650 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
20660 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
20670 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
20680 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
20690 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
206a0 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
206b0 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
206c0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
206d0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
206e0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
206f0 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
20700 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
20710 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
20720 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
20730 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
20740 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
20750 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
20760 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
20770 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
20780 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
20790 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
207a0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
207b0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
207c0 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
207d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
207e0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
207f0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
20800 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
20810 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
20820 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
20830 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
20840 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
20850 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
20860 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
20870 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
20880 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
20890 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
208a0 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
208b0 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
208c0 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
208d0 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
208e0 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
208f0 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
20900 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
20910 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
20920 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
20930 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
20940 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
20950 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
20960 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
20970 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
20980 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
20990 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
209a0 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
209b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
209c0 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
209d0 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
209e0 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
209f0 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
20a00 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
20a10 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
20a20 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
20a30 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
20a40 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
20a50 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
20a60 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
20a70 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
20a80 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
20a90 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
20aa0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
20ab0 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
20ac0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
20ad0 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
20ae0 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
20af0 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
20b00 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
20b10 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
20b20 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
20b30 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
20b40 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
20b50 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
20b60 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
20b70 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
20b80 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
20b90 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
20ba0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
20bb0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
20bc0 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
20bd0 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
20be0 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
20bf0 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
20c00 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
20c10 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
20c20 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
20c30 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
20c40 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
20c50 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
20c60 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
20c70 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
20c80 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
20c90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
20ca0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
20cb0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
20cc0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
20cd0 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
20ce0 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
20cf0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
20d00 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
20d10 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
20d20 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
20d30 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
20d40 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
20d50 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
20d60 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
20d70 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
20d80 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
20d90 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
20da0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
20db0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
20dc0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
20dd0 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
20de0 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
20df0 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
20e00 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
20e10 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
20e20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
20e30 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
20e40 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
20e50 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
20e60 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
20e70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
20e80 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
20e90 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
20ea0 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
20eb0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
20ec0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
20ed0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
20ee0 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
20ef0 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
20f00 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
20f10 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
20f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20f30 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
20f40 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
20f50 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
20f60 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
20f70 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
20f80 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
20f90 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
20fa0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
20fb0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
20fc0 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
20fd0 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
20fe0 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
20ff0 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
21000 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
21010 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
21020 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
21030 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
21040 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
21050 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
21060 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
21070 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
21080 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
21090 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
210a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
210b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
210c0 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
210d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
210e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
210f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21100 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
21110 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
21120 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
21130 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
21140 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21150 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
21160 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21170 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
21180 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21190 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
211a0 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
211b0 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
211c0 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
211d0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
211e0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
211f0 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
21200 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
21210 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
21220 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
21230 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
21240 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
21250 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21260 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
21270 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
21280 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
21290 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
212a0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
212b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
212c0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
212d0 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
212e0 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
212f0 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
21300 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
21310 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
21320 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
21330 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
21340 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
21350 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
21360 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
21370 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
21380 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
21390 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
213a0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
213b0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
213c0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
213d0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
213e0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
213f0 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
21400 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
21410 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
21420 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
21430 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
21440 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
21450 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
21460 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
21470 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
214a0 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f       pOp->p5 & O
214d0 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65  PFLAG_APPEND, se
214e0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
214f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21500 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
21510 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21520 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21530 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21540 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
21550 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
21560 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
21570 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21580 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
21590 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
215a0 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
215b0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
215c0 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
215d0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
215e0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
215f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
21600 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
21610 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
21620 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
21630 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21640 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
21650 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
21660 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
21670 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
21680 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21690 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
216a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
216b0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
216c0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
216d0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
216e0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
216f0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
21700 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
21710 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
21720 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
21730 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
21740 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
21750 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
21760 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
21770 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
21780 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
21790 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
217a0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
217b0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
217c0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
217d0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
217e0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
217f0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
21800 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
21810 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21820 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
21830 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
21840 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
21850 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
21860 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
21870 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
21880 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
21890 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
218a0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
218b0 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
218c0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
218d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
218e0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
218f0 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
21900 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
21910 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
21920 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
21930 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
21940 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
21950 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
21960 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
21970 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
21980 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
21990 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
219a0 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
219b0 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
219c0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
219d0 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
219e0 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  {.  i64 iKey;.  
219f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21a00 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61  .  iKey = 0;.  a
21a10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21a20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21a30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21a40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21a50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21a60 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21a70 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
21a80 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
21a90 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
21aa0 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
21ab0 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
21ac0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21ad0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
21ae0 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65   set iKey to the
21af0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20   rowid of the.  
21b00 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c  ** row being del
21b10 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  eted..  */.  if(
21b20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21b30 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
21b40 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
21b50 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
21b60 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21b70 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20  rowidIsValid ); 
21b80 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65   /* lastRowid se
21b90 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50  t by previous OP
21ba0 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20  _NotFound */.   
21bb0 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74   iKey = pC->last
21bc0 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Rowid;.  }..  /*
21bd0 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
21be0 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
21bf0 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
21c00 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
21c10 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
21c20 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
21c30 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
21c40 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
21c50 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
21c60 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
21c70 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
21c80 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
21c90 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
21ca0 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
21cb0 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
21cc0 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
21cd0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21ce0 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
21cf0 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
21d00 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
21d10 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
21d20 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
21d30 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
21d40 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
21d50 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
21d60 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
21d70 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
21d80 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
21d90 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21da0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
21db0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21dc0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
21dd0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
21de0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
21df0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21e00 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
21e10 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
21e20 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
21e30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21e40 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
21e50 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
21e60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21e70 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
21e80 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
21e90 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
21ea0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
21eb0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
21ec0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
21ed0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
21ee0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
21ef0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
21f00 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
21f10 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
21f20 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
21f30 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
21f40 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
21f50 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
21f60 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
21f70 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
21f80 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
21f90 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
21fa0 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
21fb0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
21fc0 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
21fd0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
21fe0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
21ff0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
22000 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
22010 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
22020 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
22030 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
22040 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
22050 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
22060 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
22070 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
22080 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
22090 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
220a0 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
220b0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
220c0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
220d0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
220e0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
220f0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
22100 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
22110 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
22120 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
22130 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22140 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
22150 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
22160 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
22170 6b 65 79 28 50 31 29 21 3d 72 74 72 69 6d 28 72  key(P1)!=rtrim(r
22180 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32  [P3],P4) goto P2
22190 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
221a0 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68  orter cursor. Th
221b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
221c0 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78  ompares a prefix
221d0 20 6f 66 20 74 68 65 0a 2a 2a 20 74 68 65 20 72   of the.** the r
221e0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
221f0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
22200 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
22210 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
22220 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
22230 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
22240 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 66 69 6e  nts to.  The fin
22250 61 6c 20 50 34 20 66 69 65 6c 64 73 20 6f 66 20  al P4 fields of 
22260 62 6f 74 68 0a 2a 2a 20 74 68 65 20 50 33 20 61  both.** the P3 a
22270 6e 64 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  nd sorter record
22280 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a   are ignored..**
22290 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33  .** If either P3
222a0 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63   or the sorter c
222b0 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69  ontains a NULL i
222c0 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73  n one of their s
222d0 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69  ignificant.** fi
222e0 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69  elds (not counti
222f0 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73  ng the P4 fields
22300 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63   at the end whic
22310 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74  h are ignored) t
22320 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61  hen.** the compa
22330 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64  rison is assumed
22340 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a   to be equal..**
22350 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
22360 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63   to next instruc
22370 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20  tion if the two 
22380 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20  records compare 
22390 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68  equal to.** each
223a0 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f   other.  Jump to
223b0 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20   P2 if they are 
223c0 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61  different..*/.ca
223d0 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
223e0 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
223f0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
22400 65 73 3b 0a 20 20 69 6e 74 20 6e 49 67 6e 6f 72  es;.  int nIgnor
22410 65 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  e;..  pC = p->ap
22420 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22430 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
22440 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (pC) );.  assert
22450 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
22460 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e  4_INT32 );.  pIn
22470 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
22480 33 5d 3b 0a 20 20 6e 49 67 6e 6f 72 65 20 3d 20  3];.  nIgnore = 
22490 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 63 20  pOp->p4.i;.  rc 
224a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
224b0 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
224c0 49 6e 33 2c 20 6e 49 67 6e 6f 72 65 2c 20 26 72  In3, nIgnore, &r
224d0 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  es);.  if( res )
224e0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
224f0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
22500 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
22510 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
22520 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
22530 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
22540 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
22550 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
22560 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
22570 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
22580 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
22590 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
225a0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
225b0 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d  r *pC;..  pOut =
225c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
225d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
225e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
225f0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
22600 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
22610 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
22620 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20  key(pC, pOut);. 
22630 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22640 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
22650 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
22660 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
22670 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
22680 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
22690 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
226a0 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
226b0 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
226c0 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
226d0 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
226e0 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
226f0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
22700 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
22710 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
22720 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
22730 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
22740 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
22750 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
22760 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
22770 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
22780 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
22790 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
227a0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
227b0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
227c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
227d0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
227e0 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  key.**.** Write 
227f0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22800 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
22810 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
22820 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
22830 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
22840 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
22850 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
22860 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22870 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P3 register exac
22880 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22890 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
228a0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
228b0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
228c0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
228d0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
228e0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
228f0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
22900 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22910 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
22920 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
22930 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
22940 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
22950 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
22960 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
22970 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70  .  i64 n64;..  p
22980 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
22990 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
229a0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
229b0 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  );..  /* Note th
229c0 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
229d0 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
229e0 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
229f0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
22a00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22a10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22a20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22a30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22a40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22a50 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
22a60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22a70 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
22a80 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52  Op->opcode!=OP_R
22a90 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
22aa0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
22ab0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
22ac0 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
22ad0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22ae0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22af0 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
22b00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
22b10 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
22b20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22b30 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
22b40 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22b50 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
22b60 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
22b70 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
22b80 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
22b90 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
22ba0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
22bb0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
22bc0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
22bd0 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
22be0 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
22bf0 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
22c00 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
22c10 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
22c20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
22c30 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
22c40 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22c50 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
22c60 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
22c70 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
22c80 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
22c90 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
22ca0 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
22cb0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
22cc0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22cd0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
22ce0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22cf0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
22d00 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
22d10 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
22d20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22d30 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
22d40 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
22d50 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
22d60 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41  Table );.    VVA
22d70 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
22d80 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
22d90 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
22da0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22db0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
22dc0 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
22dd0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
22de0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
22df0 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
22e00 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
22e10 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
22e20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
22e30 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
22e40 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
22e50 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  {.    VVA_ONLY(r
22e60 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
22e70 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
22e80 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
22e90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22ea0 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
22eb0 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
22ec0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
22ed0 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
22ee0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
22ef0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
22f00 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
22f10 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
22f20 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
22f30 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  , n, 0) ){.    g
22f40 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
22f50 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20    pOut->n = n;. 
22f60 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
22f70 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pOut, MEM_Blob);
22f80 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
22f90 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  le==0 ){.    rc 
22fa0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
22fb0 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
22fc0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
22fd0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
22fe0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
22ff0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
23000 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
23010 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
23020 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
23030 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
23040 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
23050 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
23060 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45  SIZE(pOut);.  RE
23070 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
23080 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
23090 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
230a0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
230b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
230c0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
230d0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
230e0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
230f0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
23100 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
23110 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
23120 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23130 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
23140 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
23150 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
23160 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
23170 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
23180 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
23190 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
231a0 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
231b0 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
231c0 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
231d0 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
231e0 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
231f0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
23200 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
23230 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ase */.  VdbeCur
23240 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
23250 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
23260 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
23270 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
23280 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
23290 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
232a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
232b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
232c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
232d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
232e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
232f0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
23300 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  eg==0 || pC->nul
23310 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
23320 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
23330 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
23340 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
23350 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
23360 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23370 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
23380 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
23390 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
233a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
233b0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
233c0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a  >pVtabCursor ){.
233d0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
233e0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
233f0 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
23400 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
23410 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
23420 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
23430 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
23440 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56  e->xRowid(pC->pV
23450 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  tabCursor, &v);.
23460 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
23470 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
23480 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
23490 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
234a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
234b0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
234c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
234d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
234e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
234f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
23500 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
23510 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23520 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
23530 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
23540 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
23550 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
23560 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23570 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23580 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
23590 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
235a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
235b0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
235c0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
235d0 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
235e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
235f0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
23600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23610 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
23620 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
23630 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
23640 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
23650 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
23660 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
23670 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
23680 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
23690 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
236a0 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
236b0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
236c0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
236d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
236e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
236f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23700 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23710 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23720 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23730 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
23740 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
23750 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23760 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23770 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23780 53 54 41 4c 45 3b 0a 20 20 61 73 73 65 72 74 28  STALE;.  assert(
23790 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20   pC->pCursor || 
237a0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
237b0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  );.  if( pC->pCu
237c0 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
237d0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
237e0 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
237f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23800 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
23810 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
23820 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
23830 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
23840 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
23850 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
23860 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
23870 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
23880 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
23890 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
238a0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
238b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
238c0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
238d0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
238e0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
238f0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
23900 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23910 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
23920 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
23930 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
23940 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
23950 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
23960 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
23970 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
23980 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
23990 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
239a0 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
239b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
239c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
239d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
239e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
239f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23a00 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
23a10 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
23a20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
23a30 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  sr!=0 );.  rc = 
23a40 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
23a50 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
23a60 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23a70 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
23a80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
23a90 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
23aa0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
23ab0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23ac0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23ad0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
23ae0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
23af0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23b00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
23b10 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
23b20 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
23b30 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
23b40 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
23b50 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
23b60 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
23b70 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
23b80 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
23b90 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
23ba0 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
23bb0 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
23bc0 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
23bd0 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
23be0 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
23bf0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
23c00 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
23c10 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
23c20 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
23c30 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
23c40 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
23c50 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
23c60 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
23c70 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
23c80 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
23c90 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
23ca0 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
23cb0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
23cc0 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
23cd0 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
23ce0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
23cf0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
23d00 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
23d10 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
23d20 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
23d30 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
23d40 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
23d50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
23d60 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
23d70 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
23d80 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
23d90 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
23da0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
23db0 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
23dc0 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
23dd0 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
23de0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
23df0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
23e00 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
23e10 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
23e20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
23e30 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
23e40 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23e50 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23e60 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
23e70 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
23e80 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
23e90 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23ea0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23eb0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23ec0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23ed0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23ee0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23ef0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
23f00 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
23f10 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
23f20 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
23f30 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23f40 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23f50 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23f60 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
23f70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23f80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23f90 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23fa0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23fb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23fc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23fd0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23fe0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23ff0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24000 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
24010 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24020 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
24030 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
24040 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
24050 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
24060 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
24070 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
24080 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ind(db, pC, &res
24090 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
240a0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
240b0 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
240c0 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
240d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
240e0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
240f0 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
24100 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
24110 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
24120 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24130 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
24140 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a  sValid = 0;.  }.
24150 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24160 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
24170 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
24180 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
24190 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
241a0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
241b0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
241c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
241d0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50  Next P1 P2 * * P
241e0 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
241f0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
24200 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
24210 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
24220 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
24230 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
24240 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
24250 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
24260 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
24270 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24280 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24290 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
242a0 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
242b0 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
242c0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
242d0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
242e0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
242f0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
24300 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
24310 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
24320 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
24330 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
24340 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
24350 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
24360 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
24370 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
24380 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
24390 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
243a0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
243b0 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
243c0 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
243d0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
243e0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
243f0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
24400 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
24410 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
24420 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
24430 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
24440 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
24450 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
24460 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
24470 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
24480 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
24490 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
244a0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
244b0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
244c0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
244d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
244e0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
244f0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
24500 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
24510 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
24520 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24530 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
24540 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
24550 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
24560 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24570 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
24580 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
24590 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
245a0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
245b0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
245c0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
245d0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
245e0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
245f0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
24600 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
24610 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
24620 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
24630 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
24640 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
24650 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
24660 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Next:    /* jump
24670 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76   */.case OP_Prev
24680 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24690 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
246a0 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
246b0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
246c0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
246d0 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
246e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
246f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24700 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24710 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
24720 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
24730 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24740 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
24750 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65  pC==0 ){.    bre
24760 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b  ak;  /* See tick
24770 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a  et #2273 */.  }.
24780 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
24790 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
247a0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e  code==OP_SorterN
247b0 65 78 74 29 20 29 3b 0a 20 20 69 66 28 20 69 73  ext) );.  if( is
247c0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
247d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
247e0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
247f0 4e 65 78 74 20 29 3b 0a 20 20 20 20 72 63 20 3d  Next );.    rc =
24800 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
24810 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26  erNext(db, pC, &
24820 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
24830 20 20 20 2f 2a 20 72 65 73 20 3d 20 31 3b 20 2f     /* res = 1; /
24840 2f 20 41 6c 77 61 79 73 20 69 6e 69 74 69 61 6c  / Always initial
24850 69 7a 65 64 20 62 79 20 74 68 65 20 78 41 64 76  ized by the xAdv
24860 61 6e 63 65 28 29 20 63 61 6c 6c 20 2a 2f 0a 20  ance() call */. 
24870 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
24880 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
24890 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
248a0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20  pC->pCursor );. 
248b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
248c0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
248d0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
248e0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
248f0 65 4e 65 78 74 20 29 3b 0a 20 20 20 20 61 73 73  eNext );.    ass
24900 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24910 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
24920 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
24930 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
24940 6f 75 73 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ous );.    rc = 
24950 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
24960 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
24970 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e  es);.  }.  pC->n
24980 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
24990 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
249a0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
249b0 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  E;.  if( res==0 
249c0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
249d0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e  >p2 - 1;.    p->
249e0 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
249f0 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
24a00 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
24a10 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
24a20 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  ++;.#endif.  }. 
24a30 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
24a40 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63 68  d = 0;.  goto ch
24a50 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
24a60 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
24a70 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
24a80 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f   P3 * P5.** Syno
24a90 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
24aa0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
24ab0 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
24ac0 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
24ad0 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
24ae0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
24af0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
24b00 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
24b10 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
24b20 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
24b30 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
24b40 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
24b50 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
24b60 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
24b70 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
24b80 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
24b90 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
24ba0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
24bb0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
24bc0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
24bd0 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
24be0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
24bf0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
24c00 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
24c10 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
24c20 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20  SorterInsert:   
24c30 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61      /* in2 */.ca
24c40 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a  se OP_IdxInsert:
24c50 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
24c60 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24c70 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
24c80 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e   *pCrsr;.  int n
24c90 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Key;.  const cha
24ca0 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65  r *zKey;..  asse
24cb0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24cc0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24cd0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24d00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
24d10 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
24d20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
24d30 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
24d40 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
24d50 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
24d60 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
24d70 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
24d80 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
24d90 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  r;.  if( pOp->p5
24da0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
24db0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
24dc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
24dd0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
24de0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
24df0 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e   );.  rc = Expan
24e00 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69  dBlob(pIn2);.  i
24e10 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24e20 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73 53 6f   ){.    if( isSo
24e30 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24e40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24e50 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64 62  beSorterWrite(db
24e60 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20  , pC, pIn2);.   
24e70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b   }else{.      nK
24e80 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
24e90 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d      zKey = pIn2-
24ea0 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  >z;.      rc = s
24eb0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
24ec0 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e  t(pCrsr, zKey, n
24ed0 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70  Key, "", 0, 0, p
24ee0 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20  Op->p3, .       
24ef0 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
24f00 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
24f10 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
24f20 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
24f30 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
24f40 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
24f50 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
24f60 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
24f70 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24f80 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
24f90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24fa0 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
24fb0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
24fc0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
24fd0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2@P3].**.** The 
24fe0 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
24ff0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
25000 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
25010 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
25020 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
25030 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
25040 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
25050 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
25060 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
25070 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
25080 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
25090 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
250a0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
250b0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
250c0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
250d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
250e0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
250f0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
25100 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
25110 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
25120 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73  ursor)+1 );.  as
25130 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25140 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25150 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25160 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25170 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25180 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
25190 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
251a0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
251b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
251c0 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e  p->p5==0 );.  r.
251d0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
251e0 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
251f0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
25200 70 33 3b 0a 20 20 72 2e 66 6c 61 67 73 20 3d 20  p3;.  r.flags = 
25210 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
25220 4d 41 54 43 48 3b 0a 20 20 72 2e 61 4d 65 6d 20  MATCH;.  r.aMem 
25230 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
25240 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25250 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
25260 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
25270 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
25280 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
25290 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
252a0 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
252b0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
252c0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
252d0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
252e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
252f0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
25300 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25310 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
25320 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  sr);.  }.  asser
25330 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25340 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
25350 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25360 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62  CACHE_STALE;.  b
25370 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25380 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
25390 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
253a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
253b0 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  d.**.** Write in
253c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
253d0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
253e0 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
253f0 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
25400 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
25410 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
25420 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
25430 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
25440 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
25450 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
25460 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
25470 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
25480 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
25490 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
254a0 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
254b0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
254c0 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  IdxRowid: {     
254d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
254e0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
254f0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
25500 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
25510 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b  pC;.  i64 rowid;
25520 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
25530 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25540 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25550 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25560 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25570 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
25580 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
25590 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
255a0 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  rsr!=0 );.  pOut
255b0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
255c0 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ll;.  rc = sqlit
255d0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
255e0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
255f0 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61  VER(rc) ) goto a
25600 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25610 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  r;.  assert( pC-
25620 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25630 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25640 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
25650 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ;.  if( !pC->nul
25660 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 63 20 3d  lRow ){.    rc =
25670 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
25680 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20  owid(db, pCrsr, 
25690 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28  &rowid);.    if(
256a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
256b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
256c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
256d0 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
256e0 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20  >u.i = rowid;.  
256f0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
25700 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62  MEM_Int;.  }.  b
25710 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25720 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
25730 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
25740 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
25750 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
25760 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
25770 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
25780 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
25790 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
257a0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
257b0 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
257c0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
257d0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
257e0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
257f0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
25800 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
25810 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
25820 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
25830 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
25840 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
25850 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
25860 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
25870 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
25880 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
25890 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
258a0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
258b0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
258c0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
258d0 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
258e0 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
258f0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
25900 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
25910 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
25920 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
25930 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
25940 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
25950 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
25960 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
25970 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
25980 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
25990 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
259a0 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
259b0 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
259c0 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
259d0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
259e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
259f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
25a00 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
25a10 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
25a20 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
25a30 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
25a40 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
25a50 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
25a60 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
25a70 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
25a80 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
25a90 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
25aa0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
25ab0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
25ac0 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
25ad0 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
25ae0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
25af0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
25b00 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
25b10 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
25b20 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
25b30 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
25b40 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
25b50 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
25b60 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
25b70 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
25b80 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
25b90 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
25ba0 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74  n prior .** to t
25bb0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
25bc0 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f  This makes the o
25bd0 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
25be0 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f  IdxLE..*/.case O
25bf0 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
25c00 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
25c10 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20  e OP_IdxGE: {   
25c20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25c30 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25c40 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
25c50 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
25c60 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
25c70 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25c80 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25c90 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25ca0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25cb0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25cc0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
25cd0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
25ce0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
25cf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25d00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25d10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25d20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
25d30 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
25d40 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
25d50 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
25d60 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
25d70 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
25d80 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
25d90 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
25da0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 72 2e  Op->p5 ){.    r.
25db0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
25dc0 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43  _INCRKEY | UNPAC
25dd0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
25de0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
25df0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
25e00 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
25e10 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26    }.  r.aMem = &
25e20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
25e30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
25e40 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  UG.  { int i; fo
25e50 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
25e60 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
25e70 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
25e80 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
25e90 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  if.  rc = sqlite
25ea0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
25eb0 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
25ec0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
25ed0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b  ode==OP_IdxLT ){
25ee0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
25ef0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
25f00 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25f10 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20  e==OP_IdxGE );. 
25f20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
25f30 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20  if( res>0 ){.   
25f40 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25f50 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1 ;.  }.  break;
25f60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
25f70 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
25f80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
25f90 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
25fa0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
25fb0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
25fc0 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
25fd0 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
25fe0 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
25ff0 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
26000 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
26010 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26020 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
26030 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
26040 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
26050 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
26060 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
26070 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
26080 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
26090 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
260a0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
260b0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
260c0 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
260d0 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
260e0 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
260f0 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
26100 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
26110 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
26120 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
26130 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
26140 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
26150 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
26160 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
26170 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
26180 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
26190 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
261a0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
261b0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
261c0 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
261d0 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
261e0 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
261f0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26200 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
26210 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
26220 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
26230 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
26240 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
26250 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
26260 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
26270 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
26280 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
26290 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
262a0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
262b0 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
262c0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
262d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
262e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
262f0 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
26300 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
26310 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
26320 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ase */.  int iMo
26330 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b  ved;.  int iCnt;
26340 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a  .  Vdbe *pVdbe;.
26350 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73    int iDb;..  as
26360 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
26370 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  y==0 );.#ifndef 
26380 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26390 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
263a0 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
263b0 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
263c0 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
263d0 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
263e0 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
263f0 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
26400 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64  & pVdbe->bIsRead
26410 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62  er .     && pVdb
26420 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
26430 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
26440 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  0 .    ){.      
26450 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
26460 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
26470 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a   db->nVdbeRead;.
26480 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66  #endif.  pOut->f
26490 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
264a0 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b  .  if( iCnt>1 ){
264b0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
264c0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
264d0 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
264e0 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
264f0 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
26500 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
26510 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
26520 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
26530 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
26540 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
26550 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
26560 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
26570 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
26580 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
26590 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
265a0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
265b0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
265c0 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
265d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
265e0 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
265f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
26600 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
26610 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
26620 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62  ageMoved(db, iDb
26630 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70  , iMoved, pOp->p
26640 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c  1);.      /* All
26650 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72   OP_Destroy oper
26660 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20  ations occur on 
26670 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a  the same btree *
26680 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
26690 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
266a0 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63  lt==0 || resetSc
266b0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62  hemaOnFault==iDb
266c0 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65  +1 );.      rese
266d0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
266e0 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65   iDb+1;.    }.#e
266f0 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
26700 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26710 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
26720 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
26730 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
26740 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
26750 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
26760 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
26770 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
26780 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
26790 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
267a0 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
267b0 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
267c0 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
267d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
267e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
267f0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
26800 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26810 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
26820 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
26830 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
26840 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
26850 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
26860 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
26870 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
26880 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
26890 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
268a0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
268b0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
268c0 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
268d0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
268e0 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
268f0 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
26900 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
26910 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
26920 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
26930 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
26940 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
26950 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
26960 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
26970 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
26980 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26990 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
269a0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
269b0 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
269c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
269d0 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
269e0 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
269f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
26a00 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
26a10 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
26a20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26a30 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
26a40 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
26a50 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e  t nChange;. .  n
26a60 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
26a70 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
26a80 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
26a90 28 20 70 4f 70 2d 3e 70 31 21 3d 31 20 29 3b 0a  ( pOp->p1!=1 );.
26aa0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
26ab0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
26ac0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32  Mask)1)<<pOp->p2
26ad0 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))!=0 );.  rc = 
26ae0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
26af0 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
26b00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
26b10 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
26b20 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
26b30 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
26b40 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
26b50 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
26b60 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
26b70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
26b80 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
26b90 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
26ba0 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
26bb0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
26bc0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
26bd0 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
26be0 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
26bf0 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
26c00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26c10 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
26c20 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
26c30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
26c40 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a  2]=root iDb=P1.*
26c50 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
26c60 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
26c70 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
26c80 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
26c90 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
26ca0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
26cb0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
26cc0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
26cd0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
26ce0 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
26cf0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
26d00 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
26d10 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
26d20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
26d30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
26d40 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
26d50 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
26d60 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
26d70 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
26d80 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
26d90 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
26da0 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
26db0 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
26dc0 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
26dd0 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
26de0 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
26df0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
26e00 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
26e10 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
26e20 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
26e30 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
26e40 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
26e50 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26e60 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
26e70 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
26e80 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
26e90 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26ea0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
26eb0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
26ec0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
26ed0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
26ee0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
26ef0 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
26f00 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
26f10 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
26f20 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
26f30 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
26f40 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
26f50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
26f60 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
26f70 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
26f80 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
26f90 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
26fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
26fb0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
26fc0 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
26fd0 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
26fe0 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
26ff0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27000 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27010 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
27020 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
27030 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
27040 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
27050 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27060 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
27070 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
27080 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
27090 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
270a0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
270b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
270c0 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
270d0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
270e0 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
270f0 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
27100 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
27110 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
27120 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
27130 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
27140 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
27150 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
27160 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
27170 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
27180 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
27190 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
271a0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
271b0 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
271c0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
271d0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
271e0 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
271f0 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
27200 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
27210 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
27220 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
27230 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
27240 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
27250 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
27260 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
27270 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
27280 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
27290 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
272a0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
272b0 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
272c0 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
272d0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
272e0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
272f0 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
27300 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
27310 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
27320 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
27330 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
27340 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
27350 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
27360 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
27370 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
27380 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
27390 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
273a0 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
273b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
273c0 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
273d0 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
273e0 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
273f0 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
27400 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
27410 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
27420 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
27430 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
27440 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
27450 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
27460 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
27470 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
27480 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
27490 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
274a0 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
274b0 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
274c0 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
274d0 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
274e0 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
274f0 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
27500 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
27510 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
27520 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
27530 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
27540 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
27550 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
27560 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
27570 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
27580 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
27590 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
275a0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
275b0 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
275c0 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
275d0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
275e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
275f0 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
27600 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
27610 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
27620 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27630 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
27640 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
27650 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
27660 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
27670 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
27680 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
27690 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
276a0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
276b0 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
276c0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
276d0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
276e0 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
276f0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
27700 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
27710 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
27720 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
27730 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
27740 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
27750 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
27760 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
27770 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
27780 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
27790 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
277a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
277b0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
277c0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
277d0 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
277e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
277f0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
27800 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
27810 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
27820 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
27830 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
27840 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
27850 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
27860 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
27870 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
27880 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
27890 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
278a0 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
278b0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
278c0 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
278d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
278e0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
278f0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
27900 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
27910 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
27920 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
27930 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
27940 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
27950 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
27960 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
27970 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
27980 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
27990 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
279a0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
279b0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
279c0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
279d0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
279e0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
279f0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
27a00 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
27a10 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
27a20 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
27a30 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
27a40 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
27a50 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
27a60 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
27a70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
27a80 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
27a90 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
27aa0 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
27ab0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
27ac0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27ad0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
27ae0 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
27af0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
27b00 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
27b10 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
27b20 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
27b30 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
27b40 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
27b50 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
27b60 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
27b70 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
27b80 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
27b90 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
27ba0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
27bb0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
27bc0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
27bd0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
27be0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
27bf0 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
27c00 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
27c10 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
27c20 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27c30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27c40 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
27c50 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
27c60 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
27c70 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
27c80 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
27c90 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
27ca0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
27cb0 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
27cc0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
27cd0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
27ce0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
27cf0 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
27d00 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
27d10 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
27d20 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
27d30 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
27d40 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
27d50 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
27d60 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
27d70 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
27d80 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
27d90 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
27da0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27db0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
27dc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
27dd0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
27de0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
27df0 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
27e00 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
27e10 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
27e20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
27e30 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
27e40 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
27e50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
27e60 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
27e70 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
27e80 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
27e90 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
27ea0 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
27eb0 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
27ec0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
27ed0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
27ee0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
27ef0 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
27f00 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
27f10 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
27f20 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
27f30 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
27f40 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
27f50 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
27f60 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
27f70 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
27f80 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
27f90 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
27fa0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
27fb0 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
27fc0 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
27fd0 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
27fe0 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
27ff0 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
28000 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
28010 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
28020 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
28030 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
28040 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
28050 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
28060 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
28070 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
28080 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
28090 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
280a0 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
280b0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
280c0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
280d0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
280e0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
280f0 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
28100 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
28110 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
28120 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
28130 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
28140 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
28150 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
28160 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
28170 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
28180 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
28190 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
281a0 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
281b0 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
281c0 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
281d0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
281e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
281f0 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
28200 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
28210 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
28220 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
28230 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
28240 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
28250 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
28260 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
28270 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
28280 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
28290 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
282a0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
282b0 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
282c0 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
282d0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
282e0 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
282f0 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
28300 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
28310 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
28320 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
28330 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
28340 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
28350 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
28360 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
28370 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
28380 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
28390 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
283a0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
283b0 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
283c0 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
283d0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
283e0 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
283f0 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
28400 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
28410 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
28420 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
28430 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
28440 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
28450 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
28460 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
28470 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
28480 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  )<<pOp->p5))!=0 
28490 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
284a0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
284b0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
284c0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
284d0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284f0 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
28500 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
28510 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
28520 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
28530 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
28540 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
28550 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
28560 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
28570 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28580 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
28590 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
285a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
285b0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
285c0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
285d0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
285e0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
285f0 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
28600 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
28610 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
28620 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
28630 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
28640 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
28650 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
28660 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
28670 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
28680 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
28690 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
286a0 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
286b0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
286c0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
286d0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
286e0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
286f0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
28700 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
28710 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
28720 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
28730 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
28740 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
28750 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
28760 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
28770 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
28780 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28790 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
287a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
287b0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
287c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
287d0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
287e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
287f0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
28800 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
28810 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
28820 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
28830 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
28840 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
28850 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
28860 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
28870 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
28880 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
28890 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
288a0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
288b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
288c0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
288d0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
288e0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
288f0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
28900 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
28910 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
28920 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
28930 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
28940 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
28950 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
28960 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
28970 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
28980 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
28990 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
289a0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
289b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
289c0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
289d0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
289e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
289f0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
28a00 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
28a10 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
28a20 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
28a30 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
28a40 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
28a50 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
28a60 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
28a70 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28a80 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
28a90 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
28aa0 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
28ab0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
28ac0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
28ad0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
28ae0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28af0 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
28b00 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
28b10 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
28b20 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
28b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
28b40 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
28b50 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
28b60 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
28b70 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
28b80 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
28b90 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
28ba0 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
28bb0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
28bc0 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
28bd0 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
28be0 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
28bf0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
28c00 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
28c10 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
28c20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
28c30 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
28c40 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
28c50 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
28c60 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
28c70 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
28c80 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
28c90 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
28ca0 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
28cb0 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
28cc0 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65  case where succe
28cd0 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66  ssive sets.** of
28ce0 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65   integers, where
28cf0 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69   each set contai
28d00 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73  ns no duplicates
28d10 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66  . Each set.** of
28d20 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74   values is ident
28d30 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
28d40 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
28d50 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
28d60 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
28d70 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d  e final set P4=-
28d80 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65  1.  P4 must be e
28d90 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e  ither -1 or.** n
28da0 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f  on-negative.  Fo
28db0 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  r non-negative v
28dc0 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79  alues of P4 only
28dd0 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20   the lower 4.** 
28de0 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69  bits are signifi
28df0 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  cant..**.** This
28e00 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
28e10 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
28e20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
28e30 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
28e40 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a  * the rowset obj
28e50 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
28e60 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
28e70 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
28e80 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
28e90 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
28ea0 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
28eb0 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
28ec0 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
28ed0 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
28ee0 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
28ef0 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
28f00 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
28f10 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
28f20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
28f30 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
28f40 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
28f50 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
28f60 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
28f70 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
28f80 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
28f90 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
28fa0 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
28fb0 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
28fc0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
28fd0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
28fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
28ff0 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
29000 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
29010 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
29020 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
29030 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
29040 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
29050 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
29060 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
29070 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
29080 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
29090 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
290a0 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
290b0 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
290c0 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
290d0 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
290e0 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
290f0 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
29100 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
29110 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
29120 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
29130 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
29140 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
29150 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
29160 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
29170 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
29180 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
29190 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
291a0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
291b0 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
291c0 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
291d0 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
291e0 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
291f0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
29200 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a  n1->u.pRowSet, .
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
29230 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53  u8)(iSet>=0 ? iS
29240 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66 29  et & 0xf : 0xff)
29250 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
29280 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20   if( exists ){. 
29290 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
292a0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65  2 - 1;.      bre
292b0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
292c0 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
292d0 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
292e0 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
292f0 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
29300 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
29310 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
29320 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
29330 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
29340 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
29350 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65   *.**.** Execute
29360 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
29370 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50  gram passed as P
29380 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52  4 (type P4_SUBPR
29390 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50  OGRAM). .**.** P
293a0 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  1 contains the a
293b0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65  ddress of the me
293c0 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
293d0 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
293e0 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  t memory .** cel
293f0 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  l in an array of
29400 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20   values used as 
29410 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
29420 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32   sub-program. P2
29430 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68   .** contains th
29440 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  e address to jum
29450 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d  p to if the sub-
29460 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61  program throws a
29470 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63  n IGNORE .** exc
29480 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  eption using the
29490 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
294a0 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63  n. Register P3 c
294b0 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
294c0 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d  ess .** of a mem
294d0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73  ory cell in this
294e0 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d   (the parent) VM
294f0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
29500 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a   allocate the .*
29510 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  * memory require
29520 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62  d by the sub-vdb
29530 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a  e at runtime..**
29540 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
29550 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f  ter to the VM co
29560 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
29570 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  gger program..*/
29580 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
29590 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
295a0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
295b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
295c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
295d0 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
295e0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
295f0 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
29600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
29610 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
29620 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
29630 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
29640 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
29650 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
29660 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
29670 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
29680 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
296a0 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
296b0 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
296c0 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
296d0 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
296e0 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
296f0 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
29700 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
29710 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
29720 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
29730 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
29740 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
29750 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
29760 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
29770 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
29780 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
29790 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
297a0 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
297b0 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
297c0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
297d0 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
297e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
297f0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
29800 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
29810 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
29820 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
29830 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
29840 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
29850 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
29860 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
29870 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
29880 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
29890 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
298a0 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
298b0 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
298c0 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
298d0 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
298e0 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
298f0 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
29900 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
29910 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
29920 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
29930 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
29940 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
29950 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
29960 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
29970 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
29980 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
29990 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
299a0 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
299b0 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
299c0 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
299d0 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
299e0 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
299f0 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
29a00 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
29a10 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
29a20 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
29a30 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
29a40 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
29a50 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
29a60 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
29a70 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
29a80 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
29a90 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
29aa0 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
29ab0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
29ac0 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
29ad0 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
29ae0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
29af0 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
29b00 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
29b10 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
29b20 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
29b30 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
29b40 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
29b50 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
29b60 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
29b70 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
29b80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
29b90 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
29ba0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
29bb0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f  ErrMsg, db, "too
29bc0 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
29bd0 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
29be0 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  n");.    break;.
29bf0 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
29c00 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
29c10 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
29c20 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
29c30 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
29c40 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
29c50 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
29c60 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
29c70 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
29c80 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
29c90 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
29ca0 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
29cb0 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
29cc0 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
29cd0 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
29ce0 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
29cf0 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
29d00 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
29d10 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
29d20 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
29d30 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
29d40 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
29d50 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
29d60 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
29d70 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
29d80 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
29d90 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
29da0 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
29db0 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
29dc0 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
29dd0 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
29de0 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
29df0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
29e00 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
29e10 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
29e20 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
29e30 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
29e40 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
29e50 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
29e60 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
29e70 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
29e80 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65  >nCsr;.    nByte
29e90 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
29ea0 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
29eb0 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
29ec0 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
29ee0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
29ef0 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
29f00 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
29f10 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
29f20 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
29f30 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
29f40 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
29f50 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
29f60 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
29f70 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
29f80 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
29f90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
29fa0 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
29fb0 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
29fc0 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
29fd0 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
29fe0 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
29ff0 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2a000 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2a010 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2a020 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2a030 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2a040 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2a050 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  pc;.    pFrame->
2a060 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
2a070 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
2a080 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
2a090 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
2a0a0 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
2a0b0 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
2a0c0 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
2a0d0 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
2a0e0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
2a0f0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
2a100 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
2a110 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
2a120 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ken;.    pFrame-
2a130 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >aOnceFlag = p->
2a140 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70  aOnceFlag;.    p
2a150 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67  Frame->nOnceFlag
2a160 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b   = p->nOnceFlag;
2a170 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
2a180 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2a190 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
2a1a0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
2a1b0 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
2a1c0 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
2a1d0 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
2a1e0 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
2a1f0 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 3b 0a   = MEM_Invalid;.
2a200 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
2a210 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
2a220 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
2a230 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
2a240 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2a250 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
2a260 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2a270 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a  e->nChildMem );.
2a280 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2a290 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2a2a0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
2a2b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d  .    assert( pc=
2a2c0 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
2a2d0 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
2a2e0 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
2a2f0 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
2a300 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
2a310 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
2a320 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
2a330 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
2a340 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  e;.  p->nChange 
2a350 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2a360 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2a370 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56  aMem = aMem = &V
2a380 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2a390 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d  me)[-1];.  p->nM
2a3a0 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
2a3b0 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
2a3c0 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
2a3d0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
2a3e0 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
2a3f0 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
2a400 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70  [p->nMem+1];.  p
2a410 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2a420 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2a430 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2a440 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2a450 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2a460 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2a470 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2a480 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2a490 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31  nOnce;.  pc = -1
2a4a0 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f  ;.  memset(p->aO
2a4b0 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e  nceFlag, 0, p->n
2a4c0 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72  OnceFlag);..  br
2a4d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a4e0 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
2a4f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
2a500 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
2a510 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
2a520 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
2a530 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
2a540 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2a550 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
2a560 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
2a570 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
2a580 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
2a590 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
2a5a0 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
2a5b0 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
2a5c0 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
2a5d0 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
2a5e0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
2a5f0 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
2a600 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
2a610 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
2a620 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
2a630 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2a640 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
2a650 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
2a660 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
2a670 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
2a680 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2a690 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2a6a0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2a6b0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
2a6c0 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
2a6d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2a6e0 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
2a6f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2a700 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2a710 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2a720 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
2a730 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
2a740 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
2a750 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2a760 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
2a770 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
2a780 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
2a790 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
2a7a0 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
2a7b0 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
2a7c0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
2a7d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a7e0 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
2a7f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a800 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
2a810 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
2a820 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
2a830 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
2a840 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
2a850 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
2a860 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2a870 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
2a880 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
2a890 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
2a8a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2a8b0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2a8c0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
2a8d0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
2a8e0 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
2a8f0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2a900 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
2a910 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
2a920 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
2a930 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2a940 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
2a950 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2a960 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
2a970 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
2a980 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
2a990 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2a9a0 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
2a9b0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2a9c0 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
2a9d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
2a9e0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
2a9f0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
2aa00 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2aa10 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
2aa20 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
2aa30 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2aa40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
2aa50 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
2aa60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2aa70 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
2aa80 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2aa90 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
2aaa0 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
2aab0 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
2aac0 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
2aad0 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
2aae0 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2aaf0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
2ab00 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2ab10 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
2ab20 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
2ab30 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
2ab40 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
2ab50 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2ab60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
2ab70 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2ab80 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
2ab90 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
2aba0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
2abb0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2abc0 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
2abd0 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
2abe0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
2abf0 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
2ac00 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
2ac10 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
2ac20 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2ac30 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2ac40 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
2ac50 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
2ac60 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2ac70 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2ac80 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66      if( db->nDef
2ac90 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
2aca0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2acb0 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2acc0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
2acd0 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  e{.    if( p->nF
2ace0 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2acf0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2ad00 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2ad10 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
2ad20 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ad30 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2ad40 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2ad50 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2ad60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2ad70 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2ad80 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2ad90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2ada0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
2adb0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
2adc0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2add0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2ade0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2adf0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2ae00 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2ae10 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2ae20 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2ae30 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2ae40 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2ae50 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2ae60 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2ae70 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2ae80 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2ae90 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2aea0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2aeb0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2aec0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2aed0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2aee0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2aef0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2af00 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2af10 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2af20 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2af30 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2af40 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
2af50 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
2af60 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
2af70 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
2af80 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
2af90 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
2afa0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
2afb0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2afc0 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
2afd0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2afe0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
2aff0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
2b000 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
2b010 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2b020 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
2b030 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2b040 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
2b050 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2b060 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
2b070 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2b080 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
2b090 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
2b0a0 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
2b0b0 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
2b0c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b0d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2b0e0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2b0f0 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
2b100 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
2b110 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b120 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74  : if r[P1]>0 got
2b130 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  o P2.**.** If th
2b140 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b150 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
2b160 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20  reater, jump to 
2b170 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  P2..**.** It is 
2b180 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
2b190 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2b1a0 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
2b1b0 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
2b1c0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2b1d0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
2b1e0 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
2b1f0 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
2b200 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
2b210 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2b220 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2b230 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b240 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2b250 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2b260 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
2b270 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
2b280 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2b290 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b2a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
2b2b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2b2c0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2b2d0 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]<0 goto P2.**.
2b2e0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2b2f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2b300 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
2b310 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2b320 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2b330 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2b340 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2b350 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2b360 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2b370 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2b380 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2b390 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2b3a0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2b3b0 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
2b3c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b3d0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b3e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b3f0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b400 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b410 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
2b420 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2b430 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2b440 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b450 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
2b460 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2b470 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33  opsis: r[P1]+=P3
2b480 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f  , if r[P1]==0 go
2b490 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  to P2.**.** The 
2b4a0 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
2b4b0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b4c0 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
2b4d0 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76  l P3 to the.** v
2b4e0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2b4f0 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73   P1.  If the res
2b500 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30  ult is exactly 0
2b510 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2b520 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2b530 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2b540 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2b550 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2b560 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2b570 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2b580 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2b590 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2b5a0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2b5b0 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
2b5c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2b5d0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2b5e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b5f0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2b600 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2b610 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
2b620 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49  Op->p3;.  if( pI
2b630 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
2b640 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2b650 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2b660 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b670 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2b680 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2b690 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2b6a0 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2b6b0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2b6c0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2b6d0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2b6e0 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2b6f0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2b700 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2b710 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2b720 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2b730 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2b740 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2b750 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2b760 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2b770 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2b780 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2b790 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2b7a0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2b7b0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2b7c0 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2b7d0 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2b7e0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2b7f0 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2b800 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2b810 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
2b820 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
2b830 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
2b840 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
2b850 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65  );.  pRec = &aMe
2b860 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
2b870 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
2b880 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
2b890 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
2b8a0 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
2b8b0 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pRec++){.    ass
2b8c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2b8d0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56  pRec) );.    apV
2b8e0 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
2b8f0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2b900 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20  ge(p, pRec);.   
2b910 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b920 74 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a  toreType(pRec);.
2b930 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20    }.  ctx.pFunc 
2b940 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
2b950 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b960 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2b970 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2b980 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70  rsor) );.  ctx.p
2b990 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d  Mem = pMem = &aM
2b9a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2b9b0 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e  Mem->n++;.  ctx.
2b9c0 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
2b9d0 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20  ll;.  ctx.s.z = 
2b9e0 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
2b9f0 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  oc = 0;.  ctx.s.
2ba00 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
2ba10 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
2ba20 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
2ba30 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20  ctx.pColl = 0;. 
2ba40 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20   ctx.skipFlag = 
2ba50 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
2ba60 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
2ba70 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
2ba80 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
2ba90 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
2baa0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2bab0 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
2bac0 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
2bad0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2bae0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2baf0 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
2bb00 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
2bb10 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
2bb20 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
2bb30 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
2bb40 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
2bb50 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
2bb60 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
2bb70 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2bb80 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2bb90 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2bba0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
2bbb0 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
2bbc0 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
2bbd0 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69   }.  if( ctx.ski
2bbe0 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
2bbf0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2bc00 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2bc10 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
2bc20 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
2bc30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
2bc40 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2bc50 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73  i], 1);.  }..  s
2bc60 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2bc70 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20  ease(&ctx.s);.. 
2bc80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2bc90 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
2bca0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
2bcb0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
2bcc0 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
2bcd0 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
2bce0 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
2bcf0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2bd00 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
2bd10 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
2bd20 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
2bd30 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
2bd40 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
2bd50 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
2bd60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
2bd70 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
2bd80 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
2bd90 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2bda0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2bdb0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
2bdc0 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
2bdd0 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
2bde0 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
2bdf0 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
2be00 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
2be10 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
2be20 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
2be30 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
2be40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
2be50 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
2be60 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
2be70 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
2be80 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
2be90 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
2bea0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
2beb0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
2bec0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
2bed0 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
2bee0 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
2bef0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
2bf00 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
2bf10 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d  nCursor) );.  pM
2bf20 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2bf30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
2bf40 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
2bf50 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
2bf60 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
2bf70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
2bf80 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
2bf90 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
2bfa0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2bfb0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2bfc0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2bfd0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2bfe0 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
2bff0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
2c000 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2c010 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
2c020 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2c030 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
2c040 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2c050 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
2c060 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2c070 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2c080 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2c090 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
2c0a0 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
2c0b0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
2c0c0 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
2c0d0 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
2c0e0 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
2c0f0 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
2c100 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
2c110 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
2c120 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
2c130 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2c140 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72  SIVE, FULL.** or
2c150 20 52 45 53 54 41 52 54 2e 20 20 57 72 69 74 65   RESTART.  Write
2c160 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
2c170 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
2c180 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
2c190 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
2c1a0 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
2c1b0 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
2c1c0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
2c1d0 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
2c1e0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2c1f0 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
2c200 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
2c210 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
2c220 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
2c230 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
2c240 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
2c250 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
2c260 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
2c270 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
2c280 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
2c290 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
2c2a0 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
2c2b0 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
2c2c0 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
2c2d0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2c300 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2c310 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c330 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
2c340 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c360 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
2c370 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
2c380 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2c390 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
2c3a0 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
2c3b0 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
2c3c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
2c3d0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2c3e0 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
2c3f0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2c400 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
2c410 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
2c420 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2c430 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
2c440 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
2c450 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2c460 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2c470 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
2c480 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
2c490 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
2c4a0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2c4b0 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
2c4c0 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
2c4d0 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
2c4e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
2c4f0 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
2c500 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2c510 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
2c520 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
2c530 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
2c540 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
2c550 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c560 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
2c570 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
2c580 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
2c590 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
2c5a0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
2c5b0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
2c5c0 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
2c5d0 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
2c5e0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
2c5f0 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
2c600 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
2c610 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
2c620 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
2c630 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
2c640 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
2c650 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
2c660 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
2c670 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
2c680 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
2c690 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
2c6a0 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
2c6b0 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
2c6c0 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
2c6d0 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
2c6e0 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
2c6f0 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
2c700 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
2c710 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2c720 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
2c730 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
2c740 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2c750 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
2c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c770 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
2c780 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
2c790 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
2c7a0 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
2c7b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
2c7c0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
2c7d0 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
2c7e0 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
2c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c800 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
2c810 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
2c840 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
2c850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c860 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74  OMIT_WAL.  const
2c870 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
2c880 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
2c890 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
2c8a0 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
2c8b0 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77  /.#endif..  eNew
2c8c0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
2c8d0 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
2c8e0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
2c8f0 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
2c900 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2c910 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
2c920 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2c930 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c940 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
2c950 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2c960 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
2c970 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
2c980 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2c990 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
2c9a0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2c9b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2c9c0 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
2c9d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c9e0 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
2c9f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ca00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2ca10 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2ca20 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2ca30 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
2ca40 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2ca50 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
2ca60 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
2ca70 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
2ca80 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
2ca90 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2caa0 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
2cab0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cac0 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
2cad0 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
2cae0 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
2caf0 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
2cb00 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
2cb10 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
2cb20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2cb30 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
2cb40 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
2cb50 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
2cb60 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
2cb70 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
2cb80 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
2cb90 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
2cba0 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
2cbb0 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
2cbc0 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
2cbd0 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
2cbe0 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
2cbf0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2cc00 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2cc10 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
2cc20 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
2cc30 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
2cc40 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
2cc50 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
2cc60 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
2cc70 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
2cc80 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
2cc90 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
2cca0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2ccb0 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
2ccc0 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
2ccd0 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
2cce0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2ccf0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2cd00 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
2cd10 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
2cd20 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
2cd30 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
2cd40 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2cd50 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2cd60 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2cd70 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2cd80 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22  db, .          "
2cd90 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
2cda0 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
2cdb0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
2cdc0 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
2cdd0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2cde0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
2cdf0 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
2ce00 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
2ce10 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
2ce20 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
2ce30 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2ce40 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
2ce50 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
2ce60 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
2ce70 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
2ce80 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
2ce90 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
2cea0 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
2ceb0 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
2cec0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
2ced0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
2cee0 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
2cef0 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
2cf00 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
2cf10 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
2cf20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
2cf30 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
2cf40 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
2cf50 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
2cf60 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
2cf70 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
2cf80 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
2cf90 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2cfa0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2cfb0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2cfc0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2cfd0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
2cfe0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
2cff0 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
2d000 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d010 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
2d020 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
2d030 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
2d040 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
2d050 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
2d060 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
2d070 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
2d080 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
2d090 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2d0a0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
2d0b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d0c0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
2d0d0 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
2d0e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
2d0f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2d100 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
2d110 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
2d120 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
2d130 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
2d140 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
2d150 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
2d160 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
2d170 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
2d180 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
2d190 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
2d1a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2d1b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2d1c0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
2d1d0 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
2d1e0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d1f0 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
2d200 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2d210 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
2d220 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d230 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
2d240 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2d250 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20  Old;.  }.  eNew 
2d260 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
2d270 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2d280 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
2d290 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
2d2a0 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p2];.  pOut->fl
2d2b0 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
2d2c0 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
2d2d0 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
2d2e0 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
2d2f0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
2d300 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
2d310 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
2d320 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
2d330 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
2d340 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
2d350 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2d360 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
2d370 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
2d380 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2d390 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
2d3a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2d3b0 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
2d3c0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2d3d0 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
2d3e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
2d3f0 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
2d400 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
2d410 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
2d420 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
2d430 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
2d440 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
2d450 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
2d460 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
2d470 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
2d480 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
2d490 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
2d4a0 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
2d4b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2d4c0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
2d4d0 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
2d4e0 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
2d4f0 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  , db);.  break;.
2d500 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
2d510 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2d520 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
2d530 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
2d540 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
2d550 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
2d560 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
2d570 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
2d580 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
2d590 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
2d5a0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
2d5b0 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
2d5c0 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
2d5d0 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
2d5e0 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2d5f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d600 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2d610 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
2d620 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
2d630 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
2d640 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
2d650 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2d660 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2d670 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
2d680 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
2d690 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
2d6a0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
2d6b0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2d6c0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20  nly==0 );.  pBt 
2d6d0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2d6e0 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73  1].pBt;.  rc = s
2d6f0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56  qlite3BtreeIncrV
2d700 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66  acuum(pBt);.  if
2d710 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
2d720 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  E ){.    pc = pO
2d730 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72  p->p2 - 1;.    r
2d740 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2d750 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2d760 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
2d770 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
2d780 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
2d790 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
2d7a0 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20  ments to become 
2d7b0 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69  expired. An expi
2d7c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
2d7d0 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65   fails with an e
2d7e0 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c  rror code of SQL
2d7f0 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74  ITE_SCHEMA if it
2d800 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65   is ever execute
2d810 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74  d .** (via sqlit
2d820 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a  e3_step())..** .
2d830 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
2d840 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
2d850 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
2d860 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
2d870 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
2d880 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
2d890 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
2d8a0 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65  tatement is affe
2d8b0 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f  cted. .*/.case O
2d8c0 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
2d8d0 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
2d8e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
2d8f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2d900 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
2d910 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
2d920 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2d930 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2d940 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2d950 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
2d960 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
2d970 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
2d980 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
2d990 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
2d9a0 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
2d9b0 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
2d9c0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
2d9d0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
2d9e0 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
2d9f0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
2da00 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
2da10 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
2da20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
2da30 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
2da40 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
2da50 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
2da60 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
2da70 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
2da80 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
2da90 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
2daa0 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
2dab0 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
2dac0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
2dad0 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
2dae0 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
2daf0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
2db00 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
2db10 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2db20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
2db30 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
2db40 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
2db50 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
2db60 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
2db70 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
2db80 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
2db90 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
2dba0 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
2dbb0 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
2dbc0 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
2dbd0 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
2dbe0 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
2dbf0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
2dc00 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
2dc10 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
2dc20 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
2dc30 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
2dc40 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
2dc50 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
2dc60 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  <p1))!=0 );.    
2dc70 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
2dc80 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
2dc90 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
2dca0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2dcb0 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
2dcc0 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
2dcd0 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
2dce0 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
2dcf0 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
2dd00 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e  KED ){.      con
2dd10 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70  st char *z = pOp
2dd20 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71  ->p4.z;.      sq
2dd30 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2dd40 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2dd50 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
2dd60 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20  is locked: %s", 
2dd70 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  z);.    }.  }.  
2dd80 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2dd90 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
2dda0 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a  HARED_CACHE */..
2ddb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ddc0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ddd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67  ./* Opcode: VBeg
2dde0 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  in * * * P4 *.**
2ddf0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
2de00 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
2de10 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2de20 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c  ture. If so, cal
2de30 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e  l the .** xBegin
2de40 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
2de50 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
2de60 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e  so, whether or n
2de70 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68  ot P4 is set, ch
2de80 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73  eck that this is
2de90 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65   not being calle
2dea0 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e  d from.** within
2deb0 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61   a callback to a
2dec0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78   virtual table x
2ded0 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49  Sync() method. I
2dee0 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72  f it is, the err
2def0 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20  or.** code will 
2df00 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
2df10 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65  _LOCKED..*/.case
2df20 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20   OP_VBegin: {.  
2df30 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20  VTable *pVTab;. 
2df40 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVTab = pOp->p4
2df50 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
2df60 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2df70 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66  db, pVTab);.  if
2df80 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65  ( pVTab ) sqlite
2df90 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2dfa0 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
2dfb0 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2dfc0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2dfd0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2dfe0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2dff0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e000 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e010 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
2e020 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2e030 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2e040 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2e050 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
2e060 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
2e070 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
2e080 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2e090 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
2e0a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2e0b0 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
2e0c0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2e0d0 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
2e0e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2e0f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2e100 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2e110 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2e120 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e130 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2e140 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
2e150 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2e160 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2e170 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2e180 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
2e190 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
2e1a0 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
2e1b0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2e1c0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
2e1d0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2e1e0 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
2e1f0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2e200 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
2e210 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2e220 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2e230 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2e240 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e250 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e260 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2e270 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e280 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2e290 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
2e2a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2e2b0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2e2c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2e2d0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2e2e0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2e2f0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2e300 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
2e310 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
2e320 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
2e330 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
2e340 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
2e350 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
2e360 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
2e370 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2e380 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
2e390 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2e3a0 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2e3b0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2e3c0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2e3d0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
2e3e0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2e3f0 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
2e400 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2e410 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2e420 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2e430 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2e440 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2e450 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2e460 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2e470 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2e480 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2e490 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2e4a0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
2e4b0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2e4c0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2e4d0 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2e4e0 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
2e4f0 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
2e500 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
2e510 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
2e520 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2e530 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20  b = pVtab;..    
2e540 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
2e550 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
2e560 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61   */.    pCur = a
2e570 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
2e580 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
2e590 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
2e5a0 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
2e5b0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
2e5c0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
2e5d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
2e5e0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2e5f0 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
2e600 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
2e610 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2e620 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e630 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2e640 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2e650 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2e660 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e670 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2e680 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
2e690 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2e6a0 3a 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20 7a 50  : iPlan=r[P3] zP
2e6b0 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50  lan='P4'.**.** P
2e6c0 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
2e6d0 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
2e6e0 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
2e6f0 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2e700 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
2e710 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
2e720 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
2e730 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
2e740 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
2e750 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
2e760 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
2e770 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
2e780 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
2e790 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
2e7a0 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
2e7b0 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
2e7c0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
2e7d0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
2e7e0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2e7f0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2e800 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
2e810 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
2e820 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
2e830 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
2e840 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
2e850 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
2e860 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
2e870 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
2e880 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
2e890 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
2e8a0 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
2e8b0 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
2e8c0 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
2e8d0 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
2e8e0 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
2e8f0 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
2e900 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
2e910 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
2e920 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
2e930 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
2e940 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
2e950 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
2e960 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
2e970 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
2e980 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
2e990 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
2e9a0 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
2e9b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
2e9c0 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
2e9d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
2e9e0 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
2e9f0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2ea00 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2ea10 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20   Mem *pQuery;.  
2ea20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71  Mem *pArgc;.  sq
2ea30 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2ea40 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2ea50 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2ea60 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72  pVtab;.  VdbeCur
2ea70 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74  sor *pCur;.  int
2ea80 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   res;.  int i;. 
2ea90 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20   Mem **apArg;.. 
2eaa0 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b   pQuery = &aMem[
2eab0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
2eac0 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
2ead0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2eae0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2eaf0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2eb00 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45  (pQuery) );.  RE
2eb10 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2eb20 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
2eb30 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2eb40 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2eb50 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43  pVtabCursor = pC
2eb60 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b  ur->pVtabCursor;
2eb70 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62  .  pVtab = pVtab
2eb80 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2eb90 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2eba0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
2ebb0 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
2ebc0 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
2ebd0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
2ebe0 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
2ebf0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
2ec00 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
2ec10 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
2ec20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
2ec30 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
2ec40 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
2ec50 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
2ec60 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
2ec70 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20  ethod */.  {.   
2ec80 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70   res = 0;.    ap
2ec90 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2eca0 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69      for(i = 0; i
2ecb0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2ecc0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
2ecd0 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20  Argc[i+1];.     
2ece0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ecf0 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69  toreType(apArg[i
2ed00 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ]);.    }..    p
2ed10 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2ed20 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
2ed30 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
2ed40 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
2ed50 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
2ed60 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
2ed70 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2ed80 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
2ed90 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2eda0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
2edb0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2edc0 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
2edd0 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
2ede0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
2edf0 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20   }..    if( res 
2ee00 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
2ee10 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
2ee20 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
2ee30 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65  lRow = 0;..  bre
2ee40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2ee50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ee60 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2ee70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ee80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2ee90 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
2eea0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2eeb0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
2eec0 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
2eed0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2eee0 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2eef0 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2ef00 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2ef10 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2ef20 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2ef30 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2ef40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2ef50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2ef60 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2ef70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2ef80 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2ef90 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2efa0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2efb0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2efc0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2efd0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2efe0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2eff0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2f000 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2f010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f020 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2f030 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2f040 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
2f050 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2f060 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
2f070 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
2f080 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2f090 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
2f0a0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2f0b0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
2f0c0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2f0d0 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2f0e0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2f0f0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2f100 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2f110 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
2f120 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
2f130 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
2f140 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
2f150 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
2f160 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
2f170 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
2f180 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
2f190 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
2f1a0 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
2f1b0 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
2f1c0 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
2f1d0 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
2f1e0 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
2f1f0 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
2f200 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
2f210 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
2f220 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
2f230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2f240 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
2f250 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
2f260 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
2f270 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
2f280 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ..  rc = pModule
2f290 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
2f2a0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
2f2b0 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
2f2c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
2f2d0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
2f2e0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
2f2f0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
2f300 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
2f310 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
2f320 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
2f330 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
2f340 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20  ction to the P3 
2f350 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a  register. We.  *
2f360 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64  * do this regard
2f370 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
2f380 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  or not an error 
2f390 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75  occurred to ensu
2f3a0 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61  re any.  ** dyna
2f3b0 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  mic allocation i
2f3c0 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20  n sContext.s (a 
2f3d0 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20  Mem struct) is  
2f3e0 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20  released..  */. 
2f3f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2f400 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e  geEncoding(&sCon
2f410 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  text.s, encoding
2f420 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f430 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26  MemMove(pDest, &
2f440 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52  sContext.s);.  R
2f450 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2f460 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
2f470 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2f480 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
2f490 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2f4a0 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
2f4b0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2f4c0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2f4d0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2f4e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f4f0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2f500 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2f510 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2f520 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
2f530 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
2f540 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
2f550 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
2f560 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
2f570 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
2f580 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2f590 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
2f5a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2f5b0 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
2f5c0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
2f5d0 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
2f5e0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
2f5f0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2f600 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2f610 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
2f620 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
2f630 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2f640 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2f650 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2f660 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
2f670 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2f680 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
2f690 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2f6a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2f6b0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2f6c0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75  sor );.  if( pCu
2f6d0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2f6e0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2f6f0 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2f700 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2f710 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2f720 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2f730 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2f740 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
2f750 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
2f760 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
2f770 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
2f780 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
2f790 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
2f7a0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
2f7b0 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2f7c0 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
2f7d0 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
2f7e0 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
2f7f0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
2f800 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
2f810 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
2f820 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
2f830 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
2f840 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
2f850 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
2f860 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
2f870 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
2f880 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
2f890 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
2f8a0 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
2f8b0 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74  ..  */.  p->inVt
2f8c0 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2f8d0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
2f8e0 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43  ext(pCur->pVtabC
2f8f0 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56  ursor);.  p->inV
2f900 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2f910 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f920 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2f930 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
2f940 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2f950 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2f960 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2f970 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  rsor);.  }..  if
2f980 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
2f990 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
2f9a0 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
2f9b0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2f9c0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  2 - 1;.  }.  got
2f9d0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2f9e0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
2f9f0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2fa00 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2fa10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fa20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fa30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
2fa40 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
2fa50 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2fa60 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2fa70 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2fa80 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2fa90 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2faa0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2fab0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2fac0 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
2fad0 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
2fae0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
2faf0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
2fb00 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
2fb10 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
2fb20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
2fb30 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
2fb40 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2fb50 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
2fb60 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
2fb70 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2fb80 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
2fb90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2fba0 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
2fbb0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
2fbc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
2fbd0 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
2fbe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2fbf0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2fc00 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2fc10 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
2fc20 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
2fc30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
2fc40 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
2fc50 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
2fc60 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
2fc70 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
2fc80 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
2fc90 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
2fca0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2fcb0 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
2fcc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2fcd0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2fce0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
2fcf0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
2fd00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2fd10 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
2fd20 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
2fd30 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
2fd40 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
2fd50 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
2fd60 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
2fd70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
2fd80 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2fd90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fda0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fdb0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
2fdc0 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
2fdd0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2fde0 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a  data=r[P3@P2].**
2fdf0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2fe00 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2fe10 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2fe20 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2fe30 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2fe40 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2fe50 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2fe60 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
2fe70 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
2fe80 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
2fe90 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
2fea0 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
2feb0 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
2fec0 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
2fed0 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
2fee0 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
2fef0 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
2ff00 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
2ff10 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
2ff20 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
2ff30 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
2ff40 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
2ff50 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
2ff60 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
2ff70 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
2ff80 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
2ff90 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
2ffa0 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
2ffb0 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
2ffc0 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
2ffd0 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
2ffe0 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
2fff0 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
30000 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
30010 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
30020 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
30030 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
30040 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
30050 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
30060 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
30070 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
30080 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
30090 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
300a0 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
300b0 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
300c0 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
300d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
300e0 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
300f0 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
30100 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
30110 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
30120 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
30130 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
30140 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
30150 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
30160 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
30170 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
30180 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
30190 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
301a0 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
301b0 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
301c0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
301d0 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
301e0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
301f0 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
30200 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
30210 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
30220 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
30230 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
30240 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
30250 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
30260 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
30270 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
30280 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
30290 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
302a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
302b0 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
302c0 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
302d0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
302e0 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
302f0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
30300 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
30310 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
30320 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
30330 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
30340 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
30350 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
30360 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
30370 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
30380 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
30390 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
303a0 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
303b0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
303c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
303d0 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
303e0 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
303f0 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74  te) ){.    u8 vt
30400 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64  abOnConflict = d
30410 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
30420 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  t;.    apArg = p
30430 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
30440 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
30450 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
30460 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
30470 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
30480 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20  Valid(pX) );.   
30490 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
304a0 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20  nge(p, pX);.    
304b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
304c0 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20  StoreType(pX);. 
304d0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
304e0 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
304f0 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
30500 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
30510 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
30520 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
30530 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
30540 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
30550 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
30560 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
30570 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
30580 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
30590 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
305a0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
305b0 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
305c0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
305d0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
305e0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
305f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
30600 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
30610 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
30620 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
30630 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
30640 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
30650 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
30660 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
30670 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
30680 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
30690 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
306a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
306b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
306c0 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
306d0 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
306e0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
306f0 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
30700 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
30710 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
30720 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
30730 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
30740 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
30750 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30760 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
30770 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
30780 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
30790 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
307a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
307b0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
307c0 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
307d0 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
307e0 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
307f0 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
30800 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
30810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
30820 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
30830 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
30840 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
30850 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
30860 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
30870 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
30880 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
30890 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
308a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
308b0 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
308c0 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
308d0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
308e0 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
308f0 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
30900 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
30910 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
30920 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
30930 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
30940 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
30950 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
30960 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
30970 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
30980 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
30990 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
309a0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
309b0 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
309c0 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
309d0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
309e0 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
309f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
30a00 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
30a10 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
30a20 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
30a30 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
30a40 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
30a50 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
30a60 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
30a70 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
30a80 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
30a90 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
30aa0 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
30ab0 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
30ac0 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
30ad0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
30ae0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
30af0 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
30b00 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
30b10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
30b20 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
30b30 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
30b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65  /* Opcode: Trace
30b50 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
30b60 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
30b70 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
30b80 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
30b90 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
30ba0 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
30bb0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
30bc0 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
30bd0 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
30be0 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f  lback..*/.case O
30bf0 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61  P_Trace: {.  cha
30c00 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
30c10 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d  r *z;..  if( db-
30c20 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70  >xTrace.   && !p
30c30 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20  ->doingRerun.   
30c40 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
30c50 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
30c60 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
30c70 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20  =0.  ){.    z = 
30c80 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e  sqlite3VdbeExpan
30c90 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b  dSql(p, zTrace);
30ca0 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
30cb0 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
30cc0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
30cd0 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d  Free(db, z);.  }
30ce0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
30cf0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20  SE_FCNTL_TRACE. 
30d00 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e   zTrace = (pOp->
30d10 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
30d20 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69   : p->zSql);.  i
30d30 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20  f( zTrace ){.   
30d40 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28   int i;.    for(
30d50 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
30d60 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
30d70 28 28 31 3c 3c 69 29 20 26 20 70 2d 3e 62 74 72  ((1<<i) & p->btr
30d80 65 65 4d 61 73 6b 29 3d 3d 30 20 29 20 63 6f 6e  eeMask)==0 ) con
30d90 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
30da0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
30db0 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
30dc0 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
30dd0 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
30de0 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
30df0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
30e00 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
30e10 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
30e20 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
30e30 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
30e40 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
30e50 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
30e60 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
30e70 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
30e80 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
30e90 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
30ea0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
30eb0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
30ec0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30ed0 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61  _DEBUG */.  brea
30ee0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
30ef0 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
30f00 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
30f10 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
30f20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
30f30 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
30f40 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
30f50 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
30f60 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
30f70 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
30f80 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
30f90 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
30fa0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
30fb0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
30fc0 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
30fd0 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
30fe0 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
30ff0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
31000 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
31010 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
31020 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
31030 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
31040 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
31050 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
31060 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
31070 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
31080 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
31090 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
310a0 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
310b0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
310c0 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
310d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
310e0 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
310f0 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
31100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31140 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
31150 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
31160 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
31170 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
31180 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
31190 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
311a0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
311b0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
311c0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
311d0 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
311e0 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
311f0 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
31200 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
31210 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
31220 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
31230 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
31240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
31280 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
31290 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
312a0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
312b0 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
312c0 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
312d0 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
312e0 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
312f0 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
31300 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
31310 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
31320 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
31330 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
31340 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
31350 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f  out, origPc, &aO
31360 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
31370 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
31380 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
31390 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
313a0 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
313b0 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
313c0 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
313d0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
313e0 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
313f0 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
31400 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
31410 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
31420 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
31430 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
31440 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
31450 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
31460 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
31470 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
31480 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
31490 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
314a0 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
314b0 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
314c0 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
314d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
314e0 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
314f0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
31500 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
31510 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70     if( rc!=0 ) p
31520 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c  rintf("rc=%d\n",
31530 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
31540 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f  Op->opflags & (O
31550 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
31560 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29  EASE|OPFLG_OUT2)
31570 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
31580 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70  sterTrace(pOp->p
31590 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
315a0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
315b0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
315c0 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
315d0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
315e0 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33  terTrace(pOp->p3
315f0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
31600 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
31610 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
31620 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
31630 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
31640 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
31650 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
31660 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
31670 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
31680 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
31690 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
316a0 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
316b0 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
316c0 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
316d0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
316e0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
316f0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
31700 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
31710 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
31720 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
31730 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
31740 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
31750 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
31760 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
31770 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c               pc,
31790 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
317a0 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
317b0 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
317c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
317d0 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
317e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
317f0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
31800 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
31810 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
31820 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
31830 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
31840 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  b, resetSchemaOn
31850 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20  Fault-1);.  }.. 
31860 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
31870 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
31880 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
31890 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
318a0 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
318b0 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
318c0 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
318d0 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
318e0 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
318f0 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  n:.  db->lastRow
31900 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
31910 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53    testcase( nVmS
31920 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43  tep>0 );.  p->aC
31930 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
31940 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
31950 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65  ] += (int)nVmSte
31960 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  p;.  sqlite3Vdbe
31970 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75  Leave(p);.  retu
31980 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
31990 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
319a0 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
319b0 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
319c0 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
319d0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
319e0 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
319f0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
31a00 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
31a10 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
31a20 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
31a30 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
31a40 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
31a50 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
31a60 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
31a70 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
31a80 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
31a90 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
31aa0 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
31ab0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
31ac0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
31ad0 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
31ae0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
31af0 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
31b00 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
31b10 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
31b20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
31b30 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
31b40 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
31b50 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
31b60 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
31b70 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
31b80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
31b90 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
31ba0 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
31bb0 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
31bc0 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
31bd0 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
31be0 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
31bf0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
31c00 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
31c10 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
31c20 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
31c30 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
31c40 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
31c50 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
31c60 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
31c70 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
31c80 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
31c90 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
31ca0 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
31cb0 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
31cc0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
31cd0 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
31ce0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
31cf0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
31d00 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
31d10 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
31d20 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
31d30 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
31d40 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
31d50 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
31d60 7d 0a                                            }.